From f62fa83c262a051a7778124103b1559ef01eb7d6 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 2 Sep 2022 22:24:24 -0400 Subject: [PATCH 001/100] cleanup electron and web files --- .browserslistrc | 2 - .eslintrc.js | 24 - .prettierrc | 3 - babel.config.js | 3 - jest.config.js | 27 - package.json | 80 - postcss.config.js | 5 - public/css/scrollbar.css | 33 - public/icon.png | Bin 122309 -> 0 bytes public/index.html | 26 - src/App.vue | 1429 -- src/assets/logo.png | Bin 6849 -> 0 bytes src/background.ts | 127 - src/components/Accordion.vue | 76 - src/components/ColorPicker.vue | 185 - src/components/ExportMenu.vue | 0 src/components/HelloWorld.vue | 130 - src/components/LibraryMenu.vue | 399 - src/components/ProgressView.vue | 94 - src/components/properties/BoolProp.vue | 108 - src/components/properties/ColorProp.vue | 122 - src/components/properties/EnumProp.vue | 101 - src/components/properties/FloatProp.vue | 226 - src/components/properties/GradientProp.vue | 522 - src/components/properties/ImageProp.vue | 241 - src/components/properties/RandomSeedProp.vue | 198 - src/components/properties/StringProp.vue | 110 - .../properties/TextureChannelProp.vue | 127 - src/components/properties/ipropertyui.ts | 9 - src/components/variables/BoolVar.vue | 35 - src/components/variables/ColorVar.vue | 40 - src/components/variables/EnumVar.vue | 43 - src/components/variables/FloatVar.vue | 106 - src/export.ts | 375 - src/iapp.ts | 3 - src/lib/actions/addconnectionaction.ts | 25 - src/lib/actions/additemsaction.ts | 107 - src/lib/actions/changetexturechannelaction.ts | 89 - src/lib/actions/moveItemsaction.ts | 35 - src/lib/actions/propertychangeaction.ts | 44 - src/lib/actions/removeconnectionaction.ts | 25 - src/lib/actions/removeitemsaction.ts | 125 - src/lib/actions/resizeframeaction.ts | 26 - src/lib/actions/setglobalrandomseedaction.ts | 32 - src/lib/actions/setnoderandomseedaction.ts | 33 - src/lib/actions/switchconnectionaction.ts | 52 - src/lib/clipboard.ts | 357 - src/lib/designer.ts | 945 -- src/lib/designer/color.ts | 52 - src/lib/designer/designerconnection.ts | 12 - src/lib/designer/designernode.ts | 274 - src/lib/designer/designervariable.ts | 27 - src/lib/designer/gl.ts | 202 - src/lib/designer/gpudesignernode.ts | 541 - src/lib/designer/gradient.ts | 103 - src/lib/designer/image.ts | 118 - src/lib/designer/imagecanvas.ts | 79 - src/lib/designer/library.ts | 44 - src/lib/designer/properties.ts | 376 - src/lib/designer/texturedataconverter.ts | 426 - src/lib/editor.ts | 886 - src/lib/export/unityexporter.js | 657 - src/lib/export/unityzipexporter.js | 338 - src/lib/export/zipexporter.js | 302 - src/lib/geometry/cylinder.ts | 218 - src/lib/geometry/plane.ts | 117 - src/lib/geometry/sphere.ts | 183 - src/lib/library/libraryv0.ts | 29 - src/lib/library/libraryv1.ts | 76 - src/lib/library/libraryv2.ts | 188 - src/lib/library/v0/nodes.ts | 415 - src/lib/library/v1/blend.ts | 84 - src/lib/library/v1/brickgenerator.ts | 139 - src/lib/library/v1/brightnesscontrast.ts | 29 - src/lib/library/v1/cellnode.ts | 69 - src/lib/library/v1/checkerboard.ts | 30 - src/lib/library/v1/color.ts | 38 - src/lib/library/v1/copy.ts | 20 - src/lib/library/v1/directionalwarp.ts | 32 - src/lib/library/v1/fractalnoise.ts | 122 - src/lib/library/v1/gradient.ts | 204 - src/lib/library/v1/gradientmap.ts | 31 - src/lib/library/v1/heightshift.ts | 22 - src/lib/library/v1/hexagon.ts | 58 - src/lib/library/v1/invert.ts | 20 - src/lib/library/v1/linecell.ts | 111 - src/lib/library/v1/maprange.ts | 31 - src/lib/library/v1/mask.ts | 31 - src/lib/library/v1/mirror.ts | 51 - src/lib/library/v1/normalmap.ts | 109 - src/lib/library/v1/output.ts | 49 - src/lib/library/v1/perlin3d.ts | 182 - src/lib/library/v1/shapes.ts | 79 - src/lib/library/v1/simplexnoise.ts | 71 - src/lib/library/v1/solidcell.ts | 74 - src/lib/library/v1/splat.ts | 111 - src/lib/library/v1/threshold.ts | 28 - src/lib/library/v1/tile.ts | 71 - src/lib/library/v1/transform2d.ts | 91 - src/lib/library/v1/warp.ts | 28 - src/lib/library/v1/wave.ts | 29 - src/lib/library/v2/advancesplatter.ts | 191 - src/lib/library/v2/anisotropicblur.ts | 73 - src/lib/library/v2/bevel.ts | 285 - src/lib/library/v2/blur.ts | 60 - src/lib/library/v2/capsule.ts | 54 - src/lib/library/v2/cartesiantopolar.ts | 37 - src/lib/library/v2/circularsplatter.ts | 368 - src/lib/library/v2/clamp.ts | 37 - src/lib/library/v2/combinenormals.ts | 77 - src/lib/library/v2/directionalblur.ts | 68 - src/lib/library/v2/directionalwarpv2.ts | 32 - src/lib/library/v2/extractchannel.ts | 50 - src/lib/library/v2/floodfill.ts | 395 - src/lib/library/v2/floodfillsampler.ts | 174 - src/lib/library/v2/floodfilltobbox.ts | 43 - src/lib/library/v2/floodfilltocolor.ts | 74 - src/lib/library/v2/floodfilltogradient.ts | 87 - src/lib/library/v2/floodfilltorandomcolor.ts | 66 - .../library/v2/floodfilltorandomintensity.ts | 62 - src/lib/library/v2/gradientdynamic.ts | 36 - src/lib/library/v2/gradientnoise.ts | 61 - src/lib/library/v2/gradientnoisefractalsum.ts | 73 - src/lib/library/v2/grayscale.ts | 25 - src/lib/library/v2/histogramscan.ts | 56 - src/lib/library/v2/histogramselect.ts | 58 - src/lib/library/v2/histogramshift.ts | 25 - src/lib/library/v2/hsl.ts | 86 - src/lib/library/v2/hslextract.ts | 73 - src/lib/library/v2/imagenode.ts | 79 - src/lib/library/v2/invertnormal.ts | 34 - src/lib/library/v2/normalmapv2.ts | 108 - src/lib/library/v2/polartocartesian.ts | 42 - src/lib/library/v2/pow.ts | 23 - src/lib/library/v2/quantize.ts | 23 - src/lib/library/v2/rgbamerge.ts | 93 - src/lib/library/v2/rgbashuffle.ts | 83 - src/lib/library/v2/simplexnoise.ts | 65 - src/lib/library/v2/skew.ts | 68 - src/lib/library/v2/slopeblur.ts | 56 - src/lib/library/v2/softflower.ts | 63 - src/lib/library/v2/splat.ts | 134 - src/lib/library/v2/star.ts | 71 - src/lib/library/v2/stripes.ts | 29 - src/lib/library/v2/tilesampler.ts | 255 - src/lib/library/v2/transform2dv2.ts | 92 - src/lib/library/v2/valuenoise.ts | 49 - src/lib/library/v2/valuenoisefractalsum.ts | 66 - src/lib/library/v2/warpv2.ts | 42 - src/lib/library/v3/crop.ts | 47 - src/lib/project.ts | 36 - src/lib/scene.ts | 1203 -- src/lib/scene/commentgraphicsitem.ts | 202 - src/lib/scene/connectiongraphicsitem.ts | 24 - src/lib/scene/framegraphicsitem.ts | 585 - src/lib/scene/graphicsitem.ts | 199 - src/lib/scene/navigationgraphicsitem.ts | 82 - src/lib/scene/nodegraphicsitem.ts | 294 - src/lib/scene/selectiongraphicsitem.ts | 279 - src/lib/scene/socketgraphicsitem.ts | 337 - src/lib/scene/view.ts | 385 - src/lib/undostack.ts | 88 - src/lib/utils.ts | 9 - src/lib/view3d.ts | 513 - src/main.ts | 55 - src/menu.ts | 297 - src/router.ts | 24 - src/settings.ts | 3 - src/shims-tsx.d.ts | 13 - src/shims-vue.d.ts | 9 - src/store.ts | 10 - src/unobserve.ts | 14 - src/utils/inspectelement.ts | 27 - src/utils/propgroupcache.ts | 58 - src/views/About.vue | 5 - src/views/Editor.vue | 14 - src/views/Home.vue | 18 - src/views/Library.vue | 296 - src/views/NodeProperties.vue | 275 - src/views/Preview2D.vue | 186 - src/views/Preview3D.vue | 403 - src/views/TextureVariables.vue | 66 - src/views/dialogs/ExportDialog.vue | 212 - src/views/preview2d/previewcanvas2d.ts | 338 - tests/unit/.eslintrc.js | 5 - tests/unit/example.spec.ts | 12 - tsconfig.json | 28 - vue.config.js | 25 - yarn.lock | 13477 ---------------- 189 files changed, 38965 deletions(-) delete mode 100644 .browserslistrc delete mode 100644 .eslintrc.js delete mode 100644 .prettierrc delete mode 100644 babel.config.js delete mode 100644 jest.config.js delete mode 100644 package.json delete mode 100644 postcss.config.js delete mode 100644 public/css/scrollbar.css delete mode 100644 public/icon.png delete mode 100644 public/index.html delete mode 100644 src/App.vue delete mode 100644 src/assets/logo.png delete mode 100644 src/background.ts delete mode 100644 src/components/Accordion.vue delete mode 100644 src/components/ColorPicker.vue delete mode 100644 src/components/ExportMenu.vue delete mode 100644 src/components/HelloWorld.vue delete mode 100644 src/components/LibraryMenu.vue delete mode 100644 src/components/ProgressView.vue delete mode 100644 src/components/properties/BoolProp.vue delete mode 100644 src/components/properties/ColorProp.vue delete mode 100644 src/components/properties/EnumProp.vue delete mode 100644 src/components/properties/FloatProp.vue delete mode 100644 src/components/properties/GradientProp.vue delete mode 100644 src/components/properties/ImageProp.vue delete mode 100644 src/components/properties/RandomSeedProp.vue delete mode 100644 src/components/properties/StringProp.vue delete mode 100644 src/components/properties/TextureChannelProp.vue delete mode 100644 src/components/properties/ipropertyui.ts delete mode 100644 src/components/variables/BoolVar.vue delete mode 100644 src/components/variables/ColorVar.vue delete mode 100644 src/components/variables/EnumVar.vue delete mode 100644 src/components/variables/FloatVar.vue delete mode 100644 src/export.ts delete mode 100644 src/iapp.ts delete mode 100644 src/lib/actions/addconnectionaction.ts delete mode 100644 src/lib/actions/additemsaction.ts delete mode 100644 src/lib/actions/changetexturechannelaction.ts delete mode 100644 src/lib/actions/moveItemsaction.ts delete mode 100644 src/lib/actions/propertychangeaction.ts delete mode 100644 src/lib/actions/removeconnectionaction.ts delete mode 100644 src/lib/actions/removeitemsaction.ts delete mode 100644 src/lib/actions/resizeframeaction.ts delete mode 100644 src/lib/actions/setglobalrandomseedaction.ts delete mode 100644 src/lib/actions/setnoderandomseedaction.ts delete mode 100644 src/lib/actions/switchconnectionaction.ts delete mode 100644 src/lib/clipboard.ts delete mode 100644 src/lib/designer.ts delete mode 100644 src/lib/designer/color.ts delete mode 100644 src/lib/designer/designerconnection.ts delete mode 100644 src/lib/designer/designernode.ts delete mode 100644 src/lib/designer/designervariable.ts delete mode 100644 src/lib/designer/gl.ts delete mode 100644 src/lib/designer/gpudesignernode.ts delete mode 100644 src/lib/designer/gradient.ts delete mode 100644 src/lib/designer/image.ts delete mode 100644 src/lib/designer/imagecanvas.ts delete mode 100644 src/lib/designer/library.ts delete mode 100644 src/lib/designer/properties.ts delete mode 100644 src/lib/designer/texturedataconverter.ts delete mode 100644 src/lib/editor.ts delete mode 100644 src/lib/export/unityexporter.js delete mode 100644 src/lib/export/unityzipexporter.js delete mode 100644 src/lib/export/zipexporter.js delete mode 100644 src/lib/geometry/cylinder.ts delete mode 100644 src/lib/geometry/plane.ts delete mode 100644 src/lib/geometry/sphere.ts delete mode 100644 src/lib/library/libraryv0.ts delete mode 100644 src/lib/library/libraryv1.ts delete mode 100644 src/lib/library/libraryv2.ts delete mode 100644 src/lib/library/v0/nodes.ts delete mode 100644 src/lib/library/v1/blend.ts delete mode 100644 src/lib/library/v1/brickgenerator.ts delete mode 100644 src/lib/library/v1/brightnesscontrast.ts delete mode 100644 src/lib/library/v1/cellnode.ts delete mode 100644 src/lib/library/v1/checkerboard.ts delete mode 100644 src/lib/library/v1/color.ts delete mode 100644 src/lib/library/v1/copy.ts delete mode 100644 src/lib/library/v1/directionalwarp.ts delete mode 100644 src/lib/library/v1/fractalnoise.ts delete mode 100644 src/lib/library/v1/gradient.ts delete mode 100644 src/lib/library/v1/gradientmap.ts delete mode 100644 src/lib/library/v1/heightshift.ts delete mode 100644 src/lib/library/v1/hexagon.ts delete mode 100644 src/lib/library/v1/invert.ts delete mode 100644 src/lib/library/v1/linecell.ts delete mode 100644 src/lib/library/v1/maprange.ts delete mode 100644 src/lib/library/v1/mask.ts delete mode 100644 src/lib/library/v1/mirror.ts delete mode 100644 src/lib/library/v1/normalmap.ts delete mode 100644 src/lib/library/v1/output.ts delete mode 100644 src/lib/library/v1/perlin3d.ts delete mode 100644 src/lib/library/v1/shapes.ts delete mode 100644 src/lib/library/v1/simplexnoise.ts delete mode 100644 src/lib/library/v1/solidcell.ts delete mode 100644 src/lib/library/v1/splat.ts delete mode 100644 src/lib/library/v1/threshold.ts delete mode 100644 src/lib/library/v1/tile.ts delete mode 100644 src/lib/library/v1/transform2d.ts delete mode 100644 src/lib/library/v1/warp.ts delete mode 100644 src/lib/library/v1/wave.ts delete mode 100644 src/lib/library/v2/advancesplatter.ts delete mode 100644 src/lib/library/v2/anisotropicblur.ts delete mode 100644 src/lib/library/v2/bevel.ts delete mode 100644 src/lib/library/v2/blur.ts delete mode 100644 src/lib/library/v2/capsule.ts delete mode 100644 src/lib/library/v2/cartesiantopolar.ts delete mode 100644 src/lib/library/v2/circularsplatter.ts delete mode 100644 src/lib/library/v2/clamp.ts delete mode 100644 src/lib/library/v2/combinenormals.ts delete mode 100644 src/lib/library/v2/directionalblur.ts delete mode 100644 src/lib/library/v2/directionalwarpv2.ts delete mode 100644 src/lib/library/v2/extractchannel.ts delete mode 100644 src/lib/library/v2/floodfill.ts delete mode 100644 src/lib/library/v2/floodfillsampler.ts delete mode 100644 src/lib/library/v2/floodfilltobbox.ts delete mode 100644 src/lib/library/v2/floodfilltocolor.ts delete mode 100644 src/lib/library/v2/floodfilltogradient.ts delete mode 100644 src/lib/library/v2/floodfilltorandomcolor.ts delete mode 100644 src/lib/library/v2/floodfilltorandomintensity.ts delete mode 100644 src/lib/library/v2/gradientdynamic.ts delete mode 100644 src/lib/library/v2/gradientnoise.ts delete mode 100644 src/lib/library/v2/gradientnoisefractalsum.ts delete mode 100644 src/lib/library/v2/grayscale.ts delete mode 100644 src/lib/library/v2/histogramscan.ts delete mode 100644 src/lib/library/v2/histogramselect.ts delete mode 100644 src/lib/library/v2/histogramshift.ts delete mode 100644 src/lib/library/v2/hsl.ts delete mode 100644 src/lib/library/v2/hslextract.ts delete mode 100644 src/lib/library/v2/imagenode.ts delete mode 100644 src/lib/library/v2/invertnormal.ts delete mode 100644 src/lib/library/v2/normalmapv2.ts delete mode 100644 src/lib/library/v2/polartocartesian.ts delete mode 100644 src/lib/library/v2/pow.ts delete mode 100644 src/lib/library/v2/quantize.ts delete mode 100644 src/lib/library/v2/rgbamerge.ts delete mode 100644 src/lib/library/v2/rgbashuffle.ts delete mode 100644 src/lib/library/v2/simplexnoise.ts delete mode 100644 src/lib/library/v2/skew.ts delete mode 100644 src/lib/library/v2/slopeblur.ts delete mode 100644 src/lib/library/v2/softflower.ts delete mode 100644 src/lib/library/v2/splat.ts delete mode 100644 src/lib/library/v2/star.ts delete mode 100644 src/lib/library/v2/stripes.ts delete mode 100644 src/lib/library/v2/tilesampler.ts delete mode 100644 src/lib/library/v2/transform2dv2.ts delete mode 100644 src/lib/library/v2/valuenoise.ts delete mode 100644 src/lib/library/v2/valuenoisefractalsum.ts delete mode 100644 src/lib/library/v2/warpv2.ts delete mode 100644 src/lib/library/v3/crop.ts delete mode 100644 src/lib/project.ts delete mode 100644 src/lib/scene.ts delete mode 100644 src/lib/scene/commentgraphicsitem.ts delete mode 100644 src/lib/scene/connectiongraphicsitem.ts delete mode 100644 src/lib/scene/framegraphicsitem.ts delete mode 100644 src/lib/scene/graphicsitem.ts delete mode 100644 src/lib/scene/navigationgraphicsitem.ts delete mode 100644 src/lib/scene/nodegraphicsitem.ts delete mode 100644 src/lib/scene/selectiongraphicsitem.ts delete mode 100644 src/lib/scene/socketgraphicsitem.ts delete mode 100644 src/lib/scene/view.ts delete mode 100644 src/lib/undostack.ts delete mode 100644 src/lib/utils.ts delete mode 100644 src/lib/view3d.ts delete mode 100644 src/main.ts delete mode 100644 src/menu.ts delete mode 100644 src/router.ts delete mode 100644 src/settings.ts delete mode 100644 src/shims-tsx.d.ts delete mode 100644 src/shims-vue.d.ts delete mode 100644 src/store.ts delete mode 100644 src/unobserve.ts delete mode 100644 src/utils/inspectelement.ts delete mode 100644 src/utils/propgroupcache.ts delete mode 100644 src/views/About.vue delete mode 100644 src/views/Editor.vue delete mode 100644 src/views/Home.vue delete mode 100644 src/views/Library.vue delete mode 100644 src/views/NodeProperties.vue delete mode 100644 src/views/Preview2D.vue delete mode 100644 src/views/Preview3D.vue delete mode 100644 src/views/TextureVariables.vue delete mode 100644 src/views/dialogs/ExportDialog.vue delete mode 100644 src/views/preview2d/previewcanvas2d.ts delete mode 100644 tests/unit/.eslintrc.js delete mode 100644 tests/unit/example.spec.ts delete mode 100644 tsconfig.json delete mode 100644 vue.config.js delete mode 100644 yarn.lock diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index d6471a38..00000000 --- a/.browserslistrc +++ /dev/null @@ -1,2 +0,0 @@ -> 1% -last 2 versions diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 761b3cdb..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports = { - root: true, - env: { - node: true - }, - extends: [ - "plugin:vue/essential", - "eslint:recommended", - "@vue/prettier", - "@vue/typescript" - ], - rules: { - // "no-console": process.env.NODE_ENV === "production" ? "error" : "off", - // "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off", - "no-console": "off", - "no-debugger": "off", - indent: "off", - allowIndentationTabs: true - }, - parserOptions: { - parser: "@typescript-eslint/parser", - ecmaVersion: 6 - } -}; diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index c9590876..00000000 --- a/.prettierrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "useTabs": true -} diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index f57da986..00000000 --- a/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ["@vue/app"] -}; diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index a31425cf..00000000 --- a/jest.config.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - moduleFileExtensions: ["js", "jsx", "json", "vue", "ts", "tsx"], - transform: { - "^.+\\.vue$": "vue-jest", - ".+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$": - "jest-transform-stub", - "^.+\\.tsx?$": "ts-jest" - }, - transformIgnorePatterns: ["/node_modules/"], - moduleNameMapper: { - "^@/(.*)$": "/src/$1" - }, - snapshotSerializers: ["jest-serializer-vue"], - testMatch: [ - "**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)" - ], - testURL: "http://localhost/", - watchPlugins: [ - "jest-watch-typeahead/filename", - "jest-watch-typeahead/testname" - ], - globals: { - "ts-jest": { - babelConfig: true - } - } -}; diff --git a/package.json b/package.json deleted file mode 100644 index b954adc2..00000000 --- a/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "name": "texturelab", - "version": "0.3.4", - "displayVersion": "0.3.4", - "private": false, - "scripts": { - "serve": "vue-cli-service serve", - "build": "vue-cli-service build", - "lint": "vue-cli-service lint", - "preelectron:build": "yarn buildicons", - "electron:build": "vue-cli-service electron:build", - "electron:serve": "vue-cli-service electron:serve", - "start": "vue-cli-service electron:serve", - "postinstall": "electron-builder install-app-deps", - "postuninstall": "electron-builder install-app-deps", - "test:unit": "vue-cli-service test:unit", - "buildicons": "electron-icon-builder --input=./public/icon.png --output ./build" - }, - "main": "background.js", - "dependencies": { - "@electron/remote": "^1.2.0", - "@petamoriken/float16": "^3.4.7", - "@sentry/electron": "^3.0.0", - "@types/adm-zip": "^0.4.34", - "@types/node": "^16.9.2", - "@types/pngjs": "^6.0.1", - "@types/sharp": "^0.29.2", - "adm-zip": "^0.4.16", - "boxicons": "^2.0.5", - "core-js": "^2.6.5", - "custom-electron-titlebar": "^3.1.0", - "dedent-js": "^1.0.1", - "electron-settings": "^4.0.2", - "element-resize-detector": "^1.1.15", - "fast-png": "^5.0.4", - "jquery": "^3.5.0", - "pngjs": "^6.0.0", - "sharp": "^0.29.1", - "three": "^0.118.3", - "three-orbitcontrols-ts": "git+https://git@github.com/nicolaspanel/three-orbitcontrols-ts.git", - "typeface-open-sans": "^0.0.75", - "upng-js": "^2.1.0", - "vue": "^2.6.10", - "vue-class-component": "^7.0.2", - "vue-color": "^2.7.1", - "vue-final-modal": "^2.4.1", - "vue-golden-layout": "^1.6.0", - "vue-property-decorator": "^8.1.0", - "vue-router": "^3.0.3", - "vue-toast-notification": "^0.6.2", - "vuex": "^3.0.1" - }, - "devDependencies": { - "@sentry/webpack-plugin": "^1.16.0", - "@types/jest": "^23.1.4", - "@types/jquery": "^3.3.30", - "@types/three": "^0.103.2", - "@typescript-eslint/eslint-plugin": "^2.33.0", - "@typescript-eslint/parser": "^2.33.0", - "@vue/cli-plugin-babel": "^3.8.0", - "@vue/cli-plugin-eslint": "^3.8.0", - "@vue/cli-plugin-typescript": "^3.8.0", - "@vue/cli-plugin-unit-jest": "^3.8.0", - "@vue/cli-service": "^3.8.0", - "@vue/eslint-config-prettier": "^4.0.1", - "@vue/eslint-config-typescript": "^4.0.0", - "@vue/test-utils": "1.0.0-beta.29", - "babel-core": "7.0.0-bridge.0", - "babel-eslint": "^10.0.1", - "electron": "^13.0.0", - "electron-devtools-installer": "^3.2.0", - "electron-icon-builder": "^2.0.1", - "eslint": "^5.16.0", - "eslint-plugin-vue": "^5.0.0", - "ts-jest": "^23.0.0", - "typescript": "^3.9.5", - "vue-cli-plugin-electron-builder": "^1.4.0", - "vue-template-compiler": "^2.6.10" - } -} diff --git a/postcss.config.js b/postcss.config.js deleted file mode 100644 index 30803047..00000000 --- a/postcss.config.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - plugins: { - autoprefixer: {} - } -}; diff --git a/public/css/scrollbar.css b/public/css/scrollbar.css deleted file mode 100644 index 9d3e8573..00000000 --- a/public/css/scrollbar.css +++ /dev/null @@ -1,33 +0,0 @@ -::-webkit-scrollbar { - width: 6px; - height: 6px; -} -::-webkit-scrollbar-button { - width: 0px; - height: 0px; -} -::-webkit-scrollbar-thumb { - background: #e1e1e1; - border: 0px none #ffffff; - border-radius: 50px; -} -::-webkit-scrollbar-thumb:hover { - background: #ffffff; -} -::-webkit-scrollbar-thumb:active { - background: #a7a7a7; -} -::-webkit-scrollbar-track { - background: #666666; - border: 0px none #ffffff; - border-radius: 50px; -} -::-webkit-scrollbar-track:hover { - background: #666666; -} -::-webkit-scrollbar-track:active { - background: #333333; -} -::-webkit-scrollbar-corner { - background: transparent; -} diff --git a/public/icon.png b/public/icon.png deleted file mode 100644 index 68017cdef237aaa2d77598b6d643dbcb029a2c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122309 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≺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 Q3;_q$ - - - - - - - TextureLab v0.3.4 - - - - -
- - - diff --git a/src/App.vue b/src/App.vue deleted file mode 100644 index 610f8f88..00000000 --- a/src/App.vue +++ /dev/null @@ -1,1429 +0,0 @@ - - - - - - - - diff --git a/src/assets/logo.png b/src/assets/logo.png deleted file mode 100644 index f3d2503fc2a44b5053b0837ebea6e87a2d339a43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6849 zcmaKRcUV(fvo}bjDT-7nLI_nlK}sT_69H+`qzVWDA|yaU?}j417wLi^B1KB1SLsC& zL0ag7$U(XW5YR7p&Ux?sP$d4lvMt8C^+TcQu4F zQqv!UF!I+kw)c0jhd6+g6oCr9P?7)?!qX1ui*iL{p}sKCAGuJ{{W)0z1pLF|=>h}& zt(2Lr0Z`2ig8<5i%Zk}cO5Fm=LByqGWaS`oqChZdEFmc`0hSb#gg|Aap^{+WKOYcj zHjINK)KDG%&s?Mt4CL(T=?;~U@bU2x_mLKN!#GJuK_CzbNw5SMEJorG!}_5;?R>@1 zSl)jns3WlU7^J%=(hUtfmuUCU&C3%8B5C^f5>W2Cy8jW3#{Od{lF1}|?c61##3dzA zsPlFG;l_FzBK}8>|H_Ru_H#!_7$UH4UKo3lKOA}g1(R&|e@}GINYVzX?q=_WLZCgh z)L|eJMce`D0EIwgRaNETDsr+?vQknSGAi=7H00r`QnI%oQnFxm`G2umXso9l+8*&Q z7WqF|$p49js$mdzo^BXpH#gURy=UO;=IMrYc5?@+sR4y_?d*~0^YP7d+y0{}0)zBM zIKVM(DBvICK#~7N0a+PY6)7;u=dutmNqK3AlsrUU9U`d;msiucB_|8|2kY=(7XA;G zwDA8AR)VCA#JOkxm#6oHNS^YVuOU;8p$N)2{`;oF|rQ?B~K$%rHDxXs+_G zF5|-uqHZvSzq}L;5Kcy_P+x0${33}Ofb6+TX&=y;;PkEOpz%+_bCw_{<&~ zeLV|!bP%l1qxywfVr9Z9JI+++EO^x>ZuCK);=$VIG1`kxK8F2M8AdC$iOe3cj1fo(ce4l-9 z7*zKy3={MixvUk=enQE;ED~7tv%qh&3lR<0m??@w{ILF|e#QOyPkFYK!&Up7xWNtL zOW%1QMC<3o;G9_S1;NkPB6bqbCOjeztEc6TsBM<(q9((JKiH{01+Ud=uw9B@{;(JJ z-DxI2*{pMq`q1RQc;V8@gYAY44Z!%#W~M9pRxI(R?SJ7sy7em=Z5DbuDlr@*q|25V)($-f}9c#?D%dU^RS<(wz?{P zFFHtCab*!rl(~j@0(Nadvwg8q|4!}L^>d?0al6}Rrv9$0M#^&@zjbfJy_n!%mVHK4 z6pLRIQ^Uq~dnyy$`ay51Us6WaP%&O;@49m&{G3z7xV3dLtt1VTOMYl3UW~Rm{Eq4m zF?Zl_v;?7EFx1_+#WFUXxcK78IV)FO>42@cm@}2I%pVbZqQ}3;p;sDIm&knay03a^ zn$5}Q$G!@fTwD$e(x-~aWP0h+4NRz$KlnO_H2c< z(XX#lPuW_%H#Q+c&(nRyX1-IadKR-%$4FYC0fsCmL9ky3 zKpxyjd^JFR+vg2!=HWf}2Z?@Td`0EG`kU?{8zKrvtsm)|7>pPk9nu@2^z96aU2<#` z2QhvH5w&V;wER?mopu+nqu*n8p~(%QkwSs&*0eJwa zMXR05`OSFpfyRb!Y_+H@O%Y z0=K^y6B8Gcbl?SA)qMP3Z+=C(?8zL@=74R=EVnE?vY!1BQy2@q*RUgRx4yJ$k}MnL zs!?74QciNb-LcG*&o<9=DSL>1n}ZNd)w1z3-0Pd^4ED1{qd=9|!!N?xnXjM!EuylY z5=!H>&hSofh8V?Jofyd!h`xDI1fYAuV(sZwwN~{$a}MX^=+0TH*SFp$vyxmUv7C*W zv^3Gl0+eTFgBi3FVD;$nhcp)ka*4gSskYIqQ&+M}xP9yLAkWzBI^I%zR^l1e?bW_6 zIn{mo{dD=)9@V?s^fa55jh78rP*Ze<3`tRCN4*mpO$@7a^*2B*7N_|A(Ve2VB|)_o z$=#_=aBkhe(ifX}MLT()@5?OV+~7cXC3r!%{QJxriXo9I%*3q4KT4Xxzyd{ z9;_%=W%q!Vw$Z7F3lUnY+1HZ*lO;4;VR2+i4+D(m#01OYq|L_fbnT;KN<^dkkCwtd zF7n+O7KvAw8c`JUh6LmeIrk4`F3o|AagKSMK3))_5Cv~y2Bb2!Ibg9BO7Vkz?pAYX zoI=B}+$R22&IL`NCYUYjrdhwjnMx_v=-Qcx-jmtN>!Zqf|n1^SWrHy zK|MwJ?Z#^>)rfT5YSY{qjZ&`Fjd;^vv&gF-Yj6$9-Dy$<6zeP4s+78gS2|t%Z309b z0^fp~ue_}i`U9j!<|qF92_3oB09NqgAoehQ`)<)dSfKoJl_A6Ec#*Mx9Cpd-p#$Ez z={AM*r-bQs6*z$!*VA4|QE7bf@-4vb?Q+pPKLkY2{yKsw{&udv_2v8{Dbd zm~8VAv!G~s)`O3|Q6vFUV%8%+?ZSVUa(;fhPNg#vab@J*9XE4#D%)$UU-T5`fwjz! z6&gA^`OGu6aUk{l*h9eB?opVdrHK>Q@U>&JQ_2pR%}TyOXGq_6s56_`U(WoOaAb+K zXQr#6H}>a-GYs9^bGP2Y&hSP5gEtW+GVC4=wy0wQk=~%CSXj=GH6q z-T#s!BV`xZVxm{~jr_ezYRpqqIcXC=Oq`b{lu`Rt(IYr4B91hhVC?yg{ol4WUr3v9 zOAk2LG>CIECZ-WIs0$N}F#eoIUEtZudc7DPYIjzGqDLWk_A4#(LgacooD z2K4IWs@N`Bddm-{%oy}!k0^i6Yh)uJ1S*90>|bm3TOZxcV|ywHUb(+CeX-o1|LTZM zwU>dY3R&U)T(}5#Neh?-CWT~@{6Ke@sI)uSuzoah8COy)w)B)aslJmp`WUcjdia-0 zl2Y}&L~XfA`uYQboAJ1;J{XLhYjH){cObH3FDva+^8ioOQy%Z=xyjGLmWMrzfFoH; zEi3AG`_v+%)&lDJE;iJWJDI@-X9K5O)LD~j*PBe(wu+|%ar~C+LK1+-+lK=t# z+Xc+J7qp~5q=B~rD!x78)?1+KUIbYr^5rcl&tB-cTtj+e%{gpZZ4G~6r15+d|J(ky zjg@@UzMW0k9@S#W(1H{u;Nq(7llJbq;;4t$awM;l&(2s+$l!Ay9^Ge|34CVhr7|BG z?dAR83smef^frq9V(OH+a+ki#q&-7TkWfFM=5bsGbU(8mC;>QTCWL5ydz9s6k@?+V zcjiH`VI=59P-(-DWXZ~5DH>B^_H~;4$)KUhnmGo*G!Tq8^LjfUDO)lASN*=#AY_yS zqW9UX(VOCO&p@kHdUUgsBO0KhXxn1sprK5h8}+>IhX(nSXZKwlNsjk^M|RAaqmCZB zHBolOHYBas@&{PT=R+?d8pZu zUHfyucQ`(umXSW7o?HQ3H21M`ZJal+%*)SH1B1j6rxTlG3hx1IGJN^M7{$j(9V;MZ zRKybgVuxKo#XVM+?*yTy{W+XHaU5Jbt-UG33x{u(N-2wmw;zzPH&4DE103HV@ER86 z|FZEmQb|&1s5#`$4!Cm}&`^{(4V}OP$bk`}v6q6rm;P!H)W|2i^e{7lTk2W@jo_9q z*aw|U7#+g59Fv(5qI`#O-qPj#@_P>PC#I(GSp3DLv7x-dmYK=C7lPF8a)bxb=@)B1 zUZ`EqpXV2dR}B&r`uM}N(TS99ZT0UB%IN|0H%DcVO#T%L_chrgn#m6%x4KE*IMfjX zJ%4veCEqbXZ`H`F_+fELMC@wuy_ch%t*+Z+1I}wN#C+dRrf2X{1C8=yZ_%Pt6wL_~ zZ2NN-hXOT4P4n$QFO7yYHS-4wF1Xfr-meG9Pn;uK51?hfel`d38k{W)F*|gJLT2#T z<~>spMu4(mul-8Q3*pf=N4DcI)zzjqAgbE2eOT7~&f1W3VsdD44Ffe;3mJp-V@8UC z)|qnPc12o~$X-+U@L_lWqv-RtvB~%hLF($%Ew5w>^NR82qC_0FB z)=hP1-OEx?lLi#jnLzH}a;Nvr@JDO-zQWd}#k^an$Kwml;MrD&)sC5b`s0ZkVyPkb zt}-jOq^%_9>YZe7Y}PhW{a)c39G`kg(P4@kxjcYfgB4XOOcmezdUI7j-!gs7oAo2o zx(Ph{G+YZ`a%~kzK!HTAA5NXE-7vOFRr5oqY$rH>WI6SFvWmahFav!CfRMM3%8J&c z*p+%|-fNS_@QrFr(at!JY9jCg9F-%5{nb5Bo~z@Y9m&SHYV`49GAJjA5h~h4(G!Se zZmK{Bo7ivCfvl}@A-ptkFGcWXAzj3xfl{evi-OG(TaCn1FAHxRc{}B|x+Ua1D=I6M z!C^ZIvK6aS_c&(=OQDZfm>O`Nxsw{ta&yiYPA~@e#c%N>>#rq)k6Aru-qD4(D^v)y z*>Rs;YUbD1S8^D(ps6Jbj0K3wJw>L4m)0e(6Pee3Y?gy9i0^bZO?$*sv+xKV?WBlh zAp*;v6w!a8;A7sLB*g-^<$Z4L7|5jXxxP1}hQZ<55f9<^KJ>^mKlWSGaLcO0=$jem zWyZkRwe~u{{tU63DlCaS9$Y4CP4f?+wwa(&1ou)b>72ydrFvm`Rj-0`kBJgK@nd(*Eh!(NC{F-@=FnF&Y!q`7){YsLLHf0_B6aHc# z>WIuHTyJwIH{BJ4)2RtEauC7Yq7Cytc|S)4^*t8Va3HR zg=~sN^tp9re@w=GTx$;zOWMjcg-7X3Wk^N$n;&Kf1RgVG2}2L-(0o)54C509C&77i zrjSi{X*WV=%C17((N^6R4Ya*4#6s_L99RtQ>m(%#nQ#wrRC8Y%yxkH;d!MdY+Tw@r zjpSnK`;C-U{ATcgaxoEpP0Gf+tx);buOMlK=01D|J+ROu37qc*rD(w`#O=3*O*w9?biwNoq3WN1`&Wp8TvKj3C z3HR9ssH7a&Vr<6waJrU zdLg!ieYz%U^bmpn%;(V%%ugMk92&?_XX1K@mwnVSE6!&%P%Wdi7_h`CpScvspMx?N zQUR>oadnG17#hNc$pkTp+9lW+MBKHRZ~74XWUryd)4yd zj98$%XmIL4(9OnoeO5Fnyn&fpQ9b0h4e6EHHw*l68j;>(ya`g^S&y2{O8U>1*>4zR zq*WSI_2o$CHQ?x0!wl9bpx|Cm2+kFMR)oMud1%n2=qn5nE&t@Fgr#=Zv2?}wtEz^T z9rrj=?IH*qI5{G@Rn&}^Z{+TW}mQeb9=8b<_a`&Cm#n%n~ zU47MvCBsdXFB1+adOO)03+nczfWa#vwk#r{o{dF)QWya9v2nv43Zp3%Ps}($lA02*_g25t;|T{A5snSY?3A zrRQ~(Ygh_ebltHo1VCbJb*eOAr;4cnlXLvI>*$-#AVsGg6B1r7@;g^L zFlJ_th0vxO7;-opU@WAFe;<}?!2q?RBrFK5U{*ai@NLKZ^};Ul}beukveh?TQn;$%9=R+DX07m82gP$=}Uo_%&ngV`}Hyv8g{u z3SWzTGV|cwQuFIs7ZDOqO_fGf8Q`8MwL}eUp>q?4eqCmOTcwQuXtQckPy|4F1on8l zP*h>d+cH#XQf|+6c|S{7SF(Lg>bR~l(0uY?O{OEVlaxa5@e%T&xju=o1`=OD#qc16 zSvyH*my(dcp6~VqR;o(#@m44Lug@~_qw+HA=mS#Z^4reBy8iV?H~I;{LQWk3aKK8$bLRyt$g?- { - win = null; - }); -} - -// Quit when all windows are closed. -app.on("window-all-closed", () => { - // On macOS it is common for applications and their menu bar - // to stay active until the user quits explicitly with Cmd + Q - if (process.platform !== "darwin") { - app.quit(); - } -}); - -app.on("activate", () => { - // On macOS it's common to re-create a window in the app when the - // dock icon is clicked and there are no other windows open. - if (win === null) { - createWindow(); - } -}); - -// This method will be called when Electron has finished -// initialization and is ready to create browser windows. -// Some APIs can only be used after this event occurs. -app.on("ready", async () => { - if (isDevelopment && !process.env.IS_TEST) { - // Install Vue Devtools - try { - await installExtension({ - id: "ljjemllljcmogpfapbkkighbhhppjdbg", //Vue Devtools beta - electron: ">=1.2.1" - }); - } catch (e) { - console.error("Vue Devtools failed to install:", e.toString()); - } - } - - // needed for image files to work - // https://github.com/electron/electron/issues/23393 - protocol.registerFileProtocol("image", (request, callback) => { - const url = request.url.replace("image://", ""); - - try { - return callback(url); - } catch (error) { - console.error(error); - return callback(""); - } - }); - - createWindow(); -}); - -// Exit cleanly on request from parent process in development mode. -if (isDevelopment) { - if (process.platform === "win32") { - process.on("message", data => { - if (data === "graceful-exit") { - app.quit(); - } - }); - } else { - process.on("SIGTERM", () => { - app.quit(); - }); - } -} diff --git a/src/components/Accordion.vue b/src/components/Accordion.vue deleted file mode 100644 index f0a7ac37..00000000 --- a/src/components/Accordion.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - - diff --git a/src/components/ColorPicker.vue b/src/components/ColorPicker.vue deleted file mode 100644 index 387cc650..00000000 --- a/src/components/ColorPicker.vue +++ /dev/null @@ -1,185 +0,0 @@ - - - - - diff --git a/src/components/ExportMenu.vue b/src/components/ExportMenu.vue deleted file mode 100644 index e69de29b..00000000 diff --git a/src/components/HelloWorld.vue b/src/components/HelloWorld.vue deleted file mode 100644 index 8fd7679d..00000000 --- a/src/components/HelloWorld.vue +++ /dev/null @@ -1,130 +0,0 @@ - - - - - - diff --git a/src/components/LibraryMenu.vue b/src/components/LibraryMenu.vue deleted file mode 100644 index 29591ec5..00000000 --- a/src/components/LibraryMenu.vue +++ /dev/null @@ -1,399 +0,0 @@ - - - - - diff --git a/src/components/ProgressView.vue b/src/components/ProgressView.vue deleted file mode 100644 index c2e9decd..00000000 --- a/src/components/ProgressView.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - - - diff --git a/src/components/properties/BoolProp.vue b/src/components/properties/BoolProp.vue deleted file mode 100644 index b6706607..00000000 --- a/src/components/properties/BoolProp.vue +++ /dev/null @@ -1,108 +0,0 @@ - - - - - diff --git a/src/components/properties/ColorProp.vue b/src/components/properties/ColorProp.vue deleted file mode 100644 index 861052e3..00000000 --- a/src/components/properties/ColorProp.vue +++ /dev/null @@ -1,122 +0,0 @@ -, - - - - - diff --git a/src/components/properties/EnumProp.vue b/src/components/properties/EnumProp.vue deleted file mode 100644 index 1797abe1..00000000 --- a/src/components/properties/EnumProp.vue +++ /dev/null @@ -1,101 +0,0 @@ - - - - - diff --git a/src/components/properties/FloatProp.vue b/src/components/properties/FloatProp.vue deleted file mode 100644 index 6a8ca8c1..00000000 --- a/src/components/properties/FloatProp.vue +++ /dev/null @@ -1,226 +0,0 @@ - - - - - diff --git a/src/components/properties/GradientProp.vue b/src/components/properties/GradientProp.vue deleted file mode 100644 index 66afed29..00000000 --- a/src/components/properties/GradientProp.vue +++ /dev/null @@ -1,522 +0,0 @@ - - - - - diff --git a/src/components/properties/ImageProp.vue b/src/components/properties/ImageProp.vue deleted file mode 100644 index 1639e02a..00000000 --- a/src/components/properties/ImageProp.vue +++ /dev/null @@ -1,241 +0,0 @@ - - - - - diff --git a/src/components/properties/RandomSeedProp.vue b/src/components/properties/RandomSeedProp.vue deleted file mode 100644 index f833560f..00000000 --- a/src/components/properties/RandomSeedProp.vue +++ /dev/null @@ -1,198 +0,0 @@ - - - - - diff --git a/src/components/properties/StringProp.vue b/src/components/properties/StringProp.vue deleted file mode 100644 index 5663d390..00000000 --- a/src/components/properties/StringProp.vue +++ /dev/null @@ -1,110 +0,0 @@ - - - - - diff --git a/src/components/properties/TextureChannelProp.vue b/src/components/properties/TextureChannelProp.vue deleted file mode 100644 index b627aecb..00000000 --- a/src/components/properties/TextureChannelProp.vue +++ /dev/null @@ -1,127 +0,0 @@ - - - - - diff --git a/src/components/properties/ipropertyui.ts b/src/components/properties/ipropertyui.ts deleted file mode 100644 index d37fe32c..00000000 --- a/src/components/properties/ipropertyui.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface IProperyUi { - refresh(); -} - -export class PropertyChangeComplete { - public propName: string; - public oldValue: any; - public newValue: any; -} diff --git a/src/components/variables/BoolVar.vue b/src/components/variables/BoolVar.vue deleted file mode 100644 index ef95130d..00000000 --- a/src/components/variables/BoolVar.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - diff --git a/src/components/variables/ColorVar.vue b/src/components/variables/ColorVar.vue deleted file mode 100644 index 14766338..00000000 --- a/src/components/variables/ColorVar.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - diff --git a/src/components/variables/EnumVar.vue b/src/components/variables/EnumVar.vue deleted file mode 100644 index 97047e59..00000000 --- a/src/components/variables/EnumVar.vue +++ /dev/null @@ -1,43 +0,0 @@ - - - diff --git a/src/components/variables/FloatVar.vue b/src/components/variables/FloatVar.vue deleted file mode 100644 index dbb038b5..00000000 --- a/src/components/variables/FloatVar.vue +++ /dev/null @@ -1,106 +0,0 @@ - - - - - diff --git a/src/export.ts b/src/export.ts deleted file mode 100644 index f30735c9..00000000 --- a/src/export.ts +++ /dev/null @@ -1,375 +0,0 @@ -import jimp from "jimp"; -import sharp from "sharp"; -import { Editor } from "./lib/editor"; -import { BitDepth, encode } from "fast-png"; -import fs from "fs"; -import { PNG } from "pngjs"; -import { - Float16Array, - isFloat16Array, - getFloat16, - setFloat16, - hfround -} from "@petamoriken/float16"; -import { - TextureComponents, - TextureDataConverter -} from "./lib/designer/texturedataconverter"; -import { TextureDataType } from "./lib/designer/gl"; -import { DesignerNode } from "./lib/designer/designernode"; -import { Designer } from "./lib/designer"; -import AdmZip from "adm-zip"; -import path from "path"; -import electron from "electron"; - -export enum ImageFileType { - Png = "png", - Jpg = "jpg", - Tga = "tga", - Tif = "tif" -} - -export enum ColorSpace { - Linear = "linear", - sRGB = "srgb" -} - -export enum OutputType { - Folder, - Zip, - UnityPackage -} - -export enum TextureTransform { - InvertX, - InvertY, - InvertZ, - LinearizeRoughness -} - -export class ExportTextureSettings { - channelName: string = ""; // albedo, roughness, normal, etc.. - colorSpace: ColorSpace = ColorSpace.Linear; - fileType: ImageFileType = ImageFileType.Png; - transforms: TextureTransform[] = []; -} - -// can have multiple settings and presets -export class ExportSettings { - name: string = ""; - filePattern: string = "{project}_{file}"; - // textureSettings: Map = new Map< - // string, - // ExportTextureSettings - // >(); - // enabled: boolean = true; - outputType: OutputType = OutputType.Zip; - outputPath: string = ""; -} - -export class Exporter { - async export(editor: Editor, settings: ExportSettings) { - const designer = editor.designer; - const conv = new TextureDataConverter(editor.designer.gl); - // sample config - - // assume the settings have all the nodes listen already - // settings is the source of truth - console.log(editor.textureChannels); - - const exportNodes = this.gatherExportNodes(designer, editor); - console.log(exportNodes); - - let files: Map = new Map(); - - for (const node of exportNodes) { - const channelNode = node.node; - - // const pixelData = channelNode.getPixelData(); - // const pixelData = conv.getData( - // channelNode.node.tex, - // designer.width, - // designer.height, - // TextureDataType.Uint16, - // TextureComponents.RGBA, - // true - // ); - - const pixelData = conv.getData( - channelNode.tex, - designer.width, - designer.height, - node.dataType, - node.components, - true - ); - - // too expensive - // convertRange(pixelData); - - // console.log(pixelData); - // console.log(floatData); - // for (let i = 0; i < 20; i++) { - // console.log(floatData[i]); - // } - - // const exportPath = - // "C:/Users/Nicolas Brown/Desktop/export-" + node.name + ".png"; - // console.log("exporting to: " + exportPath); - - const fileData = exportNodeAsPng( - node, - pixelData, - designer.width, - designer.height - ); - - const projectName = settings.name - .replace(" ", "_") - .replace(/[^0-9a-zA-Z_]/g, ""); - - const fileName = interpolateString(settings.filePattern, { - project: projectName, - name: node.name - }); - - // files.set(node.name + ".png", fileData); - files.set(fileName + ".png", fileData); - - // write to file if folder mode - // fs.writeFile(exportPath, bytes, function(err) { - // if (err) alert("Error exporting texture: " + err); - // }); - - // write to zip otherwise - - // const imgCanvas = editor.getChannelCanvasImage(channelName); - // if (imgCanvas) { - // const imgData = imgCanvas.canvas.toDataURL("image/png"); - - // //todo: get raw image data from gpu in floating point - // } - } - - if (settings.outputType == OutputType.Folder) { - exportFilesToFolder(files, settings.outputPath); - } else { - exportFilesToZip(files, settings.outputPath); - electron.remote.shell.showItemInFolder(settings.outputPath); - } - - // export them - - // const image = await jimp.read(""); - } - - calculateFileName(fileName: string, project: string): string { - return null; - } - - // returns all nodes ready for export with their data - // todo: use display channel if no name property specified - gatherExportNodes(designer: Designer, editor: Editor) { - // gather all export nodes - // let exportNodes = []; - - let nodes = designer.nodes.filter(x => x.typeName === "output"); - - let exportNodes: ExportNode[] = []; - - for (const node of nodes) { - let exportNode = new ExportNode(); - - exportNode.node = node; - for (const prop of node.properties) { - if (prop.name === "name") { - exportNode.name = prop.getValue(); - } - if (prop.name === "precision") { - const precision = prop.getValue() as number; - - // 0 -> 8bits - // 1 -> 16bits - if (precision === 0) exportNode.dataType = TextureDataType.Uint8; - if (precision === 1) exportNode.dataType = TextureDataType.Uint16; - } - if (prop.name === "components") { - const components = prop.getValue() as number; - - // 0 -> RGBA - // 1 -> RGB - // 2 -> R - // 3 -> G - // 4 -> B - // 5 -> A - if (components === 0) exportNode.components = TextureComponents.RGBA; - if (components === 1) exportNode.components = TextureComponents.RGB; - if (components === 2) exportNode.components = TextureComponents.R; - if (components === 3) exportNode.components = TextureComponents.G; - if (components === 4) exportNode.components = TextureComponents.B; - if (components === 5) exportNode.components = TextureComponents.A; - } - } - - if (!exportNode.name || exportNode.name === "") { - exportNode.name = getChannelNameForNode(exportNode.node, editor); - } - - exportNodes.push(exportNode); - } - - return exportNodes; - } -} - -function getChannelNameForNode(node: DesignerNode, editor: Editor) { - const channels = editor.textureChannels; - // slow. - // create dictionary with nodeId as key instead - for (const key of channels.keys()) { - if (channels.get(key) === node) return key; - } - - return ""; -} - -function exportNodeAsPng( - node: ExportNode, - pixelData: ArrayBuffer, - width: number, - height: number -): ArrayBuffer { - try { - let bitDepth: BitDepth = 8; - if (node.dataType === TextureDataType.Uint16) bitDepth = 16; - - let channels: number = 4; - // if (node.components === TextureComponents.RGBA) channels = 4; - if (node.components === TextureComponents.RGB) channels = 3; - if ( - node.components === TextureComponents.R || - node.components === TextureComponents.G || - node.components === TextureComponents.B || - node.components === TextureComponents.A - ) - channels = 1; - - // FAST-PNG - const bytes = encode({ - data: - bitDepth == 8 ? new Uint8Array(pixelData) : new Uint16Array(pixelData), - width: width, - height: height, - depth: bitDepth, - channels: channels - }); - - return bytes.buffer; - - // fs.writeFile(exportPath, bytes, function(err) { - // if (err) alert("Error exporting texture: " + err); - // }); - - // await sharp(pixelData, { - // raw: { - // width: editor.designer.width, - // height: editor.designer.height, - // channels: 4 - // } - // }) - // // .pipelineColourspace("rgb") - // // .toColorspace("rgb") - // .png({}) - // .toFile(exportPath); - - // PNGJS - // https://github.com/lukeapage/pngjs/blob/master/examples/16bit_write.js - // let png = new PNG({ - // width: editor.designer.width, - // height: editor.designer.height, - // inputColorType: 6, - // colorType: 6, - // bitDepth: 16, - // inputHasAlpha: true - // }); - - // png.data = Buffer.from(pixelData); - // png.gamma = 1; - // png.pack().pipe(fs.createWriteStream(exportPath)); - } catch (error) { - console.log("error saving file"); - console.log(error); - } -} - -class ExportNode { - node: DesignerNode; - components: TextureComponents = TextureComponents.RGBA; - dataType: TextureDataType = TextureDataType.Uint8; - name: string = ""; -} - -function exportFilesToFolder( - files: Map, - folderPath: string -) { - for (let fileName of files.keys()) { - console.log(fileName); - const exportPath = path.join(folderPath, fileName); - const bytes = files.get(fileName); - - fs.writeFile(exportPath, new Uint8Array(bytes), function(err) { - if (err) alert("Error exporting texture: " + err); - }); - } -} -function exportFilesToZip( - files: Map, - zipFilePath: string -) { - const zip = new AdmZip(); - - for (let fileName of files.keys()) { - const bytes = files.get(fileName); - console.log(bytes); - zip.addFile(fileName, Buffer.from(bytes)); - } - - zip.writeZip(zipFilePath); -} - -function convertRange(data: Uint16Array) { - const UINT_MAX = 65535.0; - const VALUE_MAX = 15360.0; - - const floatData = new Float16Array(data.buffer); - for (let i = 0; i < data.length; i++) { - // if (i < 10) console.log(floatData[i] * UINT_MAX); - data[i] = floatData[i] * UINT_MAX; - } -} - -function interpolateString(text: string, exportData: object) { - if (!text) return ""; - - // run regex on text and replace values from the string - text = text.replace( - /\${([a-z]+)}/g, - (wholeMatch: string, path: any): string => { - // console.log(path); - const data = exportData[path]; - if (!data) return ""; - - return data; - } - ); - - // console.log(text); - - return text; -} - -// class PixelDataConverter -// { -// public static rgbaTo -// } diff --git a/src/iapp.ts b/src/iapp.ts deleted file mode 100644 index 6f463340..00000000 --- a/src/iapp.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface IApp { - randomSeed: number; -} diff --git a/src/lib/actions/addconnectionaction.ts b/src/lib/actions/addconnectionaction.ts deleted file mode 100644 index 65ad4cb8..00000000 --- a/src/lib/actions/addconnectionaction.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Action } from "../undostack"; -import { GraphicsItem } from "../scene/graphicsitem"; -import { Vector2 } from "../scene/view"; -import { ConnectionGraphicsItem } from "../scene/connectiongraphicsitem"; -import { NodeScene } from "../scene"; - -export class AddConnectionAction extends Action { - scene: NodeScene; - con: ConnectionGraphicsItem; - - constructor(scene: NodeScene, con: ConnectionGraphicsItem) { - super(); - - this.scene = scene; - this.con = con; - } - - undo() { - this.scene.removeConnection(this.con); - } - - redo() { - this.scene.addConnection(this.con); - } -} diff --git a/src/lib/actions/additemsaction.ts b/src/lib/actions/additemsaction.ts deleted file mode 100644 index 4223ef1f..00000000 --- a/src/lib/actions/additemsaction.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { Action } from "../undostack"; -import { GraphicsItem } from "../scene/graphicsitem"; -import { Vector2 } from "../scene/view"; -import { ConnectionGraphicsItem } from "../scene/connectiongraphicsitem"; -import { NodeScene } from "../scene"; -import { FrameGraphicsItem } from "../scene/framegraphicsitem"; -import { CommentGraphicsItem } from "../scene/commentgraphicsitem"; -import { NodeGraphicsItem } from "../scene/nodegraphicsitem"; -import { NavigationGraphicsItem } from "../scene/navigationgraphicsitem"; -import { DesignerNode } from "../designer/designernode"; -import { Designer } from "../designer"; - -// used when items are added to the scene -// also used for paste events -export class AddItemsAction extends Action { - scene: NodeScene; - designer: Designer; - frames: FrameGraphicsItem[]; - comments: CommentGraphicsItem[]; - navs: NavigationGraphicsItem[]; - cons: ConnectionGraphicsItem[]; - nodes: NodeGraphicsItem[]; - dnodes: DesignerNode[]; - - constructor( - scene: NodeScene, - designer: Designer, - frames: FrameGraphicsItem[], - comments: CommentGraphicsItem[], - navs: NavigationGraphicsItem[], - cons: ConnectionGraphicsItem[], - nodes: NodeGraphicsItem[], - dnodes: DesignerNode[] - ) { - super(); - - this.scene = scene; - this.designer = designer; - this.frames = frames; - this.comments = comments; - this.navs = navs; - this.cons = cons; - this.nodes = nodes; - this.dnodes = dnodes; - } - - undo() { - for (const frame of this.frames) { - this.scene.removeFrame(frame); - } - - for (const comment of this.comments) { - this.scene.removeComment(comment); - } - - for (const nav of this.navs) { - this.scene.removeNavigation(nav); - } - - // for (let dnode of this.dnodes) { - // this.designer.addNode(dnode, false); - // } - - // relying on callbacks to add the connection - // in designer - for (const con of this.cons) { - this.scene.removeConnection(con); - } - - // also relying callbacks to have the node deleted in designer - // note: texture channel gets removed here if assigned - // since texture channels are not assigned upon a node being - // added to a scene then there is no need to attempt to - // reassign any - for (const node of this.nodes) { - this.scene.deleteNode(node); - } - } - - redo() { - for (const frame of this.frames) { - this.scene.addFrame(frame); - } - - for (const comment of this.comments) { - this.scene.addComment(comment); - } - - for (const nav of this.navs) { - this.scene.addNavigation(nav); - } - - for (const node of this.nodes) { - this.scene.addNode(node); - } - - for (const dnode of this.dnodes) { - this.designer.addNode(dnode, false); - } - - // relying on callbacks to add the connection - // in designer - for (const con of this.cons) { - this.scene.addConnection(con); - } - } -} diff --git a/src/lib/actions/changetexturechannelaction.ts b/src/lib/actions/changetexturechannelaction.ts deleted file mode 100644 index 57c128df..00000000 --- a/src/lib/actions/changetexturechannelaction.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { Action } from "../undostack"; -import { GraphicsItem } from "../scene/graphicsitem"; -import { Vector2, Rect } from "../scene/view"; -import { FrameGraphicsItem } from "../scene/framegraphicsitem"; -import { Editor } from "../editor"; - -/* -FROM - -node1 --> channel1 - -ndoe2 --> channel2 - -OR - -node1 --> channel1 - - --> channel2 - - -TO - -node1 \ channel1 - \ -node2 \-> channel2 - -OR - -node1 \ channel1 - \ - \-> channel2 - -NOTE: -node2 might be null -if channel2 is null then we just remove the channel -*/ -export class ChangeTextureChannelAction extends Action { - ui: () => void; - editor: Editor; - node1: string; - node2: string; - channel1: string; - channel2: string; - - constructor( - ui: () => void, - editor: Editor, - node1: string, // active node - channel1: string, // current channel - node2: string, // new channel - channel2: string // node being displaced from new channel - ) { - super(); - - this.ui = ui; - this.editor = editor; - this.channel1 = channel1; - this.channel2 = channel2; - this.node1 = node1; - this.node2 = node2; - } - - undo() { - if (this.channel1) { - this.editor.assignNodeToTextureChannel(this.node1, this.channel1); - } else { - // node didnt have a channel to begin with - this.editor.clearTextureChannel(this.node1); - } - - if (this.channel2 != null && this.node2 != null) { - // reset displaced node - this.editor.assignNodeToTextureChannel(this.node2, this.channel2); - } - - if (this.ui) this.ui(); - } - - redo() { - if (this.channel2 == null) { - // clear channel - this.editor.clearTextureChannel(this.node1); - } else { - this.editor.assignNodeToTextureChannel(this.node1, this.channel2); - } - - if (this.ui) this.ui(); - } -} diff --git a/src/lib/actions/moveItemsaction.ts b/src/lib/actions/moveItemsaction.ts deleted file mode 100644 index f8f4647b..00000000 --- a/src/lib/actions/moveItemsaction.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Action } from "../undostack"; -import { GraphicsItem } from "../scene/graphicsitem"; -import { Vector2 } from "../scene/view"; - -export class MoveItemsAction extends Action { - items: GraphicsItem[]; - oldPosList: Vector2[]; - newPosList: Vector2[]; - - constructor( - items: GraphicsItem[], - oldPosList: Vector2[], - newPosList: Vector2[] - ) { - super(); - - this.items = items; - this.oldPosList = oldPosList; - this.newPosList = newPosList; - } - - undo() { - for (let i = 0; i < this.items.length; i++) { - const pos = this.oldPosList[i]; - this.items[i].setPos(pos.x, pos.y); - } - } - - redo() { - for (let i = 0; i < this.items.length; i++) { - const pos = this.newPosList[i]; - this.items[i].setPos(pos.x, pos.y); - } - } -} diff --git a/src/lib/actions/propertychangeaction.ts b/src/lib/actions/propertychangeaction.ts deleted file mode 100644 index 562bfb0e..00000000 --- a/src/lib/actions/propertychangeaction.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { Action } from "../undostack"; -import { GraphicsItem } from "../scene/graphicsitem"; -import { Vector2, Rect } from "../scene/view"; -import { FrameGraphicsItem } from "../scene/framegraphicsitem"; -import { IPropertyHolder } from "../designer/properties"; -import { IProperyUi } from "@/components/properties/ipropertyui"; -import App from "@/App.vue"; - -export class PropertyChangeAction extends Action { - ui: () => void; - propHolder: IPropertyHolder; - propName: string; - oldValue: any; - newValue: any; - - constructor( - ui: () => void, - propName: string, - propHolder: IPropertyHolder, - oldValue: any, - newValue: any - ) { - super(); - - this.ui = ui; - this.propName = propName; - this.propHolder = propHolder; - this.oldValue = oldValue; - this.newValue = newValue; - } - - undo() { - this.propHolder.setProperty(this.propName, this.oldValue); - //App.instance.$refs.properties.$forceUpdate(); - //this.ui.refresh(); - if (this.ui) this.ui(); - } - - redo() { - this.propHolder.setProperty(this.propName, this.newValue); - //this.ui.refresh(); - if (this.ui) this.ui(); - } -} diff --git a/src/lib/actions/removeconnectionaction.ts b/src/lib/actions/removeconnectionaction.ts deleted file mode 100644 index b22077b3..00000000 --- a/src/lib/actions/removeconnectionaction.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Action } from "../undostack"; -import { GraphicsItem } from "../scene/graphicsitem"; -import { Vector2 } from "../scene/view"; -import { ConnectionGraphicsItem } from "../scene/connectiongraphicsitem"; -import { NodeScene } from "../scene"; - -export class RemoveConnectionAction extends Action { - scene: NodeScene; - con: ConnectionGraphicsItem; - - constructor(scene: NodeScene, con: ConnectionGraphicsItem) { - super(); - - this.scene = scene; - this.con = con; - } - - undo() { - this.scene.addConnection(this.con); - } - - redo() { - this.scene.removeConnection(this.con); - } -} diff --git a/src/lib/actions/removeitemsaction.ts b/src/lib/actions/removeitemsaction.ts deleted file mode 100644 index 39289729..00000000 --- a/src/lib/actions/removeitemsaction.ts +++ /dev/null @@ -1,125 +0,0 @@ -import { Action } from "../undostack"; -import { GraphicsItem } from "../scene/graphicsitem"; -import { Vector2 } from "../scene/view"; -import { ConnectionGraphicsItem } from "../scene/connectiongraphicsitem"; -import { NodeScene } from "../scene"; -import { FrameGraphicsItem } from "../scene/framegraphicsitem"; -import { CommentGraphicsItem } from "../scene/commentgraphicsitem"; -import { NodeGraphicsItem } from "../scene/nodegraphicsitem"; -import { NavigationGraphicsItem } from "../scene/navigationgraphicsitem"; -import { DesignerNode } from "../designer/designernode"; -import { Designer } from "../designer"; -import { Editor } from "../editor"; - -// used when items are added to the scene -// also used for paste events -export class RemoveItemsAction extends Action { - editor: Editor; - scene: NodeScene; - designer: Designer; - frames: FrameGraphicsItem[]; - comments: CommentGraphicsItem[]; - navs: NavigationGraphicsItem[]; - cons: ConnectionGraphicsItem[]; - nodes: NodeGraphicsItem[]; - dnodes: DesignerNode[]; - textureChannels: Map; - - constructor( - editor: Editor, - scene: NodeScene, - designer: Designer, - frames: FrameGraphicsItem[], - comments: CommentGraphicsItem[], - navs: NavigationGraphicsItem[], - cons: ConnectionGraphicsItem[], - nodes: NodeGraphicsItem[], - dnodes: DesignerNode[] - ) { - super(); - - this.editor = editor; - this.scene = scene; - this.designer = designer; - this.frames = frames; - this.comments = comments; - this.navs = navs; - this.cons = cons; - this.nodes = nodes; - this.dnodes = dnodes; - - this.textureChannels = new Map(); - - for (const node of nodes) { - if (node.textureChannel != null) { - this.textureChannels.set(node.id, node.textureChannel); - } - } - } - - undo() { - for (const frame of this.frames) { - this.scene.addFrame(frame); - } - - for (const comment of this.comments) { - this.scene.addComment(comment); - } - - for (const nav of this.navs) { - this.scene.addNavigation(nav); - } - - for (const node of this.nodes) { - this.scene.addNode(node); - } - - for (const dnode of this.dnodes) { - this.designer.addNode(dnode, false); - } - - // assign texture channels - for (const [nodeId, channel] of this.textureChannels) { - this.editor.assignNodeToTextureChannel(nodeId, channel); - } - - // relying on callbacks to add the connection - // in designer - for (const con of this.cons) { - this.scene.addConnection(con); - } - } - - redo() { - for (const frame of this.frames) { - this.scene.removeFrame(frame); - } - - for (const comment of this.comments) { - this.scene.removeComment(comment); - } - - for (const nav of this.navs) { - this.scene.removeNavigation(nav); - } - - // for (let dnode of this.dnodes) { - // this.designer.addNode(dnode, false); - // } - - // relying on callbacks to add the connection - // in designer - for (const con of this.cons) { - this.scene.removeConnection(con); - } - - // also relying callbacks to have the node deleted in designer - // note: texture channel gets removed here if assigned - // since texture channels are not assigned upon a node being - // added to a scene then there is no need to attempt to - // reassign any - for (const node of this.nodes) { - this.scene.deleteNode(node); - } - } -} diff --git a/src/lib/actions/resizeframeaction.ts b/src/lib/actions/resizeframeaction.ts deleted file mode 100644 index fb880143..00000000 --- a/src/lib/actions/resizeframeaction.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Action } from "../undostack"; -import { GraphicsItem } from "../scene/graphicsitem"; -import { Vector2, Rect } from "../scene/view"; -import { FrameGraphicsItem } from "../scene/framegraphicsitem"; - -export class ResizeFrameAction extends Action { - frame: FrameGraphicsItem; - oldRect: Rect; - newRect: Rect; - - constructor(frame: FrameGraphicsItem, oldRect: Rect, newRect: Rect) { - super(); - - this.frame = frame; - this.oldRect = oldRect; - this.newRect = newRect; - } - - undo() { - this.frame.setFrameRect(this.oldRect); - } - - redo() { - this.frame.setFrameRect(this.newRect); - } -} diff --git a/src/lib/actions/setglobalrandomseedaction.ts b/src/lib/actions/setglobalrandomseedaction.ts deleted file mode 100644 index 09395701..00000000 --- a/src/lib/actions/setglobalrandomseedaction.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Action } from "../undostack"; -import { GraphicsItem } from "../scene/graphicsitem"; -import { Vector2, Rect } from "../scene/view"; -import { FrameGraphicsItem } from "../scene/framegraphicsitem"; -import { Editor } from "../editor"; -import { IApp } from "@/iapp"; - -export class SetGlobalRandomSeedAction extends Action { - editor: Editor; - oldSeed: number; - newSeed: number; - app: IApp; - - constructor(app: IApp, editor: Editor, oldSeed: number, newSeed: number) { - super(); - - this.app = app; - this.editor = editor; - this.oldSeed = oldSeed; - this.newSeed = newSeed; - } - - undo() { - this.app.randomSeed = this.oldSeed; - this.editor.designer.setRandomSeed(this.oldSeed); - } - - redo() { - this.app.randomSeed = this.newSeed; - this.editor.designer.setRandomSeed(this.newSeed); - } -} diff --git a/src/lib/actions/setnoderandomseedaction.ts b/src/lib/actions/setnoderandomseedaction.ts deleted file mode 100644 index c4762cf2..00000000 --- a/src/lib/actions/setnoderandomseedaction.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Action } from "../undostack"; -import { DesignerNode } from "../designer/designernode"; - -export class SetNodeRandomSeedAction extends Action { - ui: () => void; - node: DesignerNode; - oldSeed: number; - newSeed: number; - - constructor( - ui: () => void, - node: DesignerNode, - oldSeed: number, - newSeed: number - ) { - super(); - - this.ui = ui; - this.node = node; - this.oldSeed = oldSeed; - this.newSeed = newSeed; - } - - undo() { - this.node.setRandomSeed(this.oldSeed); - if (this.ui) this.ui(); - } - - redo() { - this.node.setRandomSeed(this.newSeed); - if (this.ui) this.ui(); - } -} diff --git a/src/lib/actions/switchconnectionaction.ts b/src/lib/actions/switchconnectionaction.ts deleted file mode 100644 index b3b6c5ed..00000000 --- a/src/lib/actions/switchconnectionaction.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Action } from "../undostack"; -import { GraphicsItem } from "../scene/graphicsitem"; -import { Vector2 } from "../scene/view"; -import { ConnectionGraphicsItem } from "../scene/connectiongraphicsitem"; -import { NodeScene } from "../scene"; - -export enum ConnectionSwitchAction { - Add = "add", - Remove = "delete" -} - -export class SwitchConnectionAction extends Action { - scene: NodeScene; - cons: ConnectionGraphicsItem[]; - actions: ConnectionSwitchAction[]; //'add' or 'remove' - - constructor( - scene: NodeScene, - cons: ConnectionGraphicsItem[], - actions: ConnectionSwitchAction[] - ) { - super(); - - this.scene = scene; - this.cons = cons; - this.actions = actions; - } - - undo() { - for (let i = this.cons.length - 1; i >= 0; i--) { - if (this.actions[i] == ConnectionSwitchAction.Add) { - this.scene.removeConnection(this.cons[i]); - } else if (this.actions[i] == ConnectionSwitchAction.Remove) { - this.scene.addConnection(this.cons[i]); - } else { - throw "Invalid connection undo-redo action"; - } - } - } - - redo() { - for (let i = 0; i < this.cons.length; i++) { - if (this.actions[i] == ConnectionSwitchAction.Add) { - this.scene.addConnection(this.cons[i]); - } else if (this.actions[i] == ConnectionSwitchAction.Remove) { - this.scene.removeConnection(this.cons[i]); - } else { - throw "Invalid connection undo-redo action"; - } - } - } -} diff --git a/src/lib/clipboard.ts b/src/lib/clipboard.ts deleted file mode 100644 index 6903d9c2..00000000 --- a/src/lib/clipboard.ts +++ /dev/null @@ -1,357 +0,0 @@ -import { GraphicsItem } from "./scene/graphicsitem"; -import { NodeScene } from "./scene"; -import { DesignerLibrary } from "./designer/library"; -import { FrameGraphicsItem } from "./scene/framegraphicsitem"; -import { Color } from "./designer/color"; -import { CommentGraphicsItem } from "./scene/commentgraphicsitem"; -import { NavigationGraphicsItem } from "./scene/navigationgraphicsitem"; -import { Designer } from "./designer"; -import { DesignerNode } from "./designer/designernode"; -import { NodeGraphicsItem } from "./scene/nodegraphicsitem"; -import { DesignerNodeConn } from "./designer/designerconnection"; -import { SocketType } from "./scene/socketgraphicsitem"; -import { ConnectionGraphicsItem } from "./scene/connectiongraphicsitem"; -import { Guid } from "./utils"; -import { AddItemsAction } from "./actions/additemsaction"; -import { UndoStack } from "./undostack"; -import { Rect, Vector2 } from "./scene/view"; - -export class ItemClipboard { - public static copyItems( - designer: Designer, - library: DesignerLibrary, - scene: NodeScene, - clipboard: DataTransfer - ) { - clipboard.clearData(); - const items = scene.selectedItems; - if (items.length == 0) { - // empty clipboard - clipboard.setData("text/nodes", ""); - } - - const data = { - nodes: [], - connections: [], - comments: [], - frames: [], - navigations: [], - libraryVersion: "" - }; - - // NODES AND CONNECTIONS - const nodeList: NodeGraphicsItem[] = []; - items.forEach(i => { - // check if this works with obfuscated code - if (i instanceof NodeGraphicsItem) nodeList.push(i); - }); - - data.nodes = this.getNodes(designer, nodeList); - data.connections = this.getConnections(data.nodes, designer, nodeList); - - // FRAMES - const frames = []; - for (const item of items) { - if (!(item instanceof FrameGraphicsItem)) continue; - const frame = item; - - const n: any = {}; - n["x"] = frame.left; - n["y"] = frame.top; - n["width"] = frame.getWidth(); - n["height"] = frame.getHeight(); - - n["title"] = frame.title; - n["showTitle"] = frame.showTitle; - n["description"] = frame.description; - n["color"] = frame.color.toHex(); - - frames.push(n); - } - data.frames = frames; - - // COMMENTS - const comments = []; - for (const item of items) { - if (!(item instanceof CommentGraphicsItem)) continue; - const comment = item; - - const n: any = {}; - n["x"] = comment.left; - n["y"] = comment.top; - - n["text"] = comment.text; - n["color"] = comment.color.toHex(); - - comments.push(n); - } - data.comments = comments; - - // NAVIGATIONS - const navs = []; - for (const item of items) { - if (!(item instanceof NavigationGraphicsItem)) continue; - const nav = item; - - const n: any = {}; - n["x"] = nav.left; - n["y"] = nav.top; - - navs.push(n); - } - data.navigations = navs; - - // let data = scene.save(); // do to items - data.libraryVersion = library.getVersionName(); - - const json = JSON.stringify(data); - - clipboard.setData("json/nodes", json); - } - - public static pasteItems( - designer: Designer, - library: DesignerLibrary, - scene: NodeScene, - clipboard: DataTransfer - ) { - const json = clipboard.getData("json/nodes"); - //console.log(json); - if (json == null || json == "") return; - - const data = JSON.parse(json); - if (!data) return; - - const frames: FrameGraphicsItem[] = []; - const comments: CommentGraphicsItem[] = []; - const navs: NavigationGraphicsItem[] = []; - const cons: ConnectionGraphicsItem[] = []; - const nodes: NodeGraphicsItem[] = []; - const dnodes: DesignerNode[] = []; - - // for selecting pasted items - const focusItems: GraphicsItem[] = []; - - // FRAMES - if (data.frames) { - for (const d of data.frames) { - const frame = new FrameGraphicsItem(scene.view); - frame.setPos(d.x, d.y); - frame.setSize(d.width, d.height); - - frame.setTitle(d.title); - frame.setShowTitle(d.showTitle); - frame.setDescription(d.description); - frame.color = Color.parse(d.color); - - scene.addFrame(frame); - frames.push(frame); - focusItems.push(frame); - } - } - - // COMMENTS - if (data.comments) { - for (const d of data.comments) { - const comment = new CommentGraphicsItem(scene.view); - comment.setPos(d.x, d.y); - comment.setText(d.text); - comment.color = Color.parse(d.color); - - scene.addComment(comment); - comments.push(comment); - focusItems.push(comment); - } - } - - // NAVIGATION - if (data.navigations) { - for (const d of data.navigations) { - const nav = new NavigationGraphicsItem(); - nav.setPos(d.x, d.y); - scene.addNavigation(nav); - navs.push(nav); - focusItems.push(nav); - } - } - - //NODES AND CONNECTIONS - - // old : new - const nodeIdMap = {}; - // add them to designer then add them to scene - for (const n of data.nodes) { - const dNode = library.create(n.typeName); - - // add to designer - designer.addNode(dNode); - nodeIdMap[n.id] = dNode.id; - - // assign properties - for (const propName in n.properties) { - dNode.setProperty(propName, n.properties[propName]); - } - - // create scene version - const node = new NodeGraphicsItem(dNode.title); - for (const input of dNode.getInputs()) { - node.addSocket(input, input, SocketType.In); - } - node.addSocket("output", "output", SocketType.Out); - node.id = dNode.id; - scene.addNode(node); - focusItems.push(node); - - // generate thumbnail - const thumb = designer.generateImageFromNode(dNode); - node.setThumbnail(thumb); - - node.setCenter(n.x, n.y); - - nodes.push(node); - dnodes.push(dNode); - } - // console.log(nodeIdMap); - - // console.log(scene.nodes); - - // add connections - for (const c of data.connections) { - // map to ids of new nodes - const leftId = nodeIdMap[c.leftNodeId]; - const rightId = nodeIdMap[c.rightNodeId]; - - // create connection - const con = new ConnectionGraphicsItem(); - con.id = Guid.newGuid(); // brand new connection - - // get nodes - const leftNode = scene.getNodeById(leftId); - const rightNode = scene.getNodeById(rightId); - - // get sockets - con.socketA = leftNode.getOutSocketByName(c.leftNodeOutput); - con.socketB = rightNode.getInSocketByName(c.rightNodeInput); - - // callback triggers the creation in designer - scene.addConnection(con); - - cons.push(con); - } - - if ( - frames.length != 0 || - comments.length != 0 || - navs.length != 0 || - cons.length != 0 || - nodes.length != 0 || - dnodes.length != 0 - ) { - // gather bounding box and center items to screen - if (focusItems.length > 0) { - const rect = this.getItemsBounds(focusItems); - const center = scene.view.sceneCenter; - - // find diff, then offset each object by that diff - //let diff = Vector2.subtract(center, rect.center); - for (const item of focusItems) { - const offsetFromRect = Vector2.subtract(item.getPos(), rect.center); - const newPos = Vector2.add(center, offsetFromRect); - item.setPos(newPos.x, newPos.y); - //item.move(diff.x, diff.y); - } - } - - // add undo-redo - const action = new AddItemsAction( - scene, - designer, - frames, - comments, - navs, - cons, - nodes, - dnodes - ); - UndoStack.current.push(action); - - // make items selected - scene.setSelectedItems(focusItems, true); - } - } - - // merge designer and scene node in one - // scene node only has x and y values - static getNodes( - designer: Designer, - items: NodeGraphicsItem[] - ): Array { - const dnodes = []; - items.forEach(i => { - const node = designer.getNodeById(i.id); - - const n = {}; - n["id"] = node.id; - n["typeName"] = node.typeName; - n["exportName"] = node.exportName; - //n["inputs"] = node.inputs;// not needed imo - - const props = {}; - for (const prop of node.properties) { - props[prop.name] = prop.getValue(); - } - n["properties"] = props; - - n["x"] = i.centerX(); - n["y"] = i.centerY(); - - dnodes.push(n); - }); - - return dnodes; - } - - static getConnections( - nodeList: Array, - designer: Designer, - items: NodeGraphicsItem[] - ): Array { - const conns = []; - - // we're searching for connections with both left and right socket - // in our selection pool - designer.conns.forEach(con => { - if ( - ItemClipboard.getNodeById(con.leftNode.id, nodeList) && - ItemClipboard.getNodeById(con.rightNode.id, nodeList) - ) { - const c = {}; - c["id"] = con.id; - c["leftNodeId"] = con.leftNode.id; - c["leftNodeOutput"] = con.leftNodeOutput; - c["rightNodeId"] = con.rightNode.id; - c["rightNodeInput"] = con.rightNodeInput; - - conns.push(c); - } - }); - - return conns; - } - - static getNodeById(id: string, nodeList: Array): object { - for (const node of nodeList) if (node["id"] == id) return node; - - return null; - } - - static getItemsBounds(items: GraphicsItem[]): Rect { - const rect: Rect = items[0].getRect(); - for (const item of items) { - const r = item.getRect(); - rect.expandByRect(r); - } - - return rect; - } -} diff --git a/src/lib/designer.ts b/src/lib/designer.ts deleted file mode 100644 index 6d6cbd37..00000000 --- a/src/lib/designer.ts +++ /dev/null @@ -1,945 +0,0 @@ -import { DesignerNode, NodeInput } from "./designer/designernode"; -import { DesignerNodeConn } from "./designer/designerconnection"; -import { DesignerLibrary } from "./designer/library"; -import { Guid } from "./utils"; -import { ImageCanvas } from "./designer/imagecanvas"; -import { Image } from "./designer/image"; -import { buildShaderProgram } from "./designer/gl"; -import { - IntProperty, - FloatProperty, - BoolProperty, - EnumProperty, - ColorProperty, - Property, - PropertyType -} from "./designer/properties"; -import { Color } from "./designer/color"; -import { - DesignerVariable, - DesignerVariableType, - DesignerNodePropertyMap -} from "./designer/designervariable"; - -export class NodeRenderContext { - canvas: HTMLCanvasElement; - gl: WebGLRenderingContext; - fbo: WebGLFramebuffer; - inputs: NodeInput[]; - - textureWidth: number; - textureHeight: number; - - randomSeed: number; -} - -// keeps track of query object that tracks -// node's processing time -// https://www.khronos.org/registry/webgl/extensions/EXT_disjoint_timer_query_webgl2/ -export class NodeRenderTimer { - query: WebGLQuery; - ms: number; - node: DesignerNode; -} - -export enum UpdateMode { - Immediate = "immediate", - Staggered = "staggered" -} - -export class Designer { - canvas: HTMLCanvasElement; - gl: WebGL2RenderingContext; - public texCoordBuffer: WebGLBuffer; - public posBuffer: WebGLBuffer; - vertexShaderSource: string; - fbo: WebGLFramebuffer; - thumbnailProgram: WebGLProgram; - - updateMode: UpdateMode; - - randomSeed: number; - width: number; - height: number; - - nodes: DesignerNode[]; - conns: DesignerNodeConn[]; - - // list of nodes yet to be designed - updateList: DesignerNode[]; - - library: DesignerLibrary; - - //variables - variables: DesignerVariable[]; - - renderContext: NodeRenderContext; - - renderTimers: NodeRenderTimer[]; - queryExt: any; - - // callbacks - onthumbnailgenerated: (DesignerNode, HTMLImageElement) => void; - - // called everytime a node's texture gets updated - // listeners can use this update their CanvasTextures - // by rendering the node's texture with renderNodeTextureToCanvas(node, imageCanvas) - onnodetextureupdated: (DesignerNode, number) => void; - - onnodetimeupdated: (DesignerNode, number) => void; - - public constructor() { - this.width = 1024; - this.height = 1024; - this.randomSeed = 32; - - this.updateMode = UpdateMode.Staggered; - - this.canvas = document.createElement("canvas"); - //document.body.appendChild(this.canvas); - this.canvas.width = this.width; - this.canvas.height = this.height; - this.gl = this.canvas.getContext("webgl2"); - - let result = this.gl.getExtension("EXT_disjoint_timer_query_webgl2"); - if (result) console.log("TIMER QUERY SUPPORTED", result); - else console.log("TIMER QUERY NOT SUPPORTED", result); - this.queryExt = result; - - // floating point textures - result = this.gl.getExtension("EXT_color_buffer_float"); - if (!result) console.log("COLOR BUFFER FLOAT NOT SUPPORTED", result); - - result = this.gl.getExtension("OES_texture_float_linear"); - if (!result) console.log("TEXTURE FLOAT LINEAR NOT SUPPORTED", result); - - result = this.gl.getExtension("EXT_texture_norm16"); - if (!result) console.log("TEXTURE NORM16 NOT SUPPORTED", result); - - this.renderContext = new NodeRenderContext(); - - this.nodes = []; - this.conns = []; - - this.updateList = []; - this.variables = []; - - this.renderTimers = []; - - this.init(); - } - - // evaludate rendertimers - // discards ones that arent ready - // this function should be called at the beginning - // of a render cycle - public calculateNodeProcessingTimes(): NodeRenderTimer[] { - const gl = this.gl; - - let completeTimers: NodeRenderTimer[] = []; - for (let timer of this.renderTimers) { - var available = gl.getQueryParameter( - timer.query, - gl.QUERY_RESULT_AVAILABLE - ); - var disjoint = gl.getParameter(this.queryExt.GPU_DISJOINT_EXT as GLenum); - - if (available && !disjoint) { - // See how much time the rendering of the object took in nanoseconds. - var timeElapsed = gl.getQueryParameter(timer.query, gl.QUERY_RESULT); - timer.ms = timeElapsed / (1000 * 1000); - completeTimers.push(timer); - } - } - - // decided not to empty this each frame since some operations might - // take long, however, something should be done so that dangling - // timers dont stay in the list - //this.renderTimers = []; - - return completeTimers; - } - - public setTextureSize(width: number, height: number) { - //todo: is resizing the canvas even necessary? - this.width = width; - this.height = height; - this.canvas.width = this.width; - this.canvas.height = this.height; - - for (const node of this.nodes) { - node.createTexture(); - this.requestUpdate(node); - } - } - - public randomizeSeed() { - this.setRandomSeed(Math.floor(Math.random() * 256)); - } - - public setRandomSeed(newSeed: number) { - this.randomSeed = newSeed; - // invalidate all nodes - this.invalidateAllNodes(); - } - - public getRandomSeed(): number { - return this.randomSeed; - } - - init() { - this.createVertexBuffers(); - this.createFBO(); - this.createThumbmailProgram(); - } - - updateImmediate() { - this.updateRenderTimers(); - - let updateQuota = 10000000000000; - // fetch random node from update list (having all in sockets that have been updated) and update it - // todo: do only on per update loop - while (this.updateList.length != 0) { - for (const node of this.updateList) { - if (this.haveAllUpdatedLeftNodes(node)) { - // update this node's texture and thumbnail - - // remove from list - this.updateList.splice(this.updateList.indexOf(node), 1); - - // a note about this: - // technically all the subsequent nodes should be updated here, so this.updateList - // wont be touched in this function - // so we avoid messing up our loop since the length of this.updateList wont change - this.generateImageFromNode(node); - - node.needsUpdate = false; - //break;// one per update loop - - updateQuota--; - if (updateQuota < 0) break; - } - } - } - } - - updateStaggered() { - this.updateRenderTimers(); - - const batch: DesignerNode[] = []; - - for (const node of this.updateList) { - if (this.haveAllUpdatedLeftNodes(node)) { - batch.push(node); - } - } - - for (const node of batch) { - // remove from list - batch.splice(batch.indexOf(node), 1); - this.updateList.splice(this.updateList.indexOf(node), 1); - - this.generateImageFromNode(node, false); - - node.needsUpdate = false; - } - } - - get processedNodes() { - return this.nodes.length - this.updateList.length; - } - - get totalNodes() { - return this.nodes.length; - } - - setUpdateMode(updateMode: UpdateMode) { - this.updateMode = updateMode; - } - - update() { - if (this.updateMode == UpdateMode.Immediate) this.updateImmediate(); - else this.updateStaggered(); - } - - updateRenderTimers() { - if (!this.onnodetimeupdated) return; - - let timers = this.calculateNodeProcessingTimes(); - for (let timer of timers) { - this.onnodetimeupdated(timer.node, timer.ms); - } - } - - // checks if all input nodes have needsUpdate set to false - haveAllUpdatedLeftNodes(node: DesignerNode): boolean { - for (const con of this.conns) { - // get connections to this node - if (con.rightNode == node) { - if (con.leftNode.needsUpdate == true) { - // found a node that needs update itself - return false; - } - } - } - - return true; - } - - // adds node to update list - // add subsequent (output) nodes in tree to update list a well, recursively - requestUpdate(node: DesignerNode) { - if (this.updateList.indexOf(node) == -1) { - // not yet in the list, add to list and add dependent nodes - node.needsUpdate = true; // just in case... - this.updateList.push(node); - } - - // add all right connections - for (const con of this.conns) { - if (con.leftNode == node) { - this.requestUpdate(con.rightNode); - } - } - } - - public invalidateAllNodes() { - for (const node of this.nodes) { - this.requestUpdate(node); - } - } - - setLibrary(lib: DesignerLibrary) { - this.library = lib; - } - - // creates node and adds it to scene - createNode(name: string): DesignerNode { - const node = this.library.create(name); - - this.addNode(node); - return node; - } - - createFBO() { - const gl = this.gl; - - this.fbo = gl.createFramebuffer(); - - // gotta create at least a renderbuffer - } - - createVertexBuffers() { - const gl = this.gl; - //var texCoordLocation = gl.getAttribLocation(program, "a_texCoord"); - - // provide texture coordinates for the rectangle. - this.texCoordBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer); - gl.bufferData( - gl.ARRAY_BUFFER, - new Float32Array([ - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0, - 1.0, - 1.0, - 0.0, - 1.0, - 1.0 - ]), - gl.STATIC_DRAW - ); - //gl.enableVertexAttribArray(texCoordLocation); - //gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); - - this.posBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, this.posBuffer); - gl.bufferData( - gl.ARRAY_BUFFER, - new Float32Array([ - -1.0, - -1.0, - 0.0, - 1.0, - -1.0, - 0.0, - -1.0, - 1.0, - 0.0, - -1.0, - 1.0, - 0.0, - 1.0, - -1.0, - 0.0, - 1.0, - 1.0, - 0.0 - ]), - gl.STATIC_DRAW - ); - - gl.bindBuffer(gl.ARRAY_BUFFER, null); - } - - // adds node to scene - // adds it to this.updateList - // if `init` is set to false, node will not be initialized - // useful for undo-redo where node is re-added - addNode(node: DesignerNode, init = true) { - this.nodes.push(node); - if (init) { - node.gl = this.gl; - node.designer = this; - node._init(); - } - this.requestUpdate(node); - } - - getNodeById(nodeId: string): DesignerNode { - for (const node of this.nodes) { - if (node.id == nodeId) return node; - } - return null; - } - - addConnection( - leftNode: DesignerNode, - rightNode: DesignerNode, - rightIndex: string - ) { - const con = new DesignerNodeConn(); - con.leftNode = leftNode; - - con.rightNode = rightNode; - con.rightNodeInput = rightIndex; - - this.conns.push(con); - - // right node needs to be updated - this.requestUpdate(rightNode); - - return con; - } - - removeConnection( - leftNode: DesignerNode, - rightNode: DesignerNode, - rightIndex: string - ) { - for (const con of this.conns) { - if ( - con.leftNode == leftNode && - con.rightNode == rightNode && - con.rightNodeInput == rightIndex - ) { - // right node needs to be updated - this.requestUpdate(rightNode); - - // found our connection, remove - this.conns.splice(this.conns.indexOf(con), 1); - //console.log("removed connection in designer"); - //console.log(con); - - return con; - } - } - - return null; - } - - // todo: double check connections just in case - removeNode(nodeId: string): DesignerNode { - const node = this.getNodeById(nodeId); - if (!node) { - return null; - } - - this.nodes.splice(this.nodes.indexOf(node), 1); - - // it's safe here to pluck this node right out of the update queue - // the connections would have been already removed, triggering - // updates for the previously neighbor nodes already - while (this.updateList.indexOf(node) !== -1) - this.updateList.splice(this.updateList.indexOf(node), 1); - } - - generateImage(name: string): HTMLImageElement { - const node: DesignerNode = this.getNodeByName(name); - return this.generateImageFromNode(node); - } - - // this function generates the image of the node given its input nodes - // if the input nodes arent updated then it will update them - // for every node updated in this function, it emits onthumbnailgenerated(node, thumbnail) - // it returns a thumbnail (an html image) - - generateImageFromNode( - node: DesignerNode, - processInputs: boolean = true - ): HTMLImageElement { - const inputs: NodeInput[] = this.getNodeInputs(node); - - if (processInputs) { - // process input nodes - for (const input of inputs) { - if (input.node.needsUpdate) { - this.generateImageFromNode(input.node); - - // remove from update list since thumbnail has now been generated - input.node.needsUpdate = false; - this.updateList.splice(this.updateList.indexOf(input.node), 1); - } - } - } - - const gl = this.gl; - - let context = this.renderContext; - context.gl = gl; - context.canvas = this.canvas; - context.inputs = inputs; - context.randomSeed = this.randomSeed; - context.fbo = this.fbo; - context.textureWidth = this.width; - context.textureHeight = this.height; - - let dtInMs = 0; - if (node.isCpu()) { - let startTime = Date.now(); - - node.render(context); - - let endTime = Date.now(); - dtInMs = endTime - startTime; - } else { - let query = gl.createQuery(); - gl.beginQuery(this.queryExt.TIME_ELAPSED_EXT, query); - - node.render(context); - gl.endQuery(this.queryExt.TIME_ELAPSED_EXT); - - // create timer - let timer = new NodeRenderTimer(); - timer.node = node; - timer.query = query; - timer.ms = 0; - - this.renderTimers.push(timer); - - dtInMs = -1; - } - - if (this.onnodetextureupdated) { - this.onnodetextureupdated(node, dtInMs); - } - - const thumb = this.generateThumbnailFromNode(node); - if (this.onthumbnailgenerated) { - this.onthumbnailgenerated(node, thumb); - } - - return thumb; - } - - // renders node's texture to an image object - // ensure the node is updated before calling this function - // this function doesnt try to update child nodes - generateThumbnailFromNode(node: DesignerNode) { - const gl = this.gl; - - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - - // bind shader - gl.useProgram(this.thumbnailProgram); - - // bind mesh - const posLoc = gl.getAttribLocation(this.thumbnailProgram, "a_pos"); - const texCoordLoc = gl.getAttribLocation( - this.thumbnailProgram, - "a_texCoord" - ); - - // provide texture coordinates for the rectangle. - gl.bindBuffer(gl.ARRAY_BUFFER, this.posBuffer); - gl.enableVertexAttribArray(posLoc); - gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 0, 0); - - gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer); - gl.enableVertexAttribArray(texCoordLoc); - gl.vertexAttribPointer(texCoordLoc, 2, gl.FLOAT, false, 0, 0); - - // send texture - gl.uniform1i(gl.getUniformLocation(this.thumbnailProgram, "tex"), 0); - gl.activeTexture(gl.TEXTURE0); - gl.bindTexture(gl.TEXTURE_2D, node.tex); - - gl.drawArrays(gl.TRIANGLES, 0, 6); - - // cleanup - gl.disableVertexAttribArray(posLoc); - gl.disableVertexAttribArray(texCoordLoc); - - //var img:HTMLImageElement = document.createElement("image"); - //var img:HTMLImageElement = new Image(this.width, this.height); - //img.src = this.canvas.toDataURL("image/png"); - - // note: this called right after clears the image for some reason - //gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - //return img; - return null; - } - - // render's node's texture then draws it on the given canvas - // used as an alternative to move textures since toDataUrl is - // so computationally expensive - copyNodeTextureToImageCanvas(node: DesignerNode, canvas: ImageCanvas) { - const gl = this.gl; - - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - - // bind shader - gl.useProgram(this.thumbnailProgram); - - // bind mesh - const posLoc = gl.getAttribLocation(this.thumbnailProgram, "a_pos"); - const texCoordLoc = gl.getAttribLocation( - this.thumbnailProgram, - "a_texCoord" - ); - - // provide texture coordinates for the rectangle. - gl.bindBuffer(gl.ARRAY_BUFFER, this.posBuffer); - gl.enableVertexAttribArray(posLoc); - gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 0, 0); - - gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer); - gl.enableVertexAttribArray(texCoordLoc); - gl.vertexAttribPointer(texCoordLoc, 2, gl.FLOAT, false, 0, 0); - - // send texture - gl.uniform1i(gl.getUniformLocation(this.thumbnailProgram, "tex"), 0); - gl.activeTexture(gl.TEXTURE0); - gl.bindTexture(gl.TEXTURE_2D, node.tex); - - gl.drawArrays(gl.TRIANGLES, 0, 6); - - // cleanup - gl.disableVertexAttribArray(posLoc); - gl.disableVertexAttribArray(texCoordLoc); - - // force rendering to be complete - //gl.flush(); - - canvas.copyFromCanvas(this.canvas, true); - } - - createThumbmailProgram() { - const prog = buildShaderProgram( - this.gl, - `precision mediump float; - - attribute vec3 a_pos; - attribute vec2 a_texCoord; - - // the texCoords passed in from the vertex shader. - varying vec2 v_texCoord; - - void main() { - gl_Position = vec4(a_pos,1.0); - v_texCoord = a_texCoord; - }`, - `precision mediump float; - varying vec2 v_texCoord; - uniform sampler2D tex; - - vec4 process(vec2 uv); - - void main() { - gl_FragColor = texture2D(tex,v_texCoord); - }` - ); - - this.thumbnailProgram = prog; - } - - getNodeByName(exportName: string): DesignerNode { - for (const node of this.nodes) { - if (node.exportName == exportName) return node; - } - - return null; - } - - getNodeInputs(node: DesignerNode): NodeInput[] { - const inputs: NodeInput[] = []; - - for (const con of this.conns) { - if (con.rightNode == node) { - const input = new NodeInput(); - input.name = con.rightNodeInput; - input.node = con.leftNode; - inputs.push(input); - } - } - - return inputs; - } - - public addVariable( - name: string, - displayName: string, - varType: DesignerVariableType - ): DesignerVariable { - //todo: throw exception if variable already exists? - - const variable = new DesignerVariable(); - variable.type = varType; - variable.id = Guid.newGuid(); - - switch (varType) { - case DesignerVariableType.Int: - variable.property = new IntProperty(name, displayName, 0); - break; - case DesignerVariableType.Float: - variable.property = new FloatProperty(name, displayName, 0); - break; - case DesignerVariableType.Bool: - variable.property = new BoolProperty(name, displayName, false); - break; - case DesignerVariableType.Enum: - variable.property = new EnumProperty(name, displayName, []); - break; - case DesignerVariableType.Color: - variable.property = new ColorProperty(name, displayName, new Color()); - break; - } - - this.variables.push(variable); - return variable; - } - - // todo: keep reference inside node's property - public mapNodePropertyToVariable( - varName: string, - node: DesignerNode, - nodePropName: string - ) { - const variable = this.findVariable(varName); - if (variable == null) return; //todo: throw exception? - - const map = new DesignerNodePropertyMap(); - map.node = node; - map.propertyName = nodePropName; - - variable.nodes.push(map); - } - - //todo: remove property map - - public setVariable(name: string, value: any) { - const variable = this.findVariable(name); - if (variable) { - //todo: throw exception for invalid types being set - variable.property.setValue(value); - - //update each node's variables - for (const nodeMap of variable.nodes) { - //if (nodeMap.node.hasProperty(nodeMap.propertyName))// just incase - nodeMap.node.setProperty(nodeMap.propertyName, value); - } - } else { - // throw exception? - } - } - - public findVariable(name: string) { - for (const variable of this.variables) - if (variable.property.name == name) return variable; - return null; - } - - public hasVariable(name: string): boolean { - for (const variable of this.variables) - if (variable.property.name == name) return true; - return false; - } - - public variableCount(): number { - return this.variables.length; - } - - public save(): any { - const nodes = []; - for (const node of this.nodes) { - const n = {}; - n["id"] = node.id; - n["typeName"] = node.typeName; - n["exportName"] = node.exportName; - - n["randomSeed"] = node.randomSeed; - //n["inputs"] = node.inputs;// not needed imo - - const props = {}; - for (const prop of node.properties) { - if (prop.type == PropertyType.Image) { - // serialize texture as png - let imageData = (prop.getValue() as Image).serialize(); - props[prop.name] = imageData; - } else { - props[prop.name] = prop.getValue(); - } - } - n["properties"] = props; - - nodes.push(n); - } - - const connections = []; - for (const con of this.conns) { - const c = {}; - c["id"] = con.id; - c["leftNodeId"] = con.leftNode.id; - c["leftNodeOutput"] = con.leftNodeOutput; - c["rightNodeId"] = con.rightNode.id; - c["rightNodeInput"] = con.rightNodeInput; - - connections.push(c); - } - - const variables = []; - for (const dvar of this.variables) { - const v = {}; - v["id"] = dvar.id; - v["type"] = dvar.type; - v["property"] = dvar.property; - - const nodeIds = []; - for (const n of dvar.nodes) { - nodeIds.push({ - nodeId: n.node.id, - name: n.propertyName - }); - } - v["linkedProperties"] = nodeIds; - variables.push(v); - // console.log(v); - } - - const data = {}; - data["nodes"] = nodes; - data["connections"] = connections; - data["variables"] = variables; - return data; - } - - static load(data: any, lib: DesignerLibrary): Designer { - // console.log(data); - const d = new Designer(); - const nodes = data["nodes"]; - for (const node of nodes) { - const n = lib.create(node["typeName"]); - n.exportName = node["exportName"]; - n.id = node["id"]; - - n.randomSeed = node["randomSeed"] || 0; - - // add node to it's properties will be initialized - // todo: separate setting properties and inputs from setting shader in node - d.addNode(n); - - // add properties - const properties = node["properties"]; - for (const prop in properties) { - n.setProperty(prop, properties[prop]); - } - } - - const connections = data["connections"]; - for (const con of connections) { - //var c = d.addConnection() - const left = d.getNodeById(con.leftNodeId); - const right = d.getNodeById(con.rightNodeId); - - // todo: support left index - d.addConnection(left, right, con.rightNodeInput); - } - /* - for(let dvar of this.variables) { - var v = {}; - v["id"] = dvar.id; - v["type"] = dvar.type; - v["property"] = dvar.property; - - var nodeIds = new Array(); - for(let n of dvar.nodes) { - nodeIds.push({ - nodeId:n.node.id, - name:n.propertyName - }); - } - v["linkedProperties"] = nodeIds; - variables.push(v); - console.log(v); - } - */ - if (data.variables) { - const variables = data.variables; - for (const v of variables) { - //this.addVariable(v.name, v.displayName, ) - - const dvar = d.addVariable( - v.property.name, - v.property.displayName, - v.type - ); - dvar.id = v.id; - // copy values over to the property - switch (dvar.type) { - case DesignerVariableType.Float: - (dvar.property).copyValuesFrom( - v.property - ); - break; - - case DesignerVariableType.Int: - (dvar.property).copyValuesFrom( - v.property - ); - break; - - case DesignerVariableType.Bool: - (dvar.property).copyValuesFrom( - v.property - ); - break; - - case DesignerVariableType.Enum: - (dvar.property).copyValuesFrom( - v.property - ); - break; - - case DesignerVariableType.Color: - (dvar.property).copyValuesFrom( - v.property - ); - break; - } - - // link properties - for (const lp of (v).linkedProperties) { - const node = d.getNodeById(lp.nodeId); - d.mapNodePropertyToVariable(v.property.name, node, lp.name); - } - } - } - - return d; - } -} diff --git a/src/lib/designer/color.ts b/src/lib/designer/color.ts deleted file mode 100644 index 8b3a1c21..00000000 --- a/src/lib/designer/color.ts +++ /dev/null @@ -1,52 +0,0 @@ -// values range from 0 to 1 -export class Color { - public r = 0.0; - public g = 0.0; - public b = 0.0; - public a = 1.0; - - public constructor(r = 0.0, g = 0.0, b = 0.0, a = 1.0) { - this.r = r; - this.g = g; - this.b = b; - this.a = a; - } - public clone(): Color { - return new Color(this.r, this.g, this.b, this.a); - } - - public copy(col: Color) { - this.r = col.r; - this.g = col.g; - this.b = col.b; - this.a = col.a; - } - - public lerp(to: Color, t: number) { - this.r = this.r * t + to.r * (1.0 - t); - this.g = this.g * t + to.g * (1.0 - t); - this.b = this.b * t + to.b * (1.0 - t); - this.a = this.a * t + to.a * (1.0 - t); - } - - public static parse(hex: string): Color { - const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); - if (result) { - const c = new Color(); - c.r = parseInt(result[1], 16) / 255; - c.g = parseInt(result[2], 16) / 255; - c.b = parseInt(result[3], 16) / 255; - return c; - } else { - return new Color(); - } - } - - public toHex(): string { - //https://stackoverflow.com/questions/596467/how-do-i-convert-a-float-number-to-a-whole-number-in-javascript - const r = ~~(this.r * 255); - const g = ~~(this.g * 255); - const b = ~~(this.b * 255); - return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); - } -} diff --git a/src/lib/designer/designerconnection.ts b/src/lib/designer/designerconnection.ts deleted file mode 100644 index 33ba9b10..00000000 --- a/src/lib/designer/designerconnection.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { DesignerNode } from "./designernode"; -import { Guid } from "../utils"; - -export class DesignerNodeConn { - public id: string = Guid.newGuid(); - - leftNode: DesignerNode; - leftNodeOutput = ""; // if null, use first output - - rightNode: DesignerNode; - rightNodeInput: string; -} diff --git a/src/lib/designer/designernode.ts b/src/lib/designer/designernode.ts deleted file mode 100644 index b398b3b7..00000000 --- a/src/lib/designer/designernode.ts +++ /dev/null @@ -1,274 +0,0 @@ -import { Guid } from "../utils"; -import { Designer, NodeRenderContext } from "../designer"; -import { - Property, - FloatProperty, - IntProperty, - BoolProperty, - EnumProperty, - ColorProperty, - StringProperty, - GradientProperty, - IPropertyHolder, - ImageProperty, - PropertyType, - PropertyGroup -} from "./properties"; -import { buildShaderProgram } from "./gl"; -import { Color } from "./color"; -import { Gradient } from "./gradient"; -import { Image } from "./image"; - -export class NodeInput { - public node: DesignerNode; - public name: string; -} - -export class DesignerNode implements IPropertyHolder { - public id: string = Guid.newGuid(); - public title: string; - public typeName: string; // added when node is created from library - - public gl: WebGLRenderingContext; - tex: WebGLTexture; - public designer: Designer; - exportName: string; - - randomSeed: number = 0; - - inputs: string[] = []; - properties: Property[] = []; - propertyGroups: PropertyGroup[] = []; - - // tells scene to update the texture next frame - needsUpdate = true; - - // callbacks - onthumbnailgenerated: (DesignerNode, HTMLImageElement) => void; - - // an update is requested when: - // a property is changed - // a new connection is made - // a connection is removedscientist - // - // all output connected nodes are invalidated as well - private requestUpdate() { - this.designer.requestUpdate(this); - } - - getPixelData(): Uint16Array { - return null; - } - - getTextureData(): ArrayBuffer { - return null; - } - - setRandomSeed(seed: number) { - this.randomSeed = seed; - this.requestUpdate(); - } - - public render(context: NodeRenderContext) {} - - public isCpu() { - return true; - } - - public getInputs(): string[] { - return this.inputs; - } - - protected addInput(name: string) { - this.inputs.push(name); - } - - public setProperty(name: string, value: any) { - const prop = this.properties.find(x => { - return x.name == name; - }); - - if (prop) { - if (prop.type == PropertyType.Image) { - prop.setValue(value, () => { - this.requestUpdate(); - }); - } else { - prop.setValue(value); - this.requestUpdate(); - } - } - - // for (let prop of this.properties) { - // console.log("prop iter"); - // console.log(prop); - // console.log(prop.name == name); - // if (prop.name == name) { - // prop.setValue(value); - // this.requestUpdate(); - // } - // } - } - - public _init() { - //this.inputs = new Array(); - //this.properties = new Array(); - this.createTexture(); - - this.init(); - } - - protected init() {} - - // creates opengl texture for this node - // gets the height from the scene - // if the texture is already created, delete it and recreate it - createTexture() { - const gl = this.gl as WebGL2RenderingContext; - - if (this.tex) { - gl.deleteTexture(this.tex); - this.tex = null; - } - - const tex = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, tex); - - const level = 0; - const internalFormat = gl.RGBA16F; - const border = 0; - const format = gl.RGBA; - const type = gl.FLOAT; - const data = null; - gl.texImage2D( - gl.TEXTURE_2D, - level, - internalFormat, - this.designer.width, - this.designer.height, - border, - format, - type, - data - ); - - // set the filtering so we don't need mips - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); - - gl.bindTexture(gl.TEXTURE_2D, null); - - this.tex = tex; - } - - createGroup(name: string): PropertyGroup { - const group = new PropertyGroup(); - group.name = name; - this.propertyGroups.push(group); - - return group; - } - - // PROPERTY FUNCTIONS - addIntProperty( - id: string, - displayName: string, - defaultVal = 1, - minVal = 1, - maxVal = 100, - increment = 1 - ): IntProperty { - const prop = new IntProperty(id, displayName, defaultVal); - prop.minValue = minVal; - prop.maxValue = maxVal; - prop.step = increment; - - this.properties.push(prop); - return prop; - } - - addFloatProperty( - id: string, - displayName: string, - defaultVal = 1, - minVal = 1, - maxVal = 100, - increment = 1 - ): FloatProperty { - const prop = new FloatProperty(id, displayName, defaultVal); - prop.minValue = minVal; - prop.maxValue = maxVal; - prop.step = increment; - - this.properties.push(prop); - return prop; - } - - addBoolProperty( - id: string, - displayName: string, - defaultVal = false - ): BoolProperty { - const prop = new BoolProperty(id, displayName, defaultVal); - - this.properties.push(prop); - return prop; - } - - addEnumProperty( - id: string, - displayName: string, - defaultVal: string[] = [] - ): EnumProperty { - const prop = new EnumProperty(id, displayName, defaultVal); - - this.properties.push(prop); - return prop; - } - - addColorProperty( - id: string, - displayName: string, - defaultVal: Color - ): ColorProperty { - const prop = new ColorProperty(id, displayName, defaultVal); - - this.properties.push(prop); - return prop; - } - - addStringProperty( - id: string, - displayName: string, - defaultVal = "" - ): StringProperty { - const prop = new StringProperty(id, displayName, defaultVal); - - this.properties.push(prop); - return prop; - } - - addGradientProperty( - id: string, - displayName: string, - defaultVal: Gradient - ): GradientProperty { - const prop = new GradientProperty(id, displayName, defaultVal); - - this.properties.push(prop); - return prop; - } - - addImageProperty( - id: string, - displayName: string, - defaultVal: Image - ): ImageProperty { - const prop = new ImageProperty(id, displayName, defaultVal); - - this.properties.push(prop); - return prop; - } -} diff --git a/src/lib/designer/designervariable.ts b/src/lib/designer/designervariable.ts deleted file mode 100644 index f91b1b85..00000000 --- a/src/lib/designer/designervariable.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { DesignerNode } from "./designernode"; -import { Property } from "./properties"; - -export enum DesignerVariableType { - None = 0, - Float = 1, - Int = 2, - Bool = 3, - Enum = 4, - Color = 5 - //Gradient -} - -export class DesignerNodePropertyMap { - public node: DesignerNode; - public propertyName: string; -} - -export class DesignerVariable { - id: string; - - type: DesignerVariableType; - // used to keep the value in bounds - property: Property; - - nodes: DesignerNodePropertyMap[] = []; -} diff --git a/src/lib/designer/gl.ts b/src/lib/designer/gl.ts deleted file mode 100644 index a827060c..00000000 --- a/src/lib/designer/gl.ts +++ /dev/null @@ -1,202 +0,0 @@ -export function createTexture( - gl: WebGLRenderingContext, - width: number, - height: number -): WebGLTexture { - const texture = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, texture); - - // Set the parameters so we can render any size image. - //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); - //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - - // Upload the image into the texture. - gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, null); - - return texture; -} - -export enum TextureDataType { - Uint8, - Uint16, - Float16, - Float32 -} - -// assumes all textures are RGBA -export function createTextureWithType( - gl: WebGL2RenderingContext, - dataType: TextureDataType, - width: number, - height: number -): WebGLTexture { - const texture = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, texture); - - let ext = gl.getExtension("EXT_texture_norm16"); - - // format of data being passed to GPU - // let internalFormat: number = gl.RGBA; - // let type: number = gl.UNSIGNED_BYTE; - - // // format and components the texture should actually store - // let format: number = gl.RGBA8; - - // webgl has a guide for the combination of these - // properties(internalFormat, format, type) - // https://www.khronos.org/files/webgl20-reference-guide.pdf - - // Upload the image into the texture. - switch (dataType) { - case TextureDataType.Uint8: - // gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, null); - gl.texImage2D( - gl.TEXTURE_2D, - 0, - gl.RGBA8, - width, - height, - 0, - gl.RGBA, - gl.UNSIGNED_BYTE, - null - ); - break; - case TextureDataType.Uint16: - // gl.texImage2D( - // gl.TEXTURE_2D, - // 0, - // gl.RGBA16UI, - // width, - // height, - // 0, - // gl.RGBA, - // gl.UNSIGNED_SHORT, - // null - // ); - - gl.texImage2D( - gl.TEXTURE_2D, - 0, - ext.RGBA16_EXT, - width, - height, - 0, - gl.RGBA, - gl.UNSIGNED_SHORT, - null - ); - break; - case TextureDataType.Float16: - gl.texImage2D( - gl.TEXTURE_2D, - 0, - gl.RGBA16F, - width, - height, - 0, - gl.RGBA, - gl.FLOAT, - null - ); - break; - case TextureDataType.Float32: - gl.texImage2D( - gl.TEXTURE_2D, - 0, - gl.RGBA32F, - width, - height, - 0, - gl.RGBA, - gl.FLOAT, - null - ); - break; - } - - // gl.texImage2D( - // gl.TEXTURE_2D, - // 0, - // internalFormat, - // width, - // height, - // 0, - // format, - // type, - // null - // ); - - // Set the parameters so we can render any size image. - //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); - //gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - - return texture; -} - -export function getShaderSource(id) { - const shaderScript = document.getElementById(id); - if (!shaderScript) { - return null; - } - - let str = ""; - let k = shaderScript.firstChild; - while (k) { - if (k.nodeType == 3) { - str += k.textContent; - } - k = k.nextSibling; - } - - return str; -} - -export function compileShader(gl, source, shaderType) { - const shader = gl.createShader(shaderType); - - gl.shaderSource(shader, source); - gl.compileShader(shader); - - if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { - alert(gl.getShaderInfoLog(shader)); - return null; - } - - return shader; -} - -export function buildShaderProgram(gl, vertSource, fragSource) { - const vertexShader = compileShader(gl, vertSource, gl.VERTEX_SHADER); - const fragmentShader = compileShader(gl, fragSource, gl.FRAGMENT_SHADER); - - const shaderProgram = gl.createProgram(); - gl.attachShader(shaderProgram, vertexShader); - gl.attachShader(shaderProgram, fragmentShader); - gl.linkProgram(shaderProgram); - - if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { - alert("Could not initialise shaders"); - } - - gl.useProgram(shaderProgram); - /* - shaderProgram.samplerLoc = gl.getUniformLocation(shaderProgram, "tex"); - - shaderProgram.vertexPositionAttribute = gl.getAttribLocation(shaderProgram, "aVertexPosition"); - gl.enableVertexAttribArray(shaderProgram.vertexPositionAttribute); - - shaderProgram.vertexUVAttribute = gl.getAttribLocation(shaderProgram, "aVertexUV"); - gl.enableVertexAttribArray(shaderProgram.vertexUVAttribute); - */ - - return shaderProgram; -} diff --git a/src/lib/designer/gpudesignernode.ts b/src/lib/designer/gpudesignernode.ts deleted file mode 100644 index 79f9c676..00000000 --- a/src/lib/designer/gpudesignernode.ts +++ /dev/null @@ -1,541 +0,0 @@ -import { Guid } from "../utils"; -import { Designer, NodeRenderContext } from "../designer"; -import { - Property, - FloatProperty, - IntProperty, - BoolProperty, - EnumProperty, - ColorProperty, - StringProperty, - GradientProperty, - IPropertyHolder -} from "./properties"; -import { buildShaderProgram } from "./gl"; -import { Color } from "./color"; -import { Gradient } from "./gradient"; -import { DesignerNode } from "./designernode"; - -export class GpuDesignerNode extends DesignerNode { - // tex: WebGLTexture; - readFbo: WebGLFramebuffer; - //program:WebGLShader; - source: string; // shader code - shaderProgram: WebGLProgram; - - public isCpu() { - return false; - } - - // https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/readPixels - // returns copy of data - getPixelData(): Uint16Array { - const gl = this.gl as WebGL2RenderingContext; - const width = this.designer.width; - const height = this.designer.height; - const data = new Uint16Array(width * height * 4); - - gl.bindFramebuffer(gl.FRAMEBUFFER, this.readFbo); - gl.framebufferTexture2D( - gl.FRAMEBUFFER, - gl.COLOR_ATTACHMENT0, - gl.TEXTURE_2D, - this.tex, - 0 - ); - if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE) { - gl.readPixels(0, 0, width, height, gl.RGBA, gl.HALF_FLOAT, data); - // todo: check for errors in this operation - // gl.readPixels( - // 0, - // 0, - // this.designer.width, - // this.designer.height, - // gl.RGBA, - // gl.HALF_FLOAT, - // data - // ); - } else { - alert("getPixelData: unable to read from FBO"); - } - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - - return data; - } - - public render(context: NodeRenderContext) { - const inputs = context.inputs; - const gl = this.gl; - - gl.bindFramebuffer(gl.FRAMEBUFFER, context.fbo); - gl.activeTexture(gl.TEXTURE0); - gl.framebufferTexture2D( - gl.FRAMEBUFFER, - gl.COLOR_ATTACHMENT0, - gl.TEXTURE_2D, - this.tex, - 0 - ); - - gl.viewport(0, 0, context.textureWidth, context.textureHeight); - - // bind texture to fbo - //gl.clearColor(0,0,1,1); - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - - // bind shader - gl.useProgram(this.shaderProgram); - - // clear all inputs - for (const input of this.inputs) { - gl.activeTexture(gl.TEXTURE0 + texIndex); - gl.bindTexture(gl.TEXTURE_2D, null); - - gl.uniform1i(gl.getUniformLocation(this.shaderProgram, input), 0); - - gl.uniform1i( - gl.getUniformLocation(this.shaderProgram, input + "_connected"), - 0 - ); - } - - // pass inputs for rendering - var texIndex = 0; - for (const input of inputs) { - gl.activeTexture(gl.TEXTURE0 + texIndex); - gl.bindTexture(gl.TEXTURE_2D, input.node.tex); - gl.uniform1i( - gl.getUniformLocation(this.shaderProgram, input.name), - texIndex - ); - gl.uniform1i( - gl.getUniformLocation(this.shaderProgram, input.name + "_connected"), - 1 - ); - //console.log("bound texture " + texIndex); - texIndex++; - } - - // pass seed - gl.uniform1f( - gl.getUniformLocation(this.shaderProgram, "_seed"), - this.randomSeed + this.designer.getRandomSeed() - ); - - // texture size - gl.uniform2f( - gl.getUniformLocation(this.shaderProgram, "_textureSize"), - this.designer.width, - this.designer.height - ); - - // pass properties - for (const prop of this.properties) { - if (prop instanceof FloatProperty) { - gl.uniform1f( - gl.getUniformLocation(this.shaderProgram, "prop_" + prop.name), - (prop as FloatProperty).value - ); - } - if (prop instanceof IntProperty) { - gl.uniform1i( - gl.getUniformLocation(this.shaderProgram, "prop_" + prop.name), - (prop as IntProperty).value - ); - } - if (prop instanceof BoolProperty) { - gl.uniform1i( - gl.getUniformLocation(this.shaderProgram, "prop_" + prop.name), - (prop as BoolProperty).value == false ? 0 : 1 - ); - } - if (prop instanceof EnumProperty) { - gl.uniform1i( - gl.getUniformLocation(this.shaderProgram, "prop_" + prop.name), - (prop as EnumProperty).index - ); - } - if (prop instanceof ColorProperty) { - const col = (prop as ColorProperty).value; - //console.log("color: ", col); - gl.uniform4f( - gl.getUniformLocation(this.shaderProgram, "prop_" + prop.name), - col.r, - col.g, - col.b, - col.a - ); - } - if (prop instanceof GradientProperty) { - const gradient = (prop as GradientProperty).value; - - gl.uniform1i( - gl.getUniformLocation( - this.shaderProgram, - "prop_" + prop.name + ".numPoints" - ), - gradient.points.length - ); - - for (let i = 0; i < gradient.points.length; i++) { - const point = gradient.points[i]; - const col = point.color; - - gl.uniform3f( - gl.getUniformLocation( - this.shaderProgram, - "prop_" + prop.name + ".colors[" + i + "]" - ), - col.r, - col.g, - col.b - ); - - gl.uniform1f( - gl.getUniformLocation( - this.shaderProgram, - "prop_" + prop.name + ".positions[" + i + "]" - ), - point.t - ); - } - } - } - - // bind mesh - const posLoc = gl.getAttribLocation(this.shaderProgram, "a_pos"); - const texCoordLoc = gl.getAttribLocation(this.shaderProgram, "a_texCoord"); - - // provide texture coordinates for the rectangle. - gl.bindBuffer(gl.ARRAY_BUFFER, this.designer.posBuffer); - gl.enableVertexAttribArray(posLoc); - gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 0, 0); - - gl.bindBuffer(gl.ARRAY_BUFFER, this.designer.texCoordBuffer); - gl.enableVertexAttribArray(texCoordLoc); - gl.vertexAttribPointer(texCoordLoc, 2, gl.FLOAT, false, 0, 0); - - gl.drawArrays(gl.TRIANGLES, 0, 6); - - gl.disableVertexAttribArray(posLoc); - gl.disableVertexAttribArray(texCoordLoc); - - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - } - - public _init() { - //this.inputs = new Array(); - //this.properties = new Array(); - - this.readFbo = this.gl.createFramebuffer(); - this.createTexture(); - - this.init(); - } - - // #source gets appended to fragment shader - buildShader(source: string) { - const vertSource = `#version 300 es - precision highp float; - - in vec3 a_pos; - in vec2 a_texCoord; - - // the texCoords passed in from the vertex shader. - out vec2 v_texCoord; - - void main() { - gl_Position = vec4(a_pos,1.0); - v_texCoord = a_texCoord; - }`; - - let fragSource = `#version 300 es - precision highp float; - in vec2 v_texCoord; - - #define GRADIENT_MAX_POINTS 32 - - vec4 process(vec2 uv); - void initRandom(); - - uniform vec2 _textureSize; - - out vec4 fragColor; - - void main() { - initRandom(); - vec4 result = process(v_texCoord); - fragColor = clamp(result, 0.0, 1.0); - } - - `; - - fragSource = - fragSource + - this.createRandomLib() + - this.createGradientLib() + - this.createCodeForInputs() + - this.createCodeForProps() + - "#line 0\n" + - source; - - this.shaderProgram = buildShaderProgram(this.gl, vertSource, fragSource); - } - - createRandomLibOld(): string { - // float _seed = `+this.designer.getRandomSeed().toFixed(1)+`; - const code = ` - // this offsets the random start (should be a uniform) - uniform float _seed; - // this is the starting number for the rng - // (should be set from the uv coordinates so it's unique per pixel) - vec2 _randomStart; - - float _rand(vec2 co){ - return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); - } - - //todo: test variance! - vec2 _rand2(vec2 co){ - return vec2(_rand(co), _rand(co + vec2(0.0001, 0.0001))); - } - - float randomFloat(int index) - { - return _rand(_randomStart + vec2(_seed) + vec2(index)); - } - - float randomVec2(int index) - { - return _rand(_randomStart + vec2(_seed) + vec2(index)); - } - - float randomFloat(int index, float start, float end) - { - float r = _rand(_randomStart + vec2(_seed) + vec2(index)); - return start + r*(end-start); - } - - int randomInt(int index, int start, int end) - { - float r = _rand(_randomStart + vec2(_seed) + vec2(index)); - return start + int(r*float(end-start)); - } - - bool randomBool(int index) - { - return _rand(_randomStart + vec2(_seed) + vec2(index)) > 0.5; - } - - void initRandom() - { - _randomStart = v_texCoord; - } - `; - - return code; - } - - createRandomLib(): string { - // float _seed = `+this.designer.getRandomSeed().toFixed(1)+`; - const code = ` - // this offsets the random start (should be a uniform) - uniform float _seed; - // this is the starting number for the rng - // (should be set from the uv coordinates so it's unique per pixel) - vec2 _randomStart; - - // gives a much better distribution at 1 - #define RANDOM_ITERATIONS 1 - - #define HASHSCALE1 443.8975 - #define HASHSCALE3 vec3(443.897, 441.423, 437.195) - #define HASHSCALE4 vec4(443.897, 441.423, 437.195, 444.129) - - // 1 out, 2 in... - float hash12(vec2 p) - { - vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1); - p3 += dot(p3, p3.yzx + 19.19); - return fract((p3.x + p3.y) * p3.z); - } - - /// 2 out, 2 in... - vec2 hash22(vec2 p) - { - vec3 p3 = fract(vec3(p.xyx) * HASHSCALE3); - p3 += dot(p3, p3.yzx+19.19); - return fract((p3.xx+p3.yz)*p3.zy); - - } - - - float _rand(vec2 uv) - { - float a = 0.0; - for (int t = 0; t < RANDOM_ITERATIONS; t++) - { - float v = float(t+1)*.152; - // 0.005 is a good value - vec2 pos = (uv * v); - a += hash12(pos); - } - - return a/float(RANDOM_ITERATIONS); - } - - vec2 _rand2(vec2 uv) - { - vec2 a = vec2(0.0); - for (int t = 0; t < RANDOM_ITERATIONS; t++) - { - float v = float(t+1)*.152; - // 0.005 is a good value - vec2 pos = (uv * v); - a += hash22(pos); - } - - return a/float(RANDOM_ITERATIONS); - } - - float randomFloat(int index) - { - return _rand(_randomStart + vec2(_seed) + vec2(index)); - } - - float randomVec2(int index) - { - return _rand(_randomStart + vec2(_seed) + vec2(index)); - } - - float randomFloat(int index, float start, float end) - { - float r = _rand(_randomStart + vec2(_seed) + vec2(index)); - return start + r*(end-start); - } - - int randomInt(int index, int start, int end) - { - float r = _rand(_randomStart + vec2(_seed) + vec2(index)); - return start + int(r*float(end-start)); - } - - bool randomBool(int index) - { - return _rand(_randomStart + vec2(_seed) + vec2(index)) > 0.5; - } - - void initRandom() - { - _randomStart = v_texCoord; - } - `; - - return code; - } - - createGradientLib(): string { - // float _seed = `+this.designer.getRandomSeed().toFixed(1)+`; - const code = ` - struct Gradient { - vec3 colors[GRADIENT_MAX_POINTS]; - float positions[GRADIENT_MAX_POINTS]; - int numPoints; - }; - - // assumes points are sorted - vec3 sampleGradient(vec3 colors[GRADIENT_MAX_POINTS], float positions[GRADIENT_MAX_POINTS], int numPoints, float t) - { - if (numPoints == 0) - return vec3(1,0,0); - - if (numPoints == 1) - return colors[0]; - - // here at least two points are available - if (t <= positions[0]) - return colors[0]; - - int last = numPoints - 1; - if (t >= positions[last]) - return colors[last]; - - // find two points in-between and lerp - - for(int i = 0; i < numPoints-1;i++) { - if (positions[i+1] > t) { - vec3 colorA = colors[i]; - vec3 colorB = colors[i+1]; - - float t1 = positions[i]; - float t2 = positions[i+1]; - - float lerpPos = (t - t1)/(t2 - t1); - return mix(colorA, colorB, lerpPos); - - } - - } - - return vec3(0,0,0); - } - - vec3 sampleGradient(Gradient gradient, float t) - { - return sampleGradient(gradient.colors, gradient.positions, gradient.numPoints, t); - } - `; - - return code; - } - - createCodeForInputs() { - let code = ""; - - for (const input of this.inputs) { - code += "uniform sampler2D " + input + ";\n"; - code += "uniform bool " + input + "_connected;\n"; - } - - return code; - } - - createCodeForProps() { - let code = ""; - - //console.log(this.properties); - //console.log(typeof FloatProperty); - - for (const prop of this.properties) { - //code += "uniform sampler2D " + input + ";\n"; - if (prop instanceof FloatProperty) { - code += "uniform float prop_" + prop.name + ";\n"; - } - if (prop instanceof IntProperty) { - code += "uniform int prop_" + prop.name + ";\n"; - } - if (prop instanceof BoolProperty) { - code += "uniform bool prop_" + prop.name + ";\n"; - } - if (prop instanceof EnumProperty) { - code += "uniform int prop_" + prop.name + ";\n"; - } - if (prop instanceof ColorProperty) { - code += "uniform vec4 prop_" + prop.name + ";\n"; - } - if (prop instanceof GradientProperty) { - // code += "uniform struct prop_" + prop.name + " {\n"; - // code += "vec3 colors[GRADIENT_MAX_POINTS];\n"; - // code += "vec3 positions[GRADIENT_MAX_POINTS];\n"; - // code += "int numPoints;\n"; - // code += "};"; - - code += "uniform Gradient prop_" + prop.name + ";\n"; - } - } - - code += "\n"; - - return code; - } -} diff --git a/src/lib/designer/gradient.ts b/src/lib/designer/gradient.ts deleted file mode 100644 index 9a80e412..00000000 --- a/src/lib/designer/gradient.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { Color } from "./color"; - -export class GradientPoint { - // position on gradient - t: number; - - // color of point - color: Color; -} - -export class Gradient { - points: GradientPoint[]; - - constructor() { - this.points = []; - } - - addPoint(t: number, color: Color): GradientPoint { - const point = new GradientPoint(); - point.t = t; - point.color = color; - - this.points.push(point); - this.sort(); - - return point; - } - - removePoint(point: GradientPoint) { - this.points.splice(this.points.indexOf(point), 1); - } - - clear() { - this.points = []; - } - - sort() { - this.points.sort(function(a: GradientPoint, b: GradientPoint) { - return a.t - b.t; - }); - } - - sample(t: number): Color { - if (this.points.length == 0) return new Color(); - if (this.points.length == 1) return this.points[0].color.clone(); - - // here at least two points are available - if (t < this.points[0].t) return this.points[0].color.clone(); - - const last = this.points.length - 1; - if (t > this.points[last].t) return this.points[last].color.clone(); - - // find two points and lerp - for (let i = 0; i < this.points.length - 1; i++) { - if (this.points[i + 1].t > t) { - const p1 = this.points[i]; - const p2 = this.points[i + 1]; - - const lerpPos = (t - p1.t) / (p2.t - p1.t); - const color = new Color(); - color.copy(p1.color); - color.lerp(p2.color, lerpPos); - - return color; - } - } - - // should never get to this point - return new Color(); - } - - clone() { - const grad = new Gradient(); - grad.clear(); - - for (const p of this.points) { - grad.addPoint(p.t, p.color.clone()); - } - - return grad; - } - - public static parse(obj: any) { - const gradient = new Gradient(); - for (const p of obj.points) { - const t = p.t; - const color = new Color(); - color.copy(p.color); - - gradient.addPoint(t, color); - } - - return gradient; - } - - public static default() { - const gradient = new Gradient(); - gradient.addPoint(0, new Color(0, 0, 0, 1.0)); - gradient.addPoint(1, new Color(1, 1, 1, 1.0)); - - return gradient; - } -} diff --git a/src/lib/designer/image.ts b/src/lib/designer/image.ts deleted file mode 100644 index e2173129..00000000 --- a/src/lib/designer/image.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { NativeImage } from "electron"; - -enum ImageSource { - Inline = "inline", // in .texture file - Embedded = "embedded" // in .texlab package as a seperate file -} - -export class Image { - canvas: HTMLCanvasElement; - path: string; - src: string; - type: ImageSource; - - constructor( - path: string, - canvasSource: CanvasImageSource, - width: number, - height: number - ) { - this.init(path, canvasSource, width, height); - } - - private init( - path: string, - canvasSource: CanvasImageSource, - width: number, - height: number - ) { - if (canvasSource != null) { - let canvas = document.createElement("canvas") as HTMLCanvasElement; - canvas.width = width; - canvas.height = height; - - let ctx = canvas.getContext("2d"); - ctx.drawImage(canvasSource, 0, 0); - - this.canvas = canvas; - } - - this.path = path; - } - - get isEmpty() { - return this.canvas == null; - } - - static empty(): Image { - return new Image(null, null, 0, 0); - } - - static load(path: string): Image { - let nativeImage = NativeImage.createFromPath(path); - let img: HTMLImageElement = document.createElement( - "image" - ) as HTMLImageElement; - - img.src = nativeImage.toDataURL(); - - return new Image(path, img, img.width, img.height); - } - - clone(): Image { - return new Image(this.path, this.canvas, this.width, this.height); - } - - get width() { - return this.canvas.width; - } - - get height() { - return this.canvas.height; - } - - serialize() { - return { - type: ImageSource.Inline, - src: this.canvas.toDataURL("image/png") - }; - } - - // handle async - deserialize(obj: any, completeCallback: () => void = null) { - console.log(obj); - - // note: only works with inline images right now - if (obj.type !== ImageSource.Inline) return; - - let img: HTMLImageElement = document.createElement( - "img" - ) as HTMLImageElement; - - img.onload = () => { - console.log("image loaded"); - console.log(img); - console.log(img.width); - console.log(img.height); - - // // flip image - // let canvas = document.createElement("canvas"); - // canvas.width = img.width; - // canvas.height = img.height; - - // let ctx = canvas.getContext("2d"); - // ctx.save(); - // ctx.clearRect(0, 0, canvas.width, canvas.height); - // //ctx.translate(0, img.height); - // //ctx.scale(1, -1); - // ctx.drawImage(img, 0, 0, img.width, img.height); - // ctx.restore(); - - this.init("", img, img.width, img.height); - - completeCallback(); - }; - - img.src = obj.src; - } -} diff --git a/src/lib/designer/imagecanvas.ts b/src/lib/designer/imagecanvas.ts deleted file mode 100644 index ac88fa8d..00000000 --- a/src/lib/designer/imagecanvas.ts +++ /dev/null @@ -1,79 +0,0 @@ -export class ImageCanvas { - canvas: HTMLCanvasElement; - context: CanvasRenderingContext2D; - - constructor(width = 1024, height = 1024) { - this.canvas = document.createElement("canvas"); - this.canvas.width = width; - this.canvas.height = height; - this.context = this.canvas.getContext("2d"); - } - - // copies image from source - // scales the image to fit dest canvas - copyFromCanvas(src: HTMLCanvasElement, resize = false) { - if (resize) { - if (this.canvas.width != src.width) this.canvas.width = src.width; - if (this.canvas.height != src.height) this.canvas.height = src.height; - } - //console.log("copying from " + src.width + " to " + this.canvas.width); - this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); - this.context.drawImage(src, 0, 0, this.canvas.width, this.canvas.height); - } - - copyFromImageCanvas(imageCanvas: ImageCanvas) { - this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); - this.context.drawImage( - imageCanvas.canvas, - 0, - 0, - this.canvas.width, - this.canvas.height - ); - } - - resize(width: number, height: number) { - this.canvas.width = width; - this.canvas.height = height; - } - - width(): number { - return this.canvas.width; - } - - height(): number { - return this.canvas.height; - } - - toImage(): HTMLImageElement { - const img: HTMLImageElement = ( - document.createElement("image") - ); - //var img:HTMLImageElement = new Image(this.width, this.height); - img.src = this.canvas.toDataURL("image/png"); - - return img; - } - - createTexture(gl: WebGLRenderingContext): WebGLTexture { - const texture = gl.createTexture(); - gl.bindTexture(gl.TEXTURE_2D, texture); - - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - - // Upload the image into the texture. - gl.texImage2D( - gl.TEXTURE_2D, - 0, - gl.RGBA, - gl.RGBA, - gl.UNSIGNED_BYTE, - this.canvas - ); - - return texture; - } -} diff --git a/src/lib/designer/library.ts b/src/lib/designer/library.ts deleted file mode 100644 index d9ad8c15..00000000 --- a/src/lib/designer/library.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { DesignerNode } from "./designernode"; - -export class DesignerNodeFactory { - public name: string; - public displayName: string; - public create: () => DesignerNode; -} - -// holds list of node factories -export class DesignerLibrary { - versionName: string; - nodes = []; - - // https://www.snip2code.com/Snippet/685188/Create-instance-of-generic-type-on-TypeS - public addNode( - name: string, - displayName: string, - type: { new (): T } - ) { - const factory = new DesignerNodeFactory(); - factory.name = name; - factory.displayName = displayName; - factory.create = (): DesignerNode => { - return new type(); - }; - - //this.nodes.push(factory); - this.nodes[name] = factory; - } - - getVersionName() { - return this.versionName; - } - - public create(name: string): DesignerNode { - //if (this.nodes.indexOf(name) == -1) - // return null; - - const node = this.nodes[name].create(); - node.typeName = name; - - return node; - } -} diff --git a/src/lib/designer/properties.ts b/src/lib/designer/properties.ts deleted file mode 100644 index 375af7b9..00000000 --- a/src/lib/designer/properties.ts +++ /dev/null @@ -1,376 +0,0 @@ -import { Color } from "./color"; -import { Gradient } from "./gradient"; -import { Image } from "./image"; - -// for use in code after build -export enum PropertyType { - Float = "float", - Int = "int", - Bool = "bool", - Color = "color", - Enum = "enum", - String = "string", - Gradient = "gradient", - Image = "image" -} - -export class PropertyGroup { - name: string = ""; - properties: Property[] = []; - collapsed: boolean = true; - - add(prop: Property) { - this.properties.push(prop); - prop.group = this; - } -} - -export class Property { - public name: string; - public displayName: string; - public type: string; - - public group: PropertyGroup; - - // to be overriden - public getValue(): any { - return null; - } - - public setValue(val: any, completeCallback: () => void = null) {} - - public clone(): Property { - return null; - } -} - -export interface IPropertyHolder { - properties: Property[]; - propertyGroups: PropertyGroup[]; - setProperty(name: string, value: any); -} - -export class FloatProperty extends Property { - value: number; - minValue = 0; - maxValue = 1; - step = 1; - public constructor( - name: string, - displayName: string, - value: number, - step = 1 - ) { - super(); - this.name = name; - this.displayName = displayName; - this.value = value; - this.step = step; - this.type = PropertyType.Float; - } - - public getValue(): any { - return this.value; - } - - public setValue(val: any) { - // todo: validate - this.value = val; - } - - public clone(): Property { - const prop = new FloatProperty( - this.name, - this.displayName, - this.value, - this.step - ); - prop.minValue = this.minValue; - prop.maxValue = this.maxValue; - - return prop; - } - - public copyValuesFrom(prop: FloatProperty) { - this.minValue = prop.minValue; - this.maxValue = prop.maxValue; - this.value = prop.value; - this.step = prop.step; - } -} - -export class IntProperty extends Property { - value: number; - minValue = 0; - maxValue = 100; - step = 1; - public constructor( - name: string, - displayName: string, - value: number, - step = 1 - ) { - super(); - this.name = name; - this.displayName = displayName; - this.value = value; - this.step = step; - this.type = PropertyType.Int; - } - - public getValue(): any { - return this.value; - } - - public setValue(val: any) { - // todo: validate - this.value = val; - } - - public clone(): Property { - const prop = new IntProperty( - this.name, - this.displayName, - this.value, - this.step - ); - prop.minValue = this.minValue; - prop.maxValue = this.maxValue; - - return prop; - } - - public copyValuesFrom(prop: IntProperty) { - this.minValue = prop.minValue; - this.maxValue = prop.maxValue; - this.value = prop.value; - this.step = prop.step; - } -} - -export class BoolProperty extends Property { - value: boolean; - public constructor(name: string, displayName: string, value: boolean) { - super(); - this.name = name; - this.displayName = displayName; - this.value = value; - this.type = PropertyType.Bool; - } - - public getValue(): any { - return this.value; - } - - public setValue(val: any) { - // todo: validate - this.value = val; - } - - public clone(): Property { - const prop = new BoolProperty(this.name, this.displayName, this.value); - - return prop; - } - - public copyValuesFrom(prop: BoolProperty) { - this.value = prop.value; - } -} - -export class EnumProperty extends Property { - values: string[]; - index = 0; - public constructor(name: string, displayName: string, values: string[]) { - super(); - this.name = name; - this.displayName = displayName; - this.values = values; - this.type = PropertyType.Enum; - } - - public getValues(): string[] { - return this.values; - } - - public getValue(): any { - return this.index; - } - - public setValue(val: any) { - // todo: validate - this.index = val; - } - - public clone(): Property { - const prop = new EnumProperty( - this.name, - this.displayName, - this.values.slice(0) - ); - prop.index = this.index; - - return prop; - } - - public copyValuesFrom(prop: EnumProperty) { - this.values = prop.values; - this.index = prop.index; - } -} - -export class ColorProperty extends Property { - value: Color; - public constructor(name: string, displayName: string, value: Color) { - super(); - this.name = name; - this.displayName = displayName; - this.value = value; - this.type = PropertyType.Color; - } - - public getValue(): any { - return this.value; - } - - public setValue(val: any) { - // todo: validate - //console.log("got color: " + val); - if (val instanceof Color) this.value = val; - else if (typeof val == "string") this.value = Color.parse(val); - else if (typeof val == "object") { - //console.log("setting value", val); - const value = new Color(); - value.r = val.r || 0; - value.g = val.g || 0; - value.b = val.b || 0; - value.a = val.a || 1.0; - - this.value = value; - } - } - - public clone(): Property { - const prop = new ColorProperty(this.name, this.displayName, this.value); - - return prop; - } - - public copyValuesFrom(prop: ColorProperty) { - this.setValue(prop.value); - } -} - -export class StringProperty extends Property { - value: string; - isMultiline: boolean; - public constructor( - name: string, - displayName: string, - value = "", - isMultiline = false - ) { - super(); - this.name = name; - this.displayName = displayName; - this.value = value; - this.type = PropertyType.String; - this.isMultiline = isMultiline; - } - - public getValue(): any { - return this.value; - } - - public setValue(val: any) { - // todo: validate - this.value = val; - } - - public clone(): Property { - const prop = new StringProperty(this.name, this.displayName, this.value); - - return prop; - } - - public copyValuesFrom(prop: StringProperty) { - this.value = prop.value; - } -} - -export class GradientProperty extends Property { - value: Gradient; - public constructor(name: string, displayName: string, value: Gradient) { - super(); - this.name = name; - this.displayName = displayName; - this.value = value; - this.type = PropertyType.Gradient; - } - - public getValue(): any { - return this.value; - } - - public setValue(val: any) { - //console.log("setting gradient value"); - this.value = Gradient.parse(val); - } - - public clone(): Property { - const prop = new GradientProperty( - this.name, - this.displayName, - this.value.clone() - ); - - return prop; - } - - public copyValuesFrom(prop: GradientProperty) { - //console.log("copy value from gradient"); - this.setValue(prop.value.clone()); - } -} - -export class ImageProperty extends Property { - value: Image; - public constructor(name: string, displayName: string, value: Image = null) { - super(); - this.name = name; - this.displayName = displayName; - this.value = value; - this.type = PropertyType.Image; - } - - public getValue(): any { - return this.value; - } - - // todo: pass callback for when value update is complete - public setValue(val: any, completeCallback: () => void = null) { - // todo: validate - if (val instanceof Image) { - this.value = val; - completeCallback(); - } else { - let image = Image.empty(); - image.deserialize(val, completeCallback); - this.value = image; - } - } - - public clone(): Property { - const prop = new ImageProperty( - this.name, - this.displayName, - this.value.clone() - ); - - return prop; - } - - public copyValuesFrom(prop: ImageProperty) { - this.value = prop.value.clone(); - } -} diff --git a/src/lib/designer/texturedataconverter.ts b/src/lib/designer/texturedataconverter.ts deleted file mode 100644 index b8d1d1a2..00000000 --- a/src/lib/designer/texturedataconverter.ts +++ /dev/null @@ -1,426 +0,0 @@ -import { - compileShader, - buildShaderProgram, - createTextureWithType, - TextureDataType -} from "./gl"; - -export enum TextureComponents { - RGBA = "RGBA", - RGB = "RGB", - R = "R", - G = "G", - B = "B", - A = "A" -} - -// to be used mainly to extract pixels from textures -// to the needed format for export -export class TextureDataConverter { - gl: WebGL2RenderingContext; - readFbo: WebGLFramebuffer; - shaderProgram: WebGLProgram; - texture: WebGLTexture; - - posBuffer: WebGLBuffer; - texCoordBuffer: WebGLBuffer; - - constructor(gl: WebGL2RenderingContext) { - this.gl = gl; - this.readFbo = this.gl.createFramebuffer(); - this.createVertexBuffers(); - this.buildShader(); - } - - getData( - sourceTexture: WebGLTexture, - width: number, - height: number, - dataType: TextureDataType, - components: TextureComponents = TextureComponents.RGBA, - flipY: boolean = false - ): ArrayBuffer { - const gl = this.gl; - - // create textures based on specified data type - this.texture = createTextureWithType(this.gl, dataType, width, height); - - // set fbo and bind newly created texture - gl.bindFramebuffer(gl.FRAMEBUFFER, this.readFbo); - gl.activeTexture(gl.TEXTURE0); - - // NOTE: texture must be in the RGBA format - // spec doesn't mandate any other format being supported - // https://www.html5gamedevs.com/topic/38191-how-to-use-webgl2-rgb-texture-format/ - gl.framebufferTexture2D( - gl.FRAMEBUFFER, - gl.COLOR_ATTACHMENT0, - gl.TEXTURE_2D, - this.texture, - 0 - ); - - gl.viewport(0, 0, width, height); - gl.disable(gl.DEPTH_TEST); - gl.clearColor(0, 0, 0, 1); - gl.clear(gl.COLOR_BUFFER_BIT); - - // bind shader - gl.useProgram(this.shaderProgram); - - // clear all inputs - gl.activeTexture(gl.TEXTURE0); - gl.bindTexture(gl.TEXTURE_2D, sourceTexture); - - gl.uniform1i(gl.getUniformLocation(this.shaderProgram, "tex"), 0); - - gl.uniform1i( - gl.getUniformLocation(this.shaderProgram, "flipY"), - flipY ? 1 : 0 - ); - - // determine which channels the source comes from - // 0 - all - // 1 - red - // 2 - green - // 3 - blue - // 4 - alpha - let outputChannel: number = 0; - - switch (components) { - case TextureComponents.R: - outputChannel = 1; - break; - case TextureComponents.G: - outputChannel = 2; - break; - case TextureComponents.B: - outputChannel = 3; - break; - case TextureComponents.A: - outputChannel = 4; - break; - } - - gl.uniform1i( - gl.getUniformLocation(this.shaderProgram, "channel"), - outputChannel - ); - - // render texure to fbo - const posLoc = gl.getAttribLocation(this.shaderProgram, "a_pos"); - const texCoordLoc = gl.getAttribLocation(this.shaderProgram, "a_texCoord"); - - // provide texture coordinates for the rectangle. - gl.bindBuffer(gl.ARRAY_BUFFER, this.posBuffer); - gl.enableVertexAttribArray(posLoc); - gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 0, 0); - - gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer); - gl.enableVertexAttribArray(texCoordLoc); - gl.vertexAttribPointer(texCoordLoc, 2, gl.FLOAT, false, 0, 0); - - gl.drawArrays(gl.TRIANGLES, 0, 6); - - gl.disableVertexAttribArray(posLoc); - gl.disableVertexAttribArray(texCoordLoc); - - // read back pixels - - let readDataType = gl.UNSIGNED_BYTE; - let arrayBufferView: ArrayBufferView = null; - let arrayBuffer: ArrayBuffer = null; - - let format: number = gl.RGBA; - let numComponents: number = 4; - - // commented this out since the format has to be - // RGBA. Any other format and WebGL throws an error - // switch (components) { - // case TextureComponents.RGBA: - // numComponents = 4; - // format = gl.RGBA; - // break; - // case TextureComponents.RGB: - // numComponents = 3; - // format = gl.RGB; - // break; - // case TextureComponents.R: - // case TextureComponents.G: - // case TextureComponents.B: - // case TextureComponents.A: - // numComponents = 1; - // format = gl.RED; - // break; - // } - - switch (dataType) { - case TextureDataType.Uint8: - readDataType = gl.UNSIGNED_BYTE; - arrayBuffer = new ArrayBuffer(width * height * numComponents * 1); - arrayBufferView = new Uint8Array(arrayBuffer); - break; - case TextureDataType.Uint16: - readDataType = gl.UNSIGNED_SHORT; - arrayBuffer = new ArrayBuffer(width * height * numComponents * 2); - arrayBufferView = new Uint16Array(arrayBuffer); - break; - case TextureDataType.Float16: - readDataType = gl.HALF_FLOAT; - arrayBuffer = new ArrayBuffer(width * height * numComponents * 2); - arrayBufferView = new Uint16Array(arrayBuffer); - break; - case TextureDataType.Float32: - readDataType = gl.FLOAT; - arrayBuffer = new ArrayBuffer(width * height * numComponents * 4); - arrayBufferView = new Float32Array(arrayBuffer); - break; - } - - if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE) { - gl.readPixels(0, 0, width, height, format, readDataType, arrayBufferView); - - // todo: check for errors in this operation - // gl.readPixels( - // 0, - // 0, - // this.designer.width, - // this.designer.height, - // gl.RGBA, - // gl.HALF_FLOAT, - // data - // ); - } else { - alert("getPixelData: unable to read from FBO"); - } - - // cleanup - gl.enable(gl.DEPTH_TEST); - gl.bindFramebuffer(gl.FRAMEBUFFER, null); - - // convert buffer to required format - // currently only supports uint8 and uint16 - - if (dataType === TextureDataType.Uint8) { - if (components === TextureComponents.RGB) { - arrayBuffer = rgbaToRgbUint8(arrayBuffer, width, height); - } else if ( - components === TextureComponents.R || - components === TextureComponents.G || - components === TextureComponents.B || - components === TextureComponents.A - ) { - arrayBuffer = rgbaToRUint8(arrayBuffer, width, height); - } - } else if (dataType === TextureDataType.Uint16) { - if (components === TextureComponents.RGB) { - arrayBuffer = rgbaToRgbUint16(arrayBuffer, width, height); - } - if ( - components === TextureComponents.R || - components === TextureComponents.G || - components === TextureComponents.B || - components === TextureComponents.A - ) { - arrayBuffer = rgbaToRUint16(arrayBuffer, width, height); - } - } - - return arrayBuffer; - } - - createVertexBuffers() { - const gl = this.gl; - //var texCoordLocation = gl.getAttribLocation(program, "a_texCoord"); - - // provide texture coordinates for the rectangle. - this.texCoordBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, this.texCoordBuffer); - gl.bufferData( - gl.ARRAY_BUFFER, - new Float32Array([ - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0, - 1.0, - 1.0, - 0.0, - 1.0, - 1.0 - ]), - gl.STATIC_DRAW - ); - //gl.enableVertexAttribArray(texCoordLocation); - //gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); - - this.posBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, this.posBuffer); - gl.bufferData( - gl.ARRAY_BUFFER, - new Float32Array([ - -1.0, - -1.0, - 0.0, - 1.0, - -1.0, - 0.0, - -1.0, - 1.0, - 0.0, - -1.0, - 1.0, - 0.0, - 1.0, - -1.0, - 0.0, - 1.0, - 1.0, - 0.0 - ]), - gl.STATIC_DRAW - ); - - gl.bindBuffer(gl.ARRAY_BUFFER, null); - } - - buildShader() { - const vertSource = `#version 300 es - precision highp float; - - in vec3 a_pos; - in vec2 a_texCoord; - - // the texCoords passed in from the vertex shader. - out vec2 v_texCoord; - - void main() { - gl_Position = vec4(a_pos,1.0); - v_texCoord = a_texCoord; - }`; - - // https://stackoverflow.com/questions/51101023/render-to-16bits-unsigned-integer-2d-texture-in-webgl2 - // https://stackoverflow.com/questions/27509285/how-to-render-to-a-unsigned-integer-format - let fragSource = `#version 300 es - precision highp float; - in vec2 v_texCoord; - - uniform sampler2D tex; - // uniform vec2 _textureSize; - uniform bool flipY; - - uniform int channel; - - // out uvec4 fragColor; - out vec4 fragColor; - - void main() { - vec2 texCoords = vec2(v_texCoord.x, flipY? 1.0 - v_texCoord.y:v_texCoord.y); - vec4 result = texture(tex, texCoords); - - // determine which channels to extract if any - switch(channel){ - // 0 - do nothing - - // red - case 1: - result = vec4(result.r); - break; - // green - case 2: - result = vec4(result.g); - break; - // blue - case 3: - result = vec4(result.b); - break; - // alpha - case 4: - result = vec4(result.a); - break; - } - - fragColor = result; - // fragColor = vec4(1.0, 0.0, 0.0, 1.0); - } - - `; - - this.shaderProgram = buildShaderProgram(this.gl, vertSource, fragSource); - } -} - -function rgbaToRgbUint8( - buffer: ArrayBuffer, - width: number, - height: number -): ArrayBuffer { - const totalPixels = width * height; - const numComponents = 3; - const inputArray: Uint8Array = new Uint8Array(buffer); - const outputArray: Uint8Array = new Uint8Array(totalPixels * numComponents); - - for (let i = 0; i < totalPixels; i++) { - outputArray[i * numComponents + 0] = inputArray[i * 4 + 0]; - outputArray[i * numComponents + 1] = inputArray[i * 4 + 1]; - outputArray[i * numComponents + 2] = inputArray[i * 4 + 2]; - } - - return outputArray.buffer; -} - -function rgbaToRUint8( - buffer: ArrayBuffer, - width: number, - height: number -): ArrayBuffer { - const totalPixels = width * height; - const numComponents = 1; - const inputArray: Uint8Array = new Uint8Array(buffer); - const outputArray: Uint8Array = new Uint8Array(totalPixels * numComponents); - - for (let i = 0; i < totalPixels; i++) { - outputArray[i * numComponents] = inputArray[i * 4]; - } - - return outputArray.buffer; -} - -function rgbaToRgbUint16( - buffer: ArrayBuffer, - width: number, - height: number -): ArrayBuffer { - const totalPixels = width * height; - const numComponents = 3; - const inputArray: Uint16Array = new Uint16Array(buffer); - const outputArray: Uint16Array = new Uint16Array(totalPixels * numComponents); - - for (let i = 0; i < totalPixels; i++) { - outputArray[i * numComponents + 0] = inputArray[i * 4 + 0]; - outputArray[i * numComponents + 1] = inputArray[i * 4 + 1]; - outputArray[i * numComponents + 2] = inputArray[i * 4 + 2]; - } - - return outputArray.buffer; -} - -function rgbaToRUint16( - buffer: ArrayBuffer, - width: number, - height: number -): ArrayBuffer { - const totalPixels = width * height; - const numComponents = 1; - const inputArray: Uint16Array = new Uint16Array(buffer); - const outputArray: Uint16Array = new Uint16Array(totalPixels * numComponents); - - for (let i = 0; i < totalPixels; i++) { - outputArray[i * numComponents] = inputArray[i * 4]; - } - - return outputArray.buffer; -} diff --git a/src/lib/editor.ts b/src/lib/editor.ts deleted file mode 100644 index 22541d6c..00000000 --- a/src/lib/editor.ts +++ /dev/null @@ -1,886 +0,0 @@ -//import * as scene from "./scene"; -import { Designer } from "./designer"; -import { DesignerNode } from "./designer/designernode"; -import { Property, PropertyType } from "./designer/properties"; -import { Guid } from "./utils"; -import { DesignerVariableType } from "./designer/designervariable"; -import { DesignerLibrary } from "./designer/library"; -import { NodeScene } from "./scene"; -import { ConnectionGraphicsItem } from "./scene/connectiongraphicsitem"; -import { NodeGraphicsItem } from "./scene/nodegraphicsitem"; -import { SocketType } from "./scene/socketgraphicsitem"; -import { ImageCanvas } from "./designer/imagecanvas"; - -import { - createLibrary, - createLibrary as createV1Library -} from "@/lib/library/libraryv1"; -import { createLibrary as createV2Library } from "@/lib/library/libraryv2"; -import { Color } from "./designer/color"; -import { CommentGraphicsItem } from "./scene/commentgraphicsitem"; -import { FrameGraphicsItem } from "./scene/framegraphicsitem"; -import { NavigationGraphicsItem } from "./scene/navigationgraphicsitem"; -import { ItemClipboard } from "./clipboard"; -import { UndoStack } from "./undostack"; -import { RemoveItemsAction } from "./actions/removeitemsaction"; - -function hexToRgb(hex) { - const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); - return result - ? { - r: parseInt(result[1], 16), - g: parseInt(result[2], 16), - b: parseInt(result[3], 16) - } - : null; -} - -function rgbToHex(r, g, b) { - return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); -} - -// stores the IDs for the display nodes -export class DisplayNodes { - public albedoNode: string; - public normalNode: string; - public roughnessNode: string; - public heightNode: string; - public metallicNode: string; - /* - public albedoCanvas : ImageCanvas = new ImageCanvas(); - public normalCanvas : ImageCanvas = new ImageCanvas(); - public roughnessCanvas : ImageCanvas = new ImageCanvas(); - public heightCanvas : ImageCanvas = new ImageCanvas(); - public metallicCanvas : ImageCanvas = new ImageCanvas(); - - resize(width:number, height:number) - { - this.albedoCanvas.resize(width, height); - this.normalCanvas.resize(width, height); - this.roughnessCanvas.resize(width, height); - this.heightCanvas.resize(width, height); - this.metallicCanvas.resize(width, height); - } - */ -} - -export enum DisplayChannel { - Albedo, - Metallic, - Roughness, - Normal, - Height -} - -export class Editor { - static active: Editor; - - canvas: HTMLCanvasElement; - - library: DesignerLibrary; - graph: NodeScene; - designer: Designer; - selectedDesignerNode: DesignerNode; - - undoStack: UndoStack; - - preview2D: HTMLCanvasElement; - preview2DCtx: CanvasRenderingContext2D; - - scene3D: any; // todo: set a type - - // propGen: PropertyGenerator; - // varGen: VariableGenerator; - displayNodes: DisplayNodes; - - onnodeselected?: (item: DesignerNode) => void; - oncommentselected?: (item: CommentGraphicsItem) => void; - onframeselected?: (item: FrameGraphicsItem) => void; - onnavigationselected?: (item: NavigationGraphicsItem) => void; - onpreviewnode?: (item: DesignerNode, image: HTMLCanvasElement) => void; - onlibrarymenu?: () => void; - - textureChannels: Map = new Map(); - ontexturechannelcleared?: ( - imageCanvas: ImageCanvas, - channelName: string - ) => void; - ontexturechannelassigned?: ( - imageCanvas: ImageCanvas, - channelName: string - ) => void; - ontexturechannelupdated?: ( - imageCanvas: ImageCanvas, - channelName: string - ) => void; - onnodetextureupdated?: (node: DesignerNode, timeInMs: number) => void; - - constructor() { - this.displayNodes = new DisplayNodes(); - this.selectedDesignerNode = null; - this.undoStack = new UndoStack(); - } - - getImageWidth() { - return this.designer.width; - } - - getImageHeight() { - return this.designer.height; - } - - assignNodeToTextureChannel(nodeId: string, channelName: string) { - // only one node can be assigned to a channel - if ( - this.textureChannels.has(channelName) && - this.textureChannels.get(channelName) - ) { - // remove label from node view - const oldNode = this.textureChannels.get(channelName); - const nodeView = this.graph.getNodeById(oldNode.id); - nodeView.clearTextureChannel(); - //this.textureChannels[channelName] = null; - this.textureChannels.delete(channelName); - - if (this.ontexturechannelcleared) { - this.ontexturechannelcleared(null, channelName); - } - } - - const nodeView = this.graph.getNodeById(nodeId); - nodeView.setTextureChannel(channelName); - - const newNode = this.designer.getNodeById(nodeId); - this.textureChannels.set(channelName, newNode); - - // notify 3d view - if (this.ontexturechannelcleared) { - this.ontexturechannelassigned(nodeView.imageCanvas, channelName); - } - } - - clearTextureChannel(nodeId: string) { - // eval which channel has this node assigned - for (const channelName of this.textureChannels.keys()) { - const node = this.textureChannels.get(channelName); - - if (node.id == nodeId) { - const oldNode = this.textureChannels.get(channelName); - const nodeView = this.graph.getNodeById(oldNode.id); - - // if this function is called when a node is deleted - // nodeView will be null - if (nodeView) nodeView.clearTextureChannel(); - - this.textureChannels.delete(channelName); - - if (this.ontexturechannelcleared) { - this.ontexturechannelcleared(null, channelName); - } - } - } - - // only one node can be assigned to a channel - // if (this.textureChannels.hasOwnProperty(channelName)) { - // // remove label from node view - // let oldNode = this.textureChannels[channelName] as DesignerNode; - // let nodeView = this.graph.getNodeById(oldNode.id); - // nodeView.clearTextureChannel(); - // this.textureChannels[channelName] = null; - - // if (this.ontexturechannelcleared) { - // this.ontexturechannelcleared(oldNode, channelName); - // } - // } - } - - hasTextureChannel(channelName: string) { - return this.textureChannels.has(channelName); - } - - clearTextureChannels() { - for (const channelName of this.textureChannels.keys()) { - const node = this.textureChannels.get(channelName); - - this.clearTextureChannel(node.id); - } - } - - getChannelCanvasImage(channelName: string) { - if (this.hasTextureChannel(channelName)) { - //console.log(this.textureChannels[channelName]); - const dnodeId = this.textureChannels.get(channelName).id; - const nodeView = this.graph.getNodeById(dnodeId); - //console.log(nodeView) - //console.log(this.graph) - return nodeView.imageCanvas; - } - - return null; - } - - /* - constructor(canvas:HTMLCanvasElement, preview2D:HTMLCanvasElement, propHolder : HTMLElement, varHolder : HTMLElement, scene3D:any) - { - this.canvas = canvas; - - this.displayNodes = new DisplayNodes(); - - this.preview2D = preview2D; - this.preview2DCtx = preview2D.getContext("2d"); - - this.scene3D = scene3D; - this.selectedDesignerNode = null; - - this.propGen = new PropertyGenerator(this, propHolder); - this.varGen = new VariableGenerator(this, varHolder); - - - //this.setDesigner(new Designer()); - //this.setScene(new NodeScene(canvas)); - } - */ - - undo() { - this.undoStack.undo(); - } - - redo() { - this.undoStack.redo(); - } - - // creates new texture - // requires canvas to be already set - createNewTexture() { - this.clearTextureChannels(); - - this.library = createV2Library(); - this.setDesigner(new Designer()); - this.setScene(new NodeScene(this.canvas)); - - this.setupDefaultScene(); - } - - setupDefaultScene() { - const offset = 100; - const spacing = 150; - - // albedo - let node = this.library.create("output"); - let nodeView = this.addNode(node, 0, 0); - // figure out why this doesnt work before adding addNode: - node.setProperty("name", "albedo"); - node.setProperty("color", new Color(1, 1, 1, 1)); - node.setProperty("components", 0); - nodeView.setCenter(800, offset + spacing * 0); - this.assignNodeToTextureChannel(nodeView.id, "albedo"); - - // normal - node = this.library.create("output"); - nodeView = this.addNode(node, 0, 0); - node.setProperty("name", "normal"); - node.setProperty("color", new Color(0.5, 0.5, 1, 1)); - node.setProperty("components", 1); - nodeView.setCenter(800, offset + spacing * 1); - this.assignNodeToTextureChannel(nodeView.id, "normal"); - const normalId = node.id; - - // normal map - node = this.library.create("normalmap"); - nodeView = this.addNode(node, 0, 0); - nodeView.setCenter(600, offset + spacing * 1); - - this.graph.createConnection(node.id, normalId, 0); - - // roughness - node = this.library.create("output"); - nodeView = this.addNode(node, 0, 0); - node.setProperty("name", "roughness"); - node.setProperty("color", new Color(0.5, 0.5, 0.5, 1)); - node.setProperty("components", 2); - node.setProperty("precision", 1); - nodeView.setCenter(800, offset + spacing * 2); - this.assignNodeToTextureChannel(nodeView.id, "roughness"); - - // metalness - node = this.library.create("output"); - nodeView = this.addNode(node, 0, 0); - node.setProperty("name", "metalness"); - node.setProperty("color", new Color(0, 0, 0, 1)); - node.setProperty("components", 2); - node.setProperty("precision", 1); - nodeView.setCenter(800, offset + spacing * 3); - this.assignNodeToTextureChannel(nodeView.id, "metalness"); - - // height - node = this.library.create("output"); - nodeView = this.addNode(node, 0, 0); - node.setProperty("name", "height"); - node.setProperty("color", new Color(0, 0, 0, 1)); - node.setProperty("components", 2); - node.setProperty("precision", 1); - nodeView.setCenter(800, offset + spacing * 4); - this.assignNodeToTextureChannel(nodeView.id, "height"); - - // refresh everything - this.designer.invalidateAllNodes(); - } - - set2DPreview(preview2D: HTMLCanvasElement) { - this.preview2D = preview2D; - this.preview2DCtx = preview2D.getContext("2d"); - } - - setSceneCanvas(canvas: HTMLCanvasElement) { - this.canvas = canvas; - this.setScene(new NodeScene(canvas)); - } - - resizeScene(width: number, height: number) { - this.canvas.width = width; - this.canvas.height = height; - } - - set3DScene(scene3D: any) { - this.scene3D = scene3D; - } - - setDesigner(designer: Designer) { - this.designer = designer; - const self = this; - - designer.onnodetextureupdated = function(dnode, dtInMs) { - const graphNode = self.graph.getNodeById(dnode.id); - if (!graphNode) return; // node could have been deleted - - graphNode.processingTime = dtInMs; - - self.designer.copyNodeTextureToImageCanvas(dnode, graphNode.imageCanvas); - - if (self.onpreviewnode) { - if (dnode == self.selectedDesignerNode) - self.onpreviewnode(dnode, graphNode.imageCanvas.canvas); - } - - if (self.onnodetextureupdated) self.onnodetextureupdated(dnode, dtInMs); - - if (self.ontexturechannelupdated && graphNode.textureChannel) { - self.ontexturechannelupdated( - graphNode.imageCanvas, - graphNode.textureChannel - ); - } - // if(node == self.selectedDesignerNode) { - // requestAnimationFrame(function(){ - // self.preview2DCtx.clearRect(0,0,self.preview2D.width, self.preview2D.height); - // self.preview2DCtx.drawImage(graphNode.imageCanvas.canvas, - // 0,0, - // self.preview2D.width, self.preview2D.height); - // }); - // } - - self.updateDisplayNode(graphNode); - }; - - designer.onnodetimeupdated = function(dnode, dtInMs) { - const graphNode = self.graph.getNodeById(dnode.id); - if (!graphNode) return; // node could have been deleted - - graphNode.processingTime = dtInMs; - }; - - /* - designer.onthumbnailgenerated = function(node, thumb) { - console.log(self.selectedDesignerNode); - console.log("onthumbnailgenerated generated for: "+node.title); - // refresh right node image - var graphNode = self.graph.getNodeById(node.id); - graphNode.setThumbnail(thumb); - self.updateDisplayNode(graphNode); - - if(node == self.selectedDesignerNode) { - requestAnimationFrame(function(){ - self.preview2DCtx.clearRect(0,0,self.preview2D.width, self.preview2D.height); - self.preview2DCtx.drawImage(thumb, - 0,0, - self.preview2D.width, self.preview2D.height); - }); - - - } - } - */ - - //if (this.varGen) this.varGen.setDesigner(designer); - //this.propGen.setDesigner(designer); - } - - setScene(scene: NodeScene) { - // cleanup previous graph - if (this.graph) this.graph.dispose(); - - // this.undoStack = new UndoStack(); - this.undoStack.clear(); - - // this shouldnt be here - // assignment of current undo redo stack should be controlled - // by App - // UndoStack.current = this.undoStack; - - this.graph = scene; - - const self = this; - this.graph.onconnectioncreated = function(con: ConnectionGraphicsItem) { - // get node from graph - const leftNode = con.socketA.node; - const rightNode = con.socketB.node; - - // get node from designer and connect them - const leftDNode = self.designer.getNodeById(leftNode.id); - const rightDNode = self.designer.getNodeById(rightNode.id); - - // make connection - // switch from `title` to `name` - self.designer.addConnection(leftDNode, rightDNode, con.socketB.title); - - // refresh right node image - //var thumb = self.designer.generateImageFromNode(rightDNode); - //rightNode.setThumbnail(thumb); - }; - - this.graph.onconnectiondestroyed = function(con: ConnectionGraphicsItem) { - // get node from graph - const leftNode = con.socketA.node; - const rightNode = con.socketB.node; - - // get node from designer and connect them - const leftDNode = self.designer.getNodeById(leftNode.id); - const rightDNode = self.designer.getNodeById(rightNode.id); - - // remove connection - // switch from `title` to `name` - self.designer.removeConnection(leftDNode, rightDNode, con.socketB.title); - - // clear right node image - rightNode.setThumbnail(null); - }; - - this.graph.onnodeselected = function(node: NodeGraphicsItem) { - if (node != null) { - var dnode = self.designer.getNodeById(node.id); - self.selectedDesignerNode = dnode; - //console.log(dnode); - - if (self.preview2DCtx) { - self.preview2DCtx.drawImage( - node.imageCanvas.canvas, - 0, - 0, - self.preview2D.width, - self.preview2D.height - ); - } - - // todo: move to double click - if (self.onpreviewnode) { - self.onpreviewnode(dnode, node.imageCanvas.canvas); - } - - //console.log(this.scene3D); - if (self.scene3D) { - //console.log("setting height texture"); - //self.scene3D.setHeightTexture(node.thumbnail); - self.updateDisplayNode(node); - } - } - - if (self.onnodeselected) self.onnodeselected(dnode); - }; - - this.graph.oncommentselected = function(item: CommentGraphicsItem) { - if (self.oncommentselected) self.oncommentselected(item); - }; - - this.graph.onframeselected = function(item: FrameGraphicsItem) { - if (self.onframeselected) self.onframeselected(item); - }; - - this.graph.onnavigationselected = function(item: NavigationGraphicsItem) { - if (self.onnavigationselected) self.onnavigationselected(item); - }; - - this.graph.onnodedeleted = function(node: NodeGraphicsItem) { - // remove node from channels - //console.log(self); - self.clearTextureChannel(node.id); - - self.designer.removeNode(node.id); - - if (self.onpreviewnode) { - self.onpreviewnode(null, null); - } - }; - - this.graph.onitemsdeleting = function( - frames: FrameGraphicsItem[], - comments: CommentGraphicsItem[], - navs: NavigationGraphicsItem[], - cons: ConnectionGraphicsItem[], - nodes: NodeGraphicsItem[] - ) { - const dnodes: DesignerNode[] = []; - for (const node of nodes) { - const dnode = self.designer.getNodeById(node.id); - - // should never happen! - if (dnode == null) throw "Node with id " + dnode.id + " doesnt exist!!"; - - dnodes.push(dnode); - } - - const action = new RemoveItemsAction( - self, - self.graph, - self.designer, - frames, - comments, - navs, - cons, - nodes, - dnodes - ); - UndoStack.current.push(action); - }; - - this.graph.onitemsdeleted = function( - frames: FrameGraphicsItem[], - comments: CommentGraphicsItem[], - navs: NavigationGraphicsItem[], - cons: ConnectionGraphicsItem[], - nodes: NodeGraphicsItem[] - ) { - if (self.onpreviewnode) { - self.onpreviewnode(null, null); - } - }; - - this.graph.oncopy = function(evt: ClipboardEvent) { - self.executeCopy(evt); - }; - - this.graph.oncut = function(evt: ClipboardEvent) { - self.executeCut(evt); - }; - - this.graph.onpaste = function(evt: ClipboardEvent) { - self.executePaste(evt); - }; - - this.graph.onlibrarymenu = function() { - if (self.onlibrarymenu != null) { - self.onlibrarymenu(); - } - }; - - // property changes - /* - this.propGen.onnodepropertychanged = function(dnode:DesignerNode, prop:Property) { - //var node = self.graph.getNodeById(node.id); - //self.graph.refreshNode() - - // todo: do this properly - var thumb = self.designer.generateImageFromNode(dnode); - var node = self.graph.getNodeById(dnode.id); - node.thumbnail = thumb; - - //console.log(node.thumbnail); - requestAnimationFrame(function(){ - self.preview2DCtx.clearRect(0,0,self.preview2D.width, self.preview2D.height); - self.preview2DCtx.drawImage(thumb, - 0,0, - self.preview2D.width, self.preview2D.height); - }); - - // just a stest - //self.scene3D.setHeightTexture(node.thumbnail); - self.updateDisplayNode(node); - } - */ - } - - executeCopy(evt: ClipboardEvent) { - ItemClipboard.copyItems( - this.designer, - this.library, - this.graph, - evt.clipboardData - ); - } - - executeCut(evt: ClipboardEvent) { - ItemClipboard.copyItems( - this.designer, - this.library, - this.graph, - evt.clipboardData - ); - } - - executePaste(evt: ClipboardEvent) { - ItemClipboard.pasteItems( - this.designer, - this.library, - this.graph, - evt.clipboardData - ); - } - - // adds node - // x and y are screen space - addNode(dNode: DesignerNode, screenX = 0, screenY = 0): NodeGraphicsItem { - // must add to designer first - this.designer.addNode(dNode); - - // create node from designer - const node = new NodeGraphicsItem(dNode.title); - for (const input of dNode.getInputs()) { - node.addSocket(input, input, SocketType.In); - } - node.addSocket("output", "output", SocketType.Out); - this.graph.addNode(node); - node.id = dNode.id; - - // generate thumbnail - const thumb = this.designer.generateImageFromNode(dNode); - node.setThumbnail(thumb); - - const pos = this.graph.view.canvasToSceneXY(screenX, screenY); - node.setCenter(pos.x, pos.y); - - return node; - } - - createComment(): CommentGraphicsItem { - const comment = new CommentGraphicsItem(this.graph.view); - const pos = this.graph.view.sceneCenter; - comment.setCenter(pos.x, pos.y); - - this.graph.addComment(comment); - - return comment; - } - - createFrame(): FrameGraphicsItem { - const frame = new FrameGraphicsItem(this.graph.view); - const pos = this.graph.view.sceneCenter; - frame.setCenter(pos.x, pos.y); - - this.graph.addFrame(frame); - - return frame; - } - - createNavigation(): NavigationGraphicsItem { - const nav = new NavigationGraphicsItem(); - const pos = this.graph.view.sceneCenter; - nav.setCenter(pos.x, pos.y); - - this.graph.addNavigation(nav); - - return nav; - } - - // DISPLAY NODE FUNCTIONS - - // updates appropriate image if set - updateDisplayNode(node: NodeGraphicsItem) { - if (!this.scene3D) return; - - //console.log(node.id); - //console.log(this.displayNodes.normalNode); - - // TODO: create custom CanvasImage that resizes with - // the texture size. NodeGraphicsItem's CanvasImage is fixed - // to 1024x1024. Another option is to give each DesignerNode a - // CanvasImage that updates when its texture updates then pass - // it to NodeGraphicsitem. That way it gets used one place and - // gets updated everywhere else all at once. - if (node.id == this.displayNodes.albedoNode) { - //this.scene3D.setAlbedoTexture(node.thumbnail); - this.scene3D.setAlbedoCanvasTexture(node.imageCanvas.canvas); - } - - if (node.id == this.displayNodes.metallicNode) { - //this.scene3D.setMetallicTexture(node.thumbnail); - this.scene3D.setMetallicCanvasTexture(node.imageCanvas.canvas); - } - - if (node.id == this.displayNodes.normalNode) { - //this.scene3D.setNormalTexture(node.thumbnail); - this.scene3D.setNormalCanvasTexture(node.imageCanvas.canvas); - } - - if (node.id == this.displayNodes.roughnessNode) { - //this.scene3D.setRoughnessTexture(node.thumbnail); - this.scene3D.setRoughnessCanvasTexture(node.imageCanvas.canvas); - } - - if (node.id == this.displayNodes.heightNode) { - //this.scene3D.setHeightTexture(node.thumbnail); - this.scene3D.setHeightCanvasTexture(node.imageCanvas.canvas); - } - } - - setDisplayChannelNode(channel: DisplayChannel, nodeId: string) { - const node = this.graph.getNodeById(nodeId); - if (channel == DisplayChannel.Albedo) { - this.displayNodes.albedoNode = nodeId; - } - if (channel == DisplayChannel.Metallic) { - this.displayNodes.metallicNode = nodeId; - } - if (channel == DisplayChannel.Normal) { - this.displayNodes.normalNode = nodeId; - } - if (channel == DisplayChannel.Roughness) { - this.displayNodes.roughnessNode = nodeId; - } - if (channel == DisplayChannel.Height) { - this.displayNodes.heightNode = nodeId; - } - - this.updateDisplayNode(node); - } - - exposeVariable(node: DesignerNode, prop: Property, varDisplayName: string) { - // create new variable - const varName = Guid.newGuid(); - const dvar = this.designer.addVariable( - varName, - varDisplayName, - this.evalDesignerVariableType(prop) - ); - // copy over important props - // todo:make more elegant - dvar.property = prop.clone(); - dvar.property.name = varName; - dvar.property.displayName = varDisplayName; - - // add it to scene and bind prop - this.designer.mapNodePropertyToVariable(varName, node, prop.name); - - // copy property props - - // refresh var ui - // this.varGen.refreshUi(); - } - - evalDesignerVariableType(prop: Property): DesignerVariableType { - if (prop.type == PropertyType.Float) { - return DesignerVariableType.Float; - } else if (prop.type == PropertyType.Int) { - return DesignerVariableType.Int; - } else if (prop.type == PropertyType.Bool) { - return DesignerVariableType.Bool; - } else if (prop.type == PropertyType.Enum) { - return DesignerVariableType.Enum; - } else if (prop.type == PropertyType.Color) { - return DesignerVariableType.Color; - } else { - console.log("error: invalid property type for variable", prop); - } - - return null; - } - - update() { - if (this.designer) this.designer.update(); - } - - draw() { - if (this.graph) this.graph.draw(); - } - - load(data: any) { - // clear texture channels - this.clearTextureChannels(); - - let library; - if (!data["libraryVersion"]) { - library = createV2Library(); - } else { - let libVer = data["libraryVersion"]; - if (libVer === "v0") library = createLibrary(); - if (libVer === "v1") - // silently load v1 textures as v2 - library = createV2Library(); - else if (libVer === "v2") library = createV2Library(); - else - console.error( - `Invalid library version ${libVer}, project might not load properly` - ); - } - // load scene - const d = Designer.load(data, library); - // copy over relevant props - if (this.designer) d.setUpdateMode(this.designer.updateMode); - - // load graph - const g = NodeScene.load(d, data["scene"], this.canvas); - - //todo: properly destroy existing graph - - //this.designer = d; - //this.graph = g; - this.library = library; - this.setDesigner(d); - this.setScene(g); - - // assign each node to it's texture channel - // it's expected at this point that the 3d preview should already - // have the texturechannel callbacks assigned - - // load editor data - if (data["editor"] != null) { - const e = data["editor"]; - // console.log("loading editor data"); - // console.log(e.displayNodes); - - // this.displayNodes.albedoNode = e.displayNodes.albedoNode; - // this.displayNodes.metallicNode = e.displayNodes.metallicNode; - // this.displayNodes.normalNode = e.displayNodes.normalNode; - // this.displayNodes.roughnessNode = e.displayNodes.roughnessNode; - // this.displayNodes.heightNode = e.displayNodes.heightNode; - - for (const channelName in e.textureChannels) { - if (!e.textureChannels.hasOwnProperty(channelName)) continue; - // console.log(e); - const node = this.graph.getNodeById(e.textureChannels[channelName]); - if (node) this.assignNodeToTextureChannel(node.id, channelName); - } - - //this.textureChannels = e.textureChannels || {}; - //console.log(this.textureChannels) - } - } - - save(): any { - const data = this.designer.save(); - data["scene"] = this.graph.save(); - - const textureChannels = {}; - for (const channelName of this.textureChannels.keys()) { - textureChannels[channelName] = this.textureChannels.get(channelName).id; - } - - data["editor"] = { - //displayNodes: this.displayNodes, - textureChannels: textureChannels - }; - - data["libraryVersion"] = this.library.getVersionName(); - //data["libraryVersion"] = "v1"; - - return data; - } -} diff --git a/src/lib/export/unityexporter.js b/src/lib/export/unityexporter.js deleted file mode 100644 index f8de194f..00000000 --- a/src/lib/export/unityexporter.js +++ /dev/null @@ -1,657 +0,0 @@ -/* -NOTES: -- _BumpMap is the normal map if then _NORMALMAP keyword is uses - the normal map needs to be inverted to work in unity -- _METALLICGLOSSMAP keyword means the gloss map is in the alpha channel of the metallic map - the gloss map is the inverse of the roughness map - both metallic and gloss maps have to be combined into a single texture - generate metallic of 0 if no metallic map is specified but a glossmap is -- _ParallaxMap is the height map and keyword _PARALLAXMAP is needed to enable it -*/ -import JSZip from "jszip"; - -const keyWords = "_METALLICGLOSSMAP _NORMALMAP"; - -const materialTemplate = `%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: {{name}} - m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: {{keywords}} - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: [] - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BumpMap: - {{normal_tex}} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 4, y: 4} - m_Offset: {x: 0, y: 0} - - _MainTex: - {{albedo_tex}} - - _MetallicGlossMap: - {{metallicgloss_tex}} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - - _BumpScale: 1 - - _Cutoff: 0.5 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _GlossMapScale: 1 - - _Glossiness: 0.5 - - _GlossyReflections: 1 - - _Metallic: 0 - - _Mode: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.02 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _UVSec: 0 - - _ZWrite: 1 - m_Colors: - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} -`; - -const materialMetaTemplate = `fileFormatVersion: 2 -guid: {{material_guid}} -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 2100000 - userData: - assetBundleName: - assetBundleVariant: -`; - -const textureMetaTemplate = `fileFormatVersion: 2 -guid: {{texture_guid}} -TextureImporter: - fileIDToRecycleName: {} - externalObjects: {} - serializedVersion: 5 - mipmaps: - mipMapMode: 0 - enableMipMap: 1 - sRGBTexture: 1 - linearTexture: 0 - fadeOut: 0 - borderMipMap: 0 - mipMapsPreserveCoverage: 0 - alphaTestReferenceValue: 0.5 - mipMapFadeDistanceStart: 1 - mipMapFadeDistanceEnd: 3 - bumpmap: - convertToNormalMap: 0 - externalNormalMap: 0 - heightScale: 0.25 - normalMapFilter: 0 - isReadable: 0 - grayScaleToAlpha: 0 - generateCubemap: 6 - cubemapConvolution: 0 - seamlessCubemap: 0 - textureFormat: 1 - maxTextureSize: 2048 - textureSettings: - serializedVersion: 2 - filterMode: -1 - aniso: 16 - mipBias: -1 - wrapU: -1 - wrapV: -1 - wrapW: -1 - nPOTScale: 1 - lightmap: 0 - compressionQuality: 50 - spriteMode: 0 - spriteExtrude: 1 - spriteMeshType: 1 - alignment: 0 - spritePivot: {x: 0.5, y: 0.5} - spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} - spriteGenerateFallbackPhysicsShape: 1 - alphaUsage: 1 - alphaIsTransparency: 0 - spriteTessellationDetail: -1 - textureType: {{type}} - textureShape: 1 - singleChannelComponent: 0 - maxTextureSizeSet: 0 - compressionQualitySet: 0 - textureFormatSet: 0 - platformSettings: - - serializedVersion: 2 - buildTarget: DefaultTexturePlatform - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Standalone - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: Android - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - - serializedVersion: 2 - buildTarget: WebGL - maxTextureSize: 2048 - resizeAlgorithm: 0 - textureFormat: -1 - textureCompression: 1 - compressionQuality: 50 - crunchedCompression: 0 - allowsAlphaSplitting: 0 - overridden: 0 - androidETC2FallbackOverride: 0 - spriteSheet: - serializedVersion: 2 - sprites: [] - outline: [] - physicsShape: [] - bones: [] - spriteID: - vertices: [] - indices: - edges: [] - weights: [] - spritePackingTag: - userData: - assetBundleName: - assetBundleVariant: -`; - -const TextureType = { - Default: 0, - NormalMap: 1 -}; - -const matNullTexTemp = `m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0}`; - -const matTexTemp = `m_Texture: {fileID: 2800000, guid: {{guid}}, type: 3} - m_Scale: {x: {{repeatx}}, y: {{repeaty}}} - m_Offset: {x: 0, y: 0}`; - -const exporter = { - canvas: null, - gl: null, - posBuffer: null, - texCoordBuffer: null, - - // shaders - metalGlossProgram: null, - normalProgram: null -}; - -export function unityExport(editor, materialName) { - const zip = new JSZip(); - - // todo : filter name, might have illegal characters - //var materialName = saveData.name; - - const matData = { - name: materialName, - keywords: "", - albedo_tex: matNullTexTemp, - metallicgloss_tex: matNullTexTemp, - normal_tex: matNullTexTemp, - height_tex: matNullTexTemp - }; - - // write texture first - if (editor.hasTextureChannel("albedo")) { - const albedoGuid = newGuid(); - zip.file( - albedoGuid + "/asset", - canvasToBase64(editor.getChannelCanvasImage("albedo").canvas), - { base64: true } - ); - zip.file( - albedoGuid + "/asset.meta", - template(textureMetaTemplate, { - texture_guid: albedoGuid, - type: TextureType.Default - }) - ); - zip.file( - albedoGuid + "/pathname", - "Assets/" + materialName + "/Albedo.png" - ); - - matData.albedo_tex = template(matTexTemp, { - guid: albedoGuid, - repeatx: 1, - repeaty: 1 - }); - } - - if (editor.hasTextureChannel("normal")) { - const guid = newGuid(); - - const normalCanvas = editor.getChannelCanvasImage("normal"); - exporter.canvas.width = normalCanvas.width(); - exporter.canvas.height = normalCanvas.height(); - - fixNormalMap(exporter, normalCanvas.createTexture(exporter.gl)); - zip.file(guid + "/asset", canvasToBase64(exporter.canvas), { - base64: true - }); - zip.file( - guid + "/asset.meta", - template(textureMetaTemplate, { - texture_guid: guid, - type: TextureType.NormalMap - }) - ); - zip.file(guid + "/pathname", "Assets/" + materialName + "/Normal.png"); - - matData.normal_tex = template(matTexTemp, { - guid: guid, - repeatx: 1, - repeaty: 1 - }); - } - - if ( - editor.hasTextureChannel("metalness") || - editor.hasTextureChannel("roughness") - ) { - const guid = newGuid(); - - //var normalCanvas = viewer.normalCanvas; - // resize canvas - // todo: figure out how to derive canvas size - exporter.canvas.width = editor.getImageWidth(); - exporter.canvas.height = editor.getImageHeight(); - - let mTex = null; - if (editor.hasTextureChannel("metalness")) - mTex = editor - .getChannelCanvasImage("metalness") - .createTexture(exporter.gl); - - let rTex = null; - if (editor.hasTextureChannel("roughness")) - rTex = editor - .getChannelCanvasImage("roughness") - .createTexture(exporter.gl); - - generateMetallicGloss(exporter, mTex, rTex); - zip.file(guid + "/asset", canvasToBase64(exporter.canvas), { - base64: true - }); - zip.file( - guid + "/asset.meta", - template(textureMetaTemplate, { - texture_guid: guid, - type: TextureType.Default - }) - ); - zip.file( - guid + "/pathname", - "Assets/" + materialName + "/MetallicGloss.png" - ); - - matData.metallicgloss_tex = template(matTexTemp, { - guid: guid, - repeatx: 1, - repeaty: 1 - }); - } - - // NOTE: Unity has the metallic and glossy fields in one texture (glossiness being the alpha channel) - // glosiness is the inverse of the roughness map - - // write material last - const matGuid = newGuid(); - /* - zip.file(matGuid+"/asset",template(materialTemplate,{ - keywords:"", - albedo_guid:albedoGuid - })); - */ - zip.file(matGuid + "/asset", template(materialTemplate, matData)); - zip.file( - matGuid + "/asset.meta", - template(materialMetaTemplate, { material_guid: matGuid }) - ); - zip.file( - matGuid + "/pathname", - "Assets/" + materialName + "/" + materialName + ".mat" - ); - //zip.file(matGuid+"/asset","");//preview - zip.file(matGuid + "/asset", template(materialTemplate, matData)); - zip.file( - matGuid + "/asset.meta", - template(materialMetaTemplate, { material_guid: matGuid }) - ); - zip.file( - matGuid + "/pathname", - "Assets/" + materialName + "/" + materialName + ".mat" - ); - - return zip.generateAsync({ type: "nodebuffer" }); -} - -function newGuid() { - return "xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g, function(c) { - const r = (Math.random() * 16) | 0, - v = c == "x" ? r : (r & 0x3) | 0x8; - return v.toString(16); - }); -} - -function template(str, data) { - let res = str; - for (const name in data) { - res = res.replace("{{" + name + "}}", data[name]); - } - - return res; -} - -// merges metallic and inverted roughness map -// uses a metallic of 0 if no metallic map is provided -// sets glosiness to 0 by default -function generateMetallicGloss(exporter, mTex, rTex) { - renderToImage(exporter, exporter.metalGlossProgram, [ - { name: "u_metallicMap", tex: mTex }, - { name: "u_roughnessMap", tex: rTex } - ]); -} - -// inverts normal map -function fixNormalMap(exporter, tex) { - renderToImage(exporter, exporter.normalProgram, [ - { name: "u_normalMap", tex: tex } - ]); -} - -const DEFAULT_VERT = `precision mediump float; - - attribute vec3 a_pos; - attribute vec2 a_texCoord; - - // the texCoords passed in from the vertex shader. - varying vec2 v_texCoord; - - void main() { - gl_Position = vec4(a_pos,1.0); - v_texCoord = a_texCoord; - }`; - -const NORMAl_FRAG = `precision mediump float; - varying vec2 v_texCoord; - uniform sampler2D u_normalMap; - - void main() { - vec4 norm = texture2D(u_normalMap,vec2(v_texCoord.x, 1.0 - v_texCoord.y)); - norm.z = 1.0 - norm.z; - gl_FragColor = norm; - }`; - -const METALLICGLOSS_FRAG = `precision mediump float; - varying vec2 v_texCoord; - uniform sampler2D u_metallicMap; - uniform bool u_metallicMapEnabled; - uniform sampler2D u_roughnessMap; - uniform bool u_roughnessMapEnabled; - - void main() { - vec2 texCoord = vec2(v_texCoord.x, 1.0 - v_texCoord.y); - float metal = 0.0; - if (u_metallicMapEnabled) - metal = texture2D(u_metallicMap,texCoord).r; - - - float gloss = 0.0; - if (u_roughnessMapEnabled) - gloss = 1.0 - texture2D(u_roughnessMap,texCoord).r; - - gl_FragColor = vec4(vec3(metal), gloss); - }`; - -// creates canvas and context -// creates shaders for converting the the textures -function initGLAndResources(exporter) { - const canvas = document.createElement("canvas"); - const gl = canvas.getContext("webgl"); - - exporter.canvas = canvas; - exporter.gl = gl; - - exporter.metalGlossProgram = buildShaderProgram( - gl, - DEFAULT_VERT, - METALLICGLOSS_FRAG - ); - exporter.normalProgram = buildShaderProgram(gl, DEFAULT_VERT, NORMAl_FRAG); - - createVertexBuffers(exporter); -} - -function getShaderSource(id) { - const shaderScript = document.getElementById(id); - if (!shaderScript) { - return null; - } - - let str = ""; - let k = shaderScript.firstChild; - while (k) { - if (k.nodeType == 3) { - str += k.textContent; - } - k = k.nextSibling; - } - - return str; -} - -function compileShader(gl, source, shaderType) { - const shader = gl.createShader(shaderType); - - gl.shaderSource(shader, source); - gl.compileShader(shader); - - if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { - alert(gl.getShaderInfoLog(shader)); - return null; - } - - return shader; -} - -function buildShaderProgram(gl, vertSource, fragSource) { - const vertexShader = compileShader(gl, vertSource, gl.VERTEX_SHADER); - const fragmentShader = compileShader(gl, fragSource, gl.FRAGMENT_SHADER); - - const shaderProgram = gl.createProgram(); - gl.attachShader(shaderProgram, vertexShader); - gl.attachShader(shaderProgram, fragmentShader); - gl.linkProgram(shaderProgram); - - if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { - alert("Could not initialise shaders"); - } - - gl.useProgram(shaderProgram); - - return shaderProgram; -} - -//var texCoordBuffer = new WebGLBuffer; -//var posBuffer = new WebGLBuffer; - -// render quad using shader and texture inputs -// returns HtmlImageElement -function renderToImage(exporter, program, inputs) { - const gl = exporter.gl; - - gl.viewport(0, 0, exporter.canvas.width, exporter.canvas.height); - - // bind texture to fbo - //gl.clearColor(0,0,1,1); - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - - // bind shader - gl.useProgram(program); - - // pass textures - let texIndex = 0; - for (const i in inputs) { - const input = inputs[i]; - if (input.tex) { - gl.activeTexture(gl.TEXTURE0 + texIndex); - gl.bindTexture(gl.TEXTURE_2D, input.tex); - gl.uniform1i(gl.getUniformLocation(program, input.name), texIndex); - gl.uniform1i(gl.getUniformLocation(program, input.name + "Enabled"), 1); - } else { - gl.uniform1i(gl.getUniformLocation(program, input.name + "Enabled"), 0); - } - texIndex++; - } - - // bind mesh - const posLoc = gl.getAttribLocation(program, "a_pos"); - const texCoordLoc = gl.getAttribLocation(program, "a_texCoord"); - - // provide texture coordinates for the rectangle. - gl.bindBuffer(gl.ARRAY_BUFFER, exporter.posBuffer); - gl.enableVertexAttribArray(posLoc); - gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 0, 0); - - gl.bindBuffer(gl.ARRAY_BUFFER, exporter.texCoordBuffer); - gl.enableVertexAttribArray(texCoordLoc); - gl.vertexAttribPointer(texCoordLoc, 2, gl.FLOAT, false, 0, 0); - - gl.drawArrays(gl.TRIANGLES, 0, 6); - - gl.disableVertexAttribArray(posLoc); - gl.disableVertexAttribArray(texCoordLoc); -} - -function createVertexBuffers(exporter) { - const gl = exporter.gl; - - // provide texture coordinates for the rectangle. - const texCoordBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); - gl.bufferData( - gl.ARRAY_BUFFER, - new Float32Array([ - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0, - 1.0, - 1.0, - 0.0, - 1.0, - 1.0 - ]), - gl.STATIC_DRAW - ); - - const posBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer); - gl.bufferData( - gl.ARRAY_BUFFER, - new Float32Array([ - -1.0, - -1.0, - 0.0, - 1.0, - -1.0, - 0.0, - -1.0, - 1.0, - 0.0, - -1.0, - 1.0, - 0.0, - 1.0, - -1.0, - 0.0, - 1.0, - 1.0, - 0.0 - ]), - gl.STATIC_DRAW - ); - - gl.bindBuffer(gl.ARRAY_BUFFER, null); - - exporter.texCoordBuffer = texCoordBuffer; - exporter.posBuffer = posBuffer; -} - -function canvasToBase64(canvas) { - let data = canvas.toDataURL(); - // todo: maybe script header? - // https://code-examples.net/en/q/6f412f - data = data.replace(/^data:image\/(png|jpg);base64,/, ""); - return data; -} - -// todo: cleanup textures!! - -// initialize -initGLAndResources(exporter); diff --git a/src/lib/export/unityzipexporter.js b/src/lib/export/unityzipexporter.js deleted file mode 100644 index 8565ab4e..00000000 --- a/src/lib/export/unityzipexporter.js +++ /dev/null @@ -1,338 +0,0 @@ -/* -NOTES: -Unity's mettalic and gloss maps are in one texture. -*/ -import AdmZip from "adm-zip"; -import electron from "electron"; - -const TextureType = { - Default: 0, - NormalMap: 1 -}; - -const exporter = { - canvas: null, - gl: null, - posBuffer: null, - texCoordBuffer: null, - - // shaders - metalGlossProgram: null, - normalProgram: null -}; - -export async function unityZipExport(editor, materialName) { - const zip = new AdmZip(); - - // write albedo first - if (editor.hasTextureChannel("albedo")) { - zip.addFile( - "albedo.png", - canvasToBuffer(editor.getChannelCanvasImage("albedo").canvas) - ); - } - - if (editor.hasTextureChannel("normal")) { - const normalCanvas = editor.getChannelCanvasImage("normal"); - exporter.canvas.width = normalCanvas.width(); - exporter.canvas.height = normalCanvas.height(); - - fixNormalMap(exporter, normalCanvas.createTexture(exporter.gl)); - - zip.addFile("normal.png", canvasToBuffer(exporter.canvas)); - } - - if ( - editor.hasTextureChannel("metalness") || - editor.hasTextureChannel("roughness") - ) { - exporter.canvas.width = editor.getImageWidth(); - exporter.canvas.height = editor.getImageHeight(); - - let mTex = null; - if (editor.hasTextureChannel("metalness")) - mTex = editor - .getChannelCanvasImage("metalness") - .createTexture(exporter.gl); - - let rTex = null; - if (editor.hasTextureChannel("roughness")) - rTex = editor - .getChannelCanvasImage("roughness") - .createTexture(exporter.gl); - - generateMetallicGloss(exporter, mTex, rTex); - - zip.addFile("metallic_gloss.png", canvasToBuffer(exporter.canvas)); - } - - if (editor.hasTextureChannel("height")) { - zip.addFile( - "height.png", - canvasToBuffer(editor.getChannelCanvasImage("height").canvas) - ); - } - - return zip; -} - -// merges metallic and inverted roughness map -// uses a metallic of 0 if no metallic map is provided -// sets glosiness to 0 by default -function generateMetallicGloss(exporter, mTex, rTex) { - renderToImage(exporter, exporter.metalGlossProgram, [ - { name: "u_metallicMap", tex: mTex }, - { name: "u_roughnessMap", tex: rTex } - ]); -} - -// inverts normal map -function fixNormalMap(exporter, tex) { - renderToImage(exporter, exporter.normalProgram, [ - { name: "u_normalMap", tex: tex } - ]); -} - -const DEFAULT_VERT = `precision mediump float; - - attribute vec3 a_pos; - attribute vec2 a_texCoord; - - // the texCoords passed in from the vertex shader. - varying vec2 v_texCoord; - - void main() { - gl_Position = vec4(a_pos,1.0); - v_texCoord = a_texCoord; - }`; - -const NORMAl_FRAG = `precision mediump float; - varying vec2 v_texCoord; - uniform sampler2D u_normalMap; - - void main() { - vec4 norm = texture2D(u_normalMap,vec2(v_texCoord.x, 1.0 - v_texCoord.y)); - norm.z = 1.0 - norm.z; - gl_FragColor = norm; - }`; - -const METALLICGLOSS_FRAG = `precision mediump float; - varying vec2 v_texCoord; - uniform sampler2D u_metallicMap; - uniform bool u_metallicMapEnabled; - uniform sampler2D u_roughnessMap; - uniform bool u_roughnessMapEnabled; - - void main() { - vec2 texCoord = vec2(v_texCoord.x, 1.0 - v_texCoord.y); - float metal = 0.0; - if (u_metallicMapEnabled) - metal = texture2D(u_metallicMap,texCoord).r; - - - float gloss = 0.0; - if (u_roughnessMapEnabled) - gloss = 1.0 - texture2D(u_roughnessMap,texCoord).r; - - gl_FragColor = vec4(vec3(metal), gloss); - }`; - -// creates canvas and context -// creates shaders for converting the the textures -function initGLAndResources(exporter) { - const canvas = document.createElement("canvas"); - const gl = canvas.getContext("webgl"); - - exporter.canvas = canvas; - exporter.gl = gl; - - exporter.metalGlossProgram = buildShaderProgram( - gl, - DEFAULT_VERT, - METALLICGLOSS_FRAG - ); - exporter.normalProgram = buildShaderProgram(gl, DEFAULT_VERT, NORMAl_FRAG); - - createVertexBuffers(exporter); -} - -function getShaderSource(id) { - const shaderScript = document.getElementById(id); - if (!shaderScript) { - return null; - } - - let str = ""; - let k = shaderScript.firstChild; - while (k) { - if (k.nodeType == 3) { - str += k.textContent; - } - k = k.nextSibling; - } - - return str; -} - -function compileShader(gl, source, shaderType) { - const shader = gl.createShader(shaderType); - - gl.shaderSource(shader, source); - gl.compileShader(shader); - - if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { - alert(gl.getShaderInfoLog(shader)); - return null; - } - - return shader; -} - -function buildShaderProgram(gl, vertSource, fragSource) { - const vertexShader = compileShader(gl, vertSource, gl.VERTEX_SHADER); - const fragmentShader = compileShader(gl, fragSource, gl.FRAGMENT_SHADER); - - const shaderProgram = gl.createProgram(); - gl.attachShader(shaderProgram, vertexShader); - gl.attachShader(shaderProgram, fragmentShader); - gl.linkProgram(shaderProgram); - - if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { - alert("Could not initialise shaders"); - } - - gl.useProgram(shaderProgram); - - return shaderProgram; -} - -//var texCoordBuffer = new WebGLBuffer; -//var posBuffer = new WebGLBuffer; - -// render quad using shader and texture inputs -// returns HtmlImageElement -function renderToImage(exporter, program, inputs) { - const gl = exporter.gl; - - gl.viewport(0, 0, exporter.canvas.width, exporter.canvas.height); - - // bind texture to fbo - //gl.clearColor(0,0,1,1); - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - - // bind shader - gl.useProgram(program); - - // pass textures - let texIndex = 0; - for (const i in inputs) { - const input = inputs[i]; - if (input.tex) { - gl.activeTexture(gl.TEXTURE0 + texIndex); - gl.bindTexture(gl.TEXTURE_2D, input.tex); - gl.uniform1i(gl.getUniformLocation(program, input.name), texIndex); - gl.uniform1i(gl.getUniformLocation(program, input.name + "Enabled"), 1); - } else { - gl.uniform1i(gl.getUniformLocation(program, input.name + "Enabled"), 0); - } - texIndex++; - } - - // bind mesh - const posLoc = gl.getAttribLocation(program, "a_pos"); - const texCoordLoc = gl.getAttribLocation(program, "a_texCoord"); - - // provide texture coordinates for the rectangle. - gl.bindBuffer(gl.ARRAY_BUFFER, exporter.posBuffer); - gl.enableVertexAttribArray(posLoc); - gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 0, 0); - - gl.bindBuffer(gl.ARRAY_BUFFER, exporter.texCoordBuffer); - gl.enableVertexAttribArray(texCoordLoc); - gl.vertexAttribPointer(texCoordLoc, 2, gl.FLOAT, false, 0, 0); - - gl.drawArrays(gl.TRIANGLES, 0, 6); - - gl.disableVertexAttribArray(posLoc); - gl.disableVertexAttribArray(texCoordLoc); -} - -function createVertexBuffers(exporter) { - const gl = exporter.gl; - - // provide texture coordinates for the rectangle. - const texCoordBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); - gl.bufferData( - gl.ARRAY_BUFFER, - new Float32Array([ - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0, - 1.0, - 1.0, - 0.0, - 1.0, - 1.0 - ]), - gl.STATIC_DRAW - ); - - const posBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer); - gl.bufferData( - gl.ARRAY_BUFFER, - new Float32Array([ - -1.0, - -1.0, - 0.0, - 1.0, - -1.0, - 0.0, - -1.0, - 1.0, - 0.0, - -1.0, - 1.0, - 0.0, - 1.0, - -1.0, - 0.0, - 1.0, - 1.0, - 0.0 - ]), - gl.STATIC_DRAW - ); - - gl.bindBuffer(gl.ARRAY_BUFFER, null); - - exporter.texCoordBuffer = texCoordBuffer; - exporter.posBuffer = posBuffer; -} - -function canvasToBase64(canvas) { - let data = canvas.toDataURL(); - // todo: maybe script header? - // https://code-examples.net/en/q/6f412f - data = data.replace(/^data:image\/(png|jpg);base64,/, ""); - return data; -} - -function canvasToBuffer(canvas) { - // https://github.com/mattdesl/electron-canvas-to-buffer/blob/master/index.js - const url = canvas.toDataURL("image/png", 1); - const nativeImage = electron.nativeImage.createFromDataURL(url); - const buffer = nativeImage.toPNG(); - - return buffer; -} - -// todo: cleanup textures!! - -// initialize -initGLAndResources(exporter); diff --git a/src/lib/export/zipexporter.js b/src/lib/export/zipexporter.js deleted file mode 100644 index f605202e..00000000 --- a/src/lib/export/zipexporter.js +++ /dev/null @@ -1,302 +0,0 @@ -import AdmZip from "adm-zip"; -import electron from "electron"; - -const TextureType = { - Default: 0, - NormalMap: 1 -}; - -const exporter = { - canvas: null, - gl: null, - posBuffer: null, - texCoordBuffer: null, - - // shaders - metalGlossProgram: null, - normalProgram: null -}; - -export async function zipExport(editor, materialName) { - const zip = new AdmZip(); - - // write albedo first - // if (editor.hasTextureChannel("albedo")) { - // zip.addFile( - // "albedo.png", - // canvasToBuffer(editor.getChannelCanvasImage("albedo").canvas) - // ); - // } - - for (const channel in editor.textureChannels) { - if (editor.textureChannels.hasOwnProperty(channel)) { - zip.addFile( - channel + ".png", - canvasToBuffer(editor.getChannelCanvasImage(channel).canvas) - ); - } - } - - return zip; -} - -// merges metallic and inverted roughness map -// uses a metallic of 0 if no metallic map is provided -// sets glosiness to 0 by default -function generateMetallicGloss(exporter, mTex, rTex) { - renderToImage(exporter, exporter.metalGlossProgram, [ - { name: "u_metallicMap", tex: mTex }, - { name: "u_roughnessMap", tex: rTex } - ]); -} - -// inverts normal map -function fixNormalMap(exporter, tex) { - renderToImage(exporter, exporter.normalProgram, [ - { name: "u_normalMap", tex: tex } - ]); -} - -const DEFAULT_VERT = `precision mediump float; - - attribute vec3 a_pos; - attribute vec2 a_texCoord; - - // the texCoords passed in from the vertex shader. - varying vec2 v_texCoord; - - void main() { - gl_Position = vec4(a_pos,1.0); - v_texCoord = a_texCoord; - }`; - -const NORMAl_FRAG = `precision mediump float; - varying vec2 v_texCoord; - uniform sampler2D u_normalMap; - - void main() { - vec4 norm = texture2D(u_normalMap,vec2(v_texCoord.x, 1.0 - v_texCoord.y)); - norm.z = 1.0 - norm.z; - gl_FragColor = norm; - }`; - -const METALLICGLOSS_FRAG = `precision mediump float; - varying vec2 v_texCoord; - uniform sampler2D u_metallicMap; - uniform bool u_metallicMapEnabled; - uniform sampler2D u_roughnessMap; - uniform bool u_roughnessMapEnabled; - - void main() { - vec2 texCoord = vec2(v_texCoord.x, 1.0 - v_texCoord.y); - float metal = 0.0; - if (u_metallicMapEnabled) - metal = texture2D(u_metallicMap,texCoord).r; - - - float gloss = 0.0; - if (u_roughnessMapEnabled) - gloss = 1.0 - texture2D(u_roughnessMap,texCoord).r; - - gl_FragColor = vec4(vec3(metal), gloss); - }`; - -// creates canvas and context -// creates shaders for converting the the textures -function initGLAndResources(exporter) { - const canvas = document.createElement("canvas"); - const gl = canvas.getContext("webgl"); - - exporter.canvas = canvas; - exporter.gl = gl; - - exporter.metalGlossProgram = buildShaderProgram( - gl, - DEFAULT_VERT, - METALLICGLOSS_FRAG - ); - exporter.normalProgram = buildShaderProgram(gl, DEFAULT_VERT, NORMAl_FRAG); - - createVertexBuffers(exporter); -} - -function getShaderSource(id) { - const shaderScript = document.getElementById(id); - if (!shaderScript) { - return null; - } - - let str = ""; - let k = shaderScript.firstChild; - while (k) { - if (k.nodeType == 3) { - str += k.textContent; - } - k = k.nextSibling; - } - - return str; -} - -function compileShader(gl, source, shaderType) { - const shader = gl.createShader(shaderType); - - gl.shaderSource(shader, source); - gl.compileShader(shader); - - if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) { - alert(gl.getShaderInfoLog(shader)); - return null; - } - - return shader; -} - -function buildShaderProgram(gl, vertSource, fragSource) { - const vertexShader = compileShader(gl, vertSource, gl.VERTEX_SHADER); - const fragmentShader = compileShader(gl, fragSource, gl.FRAGMENT_SHADER); - - const shaderProgram = gl.createProgram(); - gl.attachShader(shaderProgram, vertexShader); - gl.attachShader(shaderProgram, fragmentShader); - gl.linkProgram(shaderProgram); - - if (!gl.getProgramParameter(shaderProgram, gl.LINK_STATUS)) { - alert("Could not initialise shaders"); - } - - gl.useProgram(shaderProgram); - - return shaderProgram; -} - -//var texCoordBuffer = new WebGLBuffer; -//var posBuffer = new WebGLBuffer; - -// render quad using shader and texture inputs -// returns HtmlImageElement -function renderToImage(exporter, program, inputs) { - const gl = exporter.gl; - - gl.viewport(0, 0, exporter.canvas.width, exporter.canvas.height); - - // bind texture to fbo - //gl.clearColor(0,0,1,1); - gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); - - // bind shader - gl.useProgram(program); - - // pass textures - let texIndex = 0; - for (const i in inputs) { - const input = inputs[i]; - if (input.tex) { - gl.activeTexture(gl.TEXTURE0 + texIndex); - gl.bindTexture(gl.TEXTURE_2D, input.tex); - gl.uniform1i(gl.getUniformLocation(program, input.name), texIndex); - gl.uniform1i(gl.getUniformLocation(program, input.name + "Enabled"), 1); - } else { - gl.uniform1i(gl.getUniformLocation(program, input.name + "Enabled"), 0); - } - texIndex++; - } - - // bind mesh - const posLoc = gl.getAttribLocation(program, "a_pos"); - const texCoordLoc = gl.getAttribLocation(program, "a_texCoord"); - - // provide texture coordinates for the rectangle. - gl.bindBuffer(gl.ARRAY_BUFFER, exporter.posBuffer); - gl.enableVertexAttribArray(posLoc); - gl.vertexAttribPointer(posLoc, 3, gl.FLOAT, false, 0, 0); - - gl.bindBuffer(gl.ARRAY_BUFFER, exporter.texCoordBuffer); - gl.enableVertexAttribArray(texCoordLoc); - gl.vertexAttribPointer(texCoordLoc, 2, gl.FLOAT, false, 0, 0); - - gl.drawArrays(gl.TRIANGLES, 0, 6); - - gl.disableVertexAttribArray(posLoc); - gl.disableVertexAttribArray(texCoordLoc); -} - -function createVertexBuffers(exporter) { - const gl = exporter.gl; - - // provide texture coordinates for the rectangle. - const texCoordBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); - gl.bufferData( - gl.ARRAY_BUFFER, - new Float32Array([ - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 1.0, - 0.0, - 1.0, - 1.0, - 0.0, - 1.0, - 1.0 - ]), - gl.STATIC_DRAW - ); - - const posBuffer = gl.createBuffer(); - gl.bindBuffer(gl.ARRAY_BUFFER, posBuffer); - gl.bufferData( - gl.ARRAY_BUFFER, - new Float32Array([ - -1.0, - -1.0, - 0.0, - 1.0, - -1.0, - 0.0, - -1.0, - 1.0, - 0.0, - -1.0, - 1.0, - 0.0, - 1.0, - -1.0, - 0.0, - 1.0, - 1.0, - 0.0 - ]), - gl.STATIC_DRAW - ); - - gl.bindBuffer(gl.ARRAY_BUFFER, null); - - exporter.texCoordBuffer = texCoordBuffer; - exporter.posBuffer = posBuffer; -} - -function canvasToBase64(canvas) { - let data = canvas.toDataURL(); - // todo: maybe script header? - // https://code-examples.net/en/q/6f412f - data = data.replace(/^data:image\/(png|jpg);base64,/, ""); - return data; -} - -function canvasToBuffer(canvas) { - // https://github.com/mattdesl/electron-canvas-to-buffer/blob/master/index.js - const url = canvas.toDataURL("image/png", 1); - const nativeImage = electron.nativeImage.createFromDataURL(url); - const buffer = nativeImage.toPNG(); - - return buffer; -} - -// todo: cleanup textures!! - -// initialize -initGLAndResources(exporter); diff --git a/src/lib/geometry/cylinder.ts b/src/lib/geometry/cylinder.ts deleted file mode 100644 index 9b10b364..00000000 --- a/src/lib/geometry/cylinder.ts +++ /dev/null @@ -1,218 +0,0 @@ -// snatched from three.js - -/** - * @author mrdoob / http://mrdoob.com/ - * @author Mugen87 / https://github.com/Mugen87 - * @author njbrown / https://twitter.com/njbrown - */ - -import { Geometry } from "three"; -import { BufferGeometry } from "three"; -import { Float32BufferAttribute } from "three"; -import { Vector3 } from "three"; -import { Vector2 } from "three"; - -class CylinderGeometry extends Geometry { - parameters = {}; - - constructor( - radiusTop?, - radiusBottom?, - height?, - radialSegments?, - heightSegments?, - openEnded?, - thetaStart?, - thetaLength? - ) { - super(); - - this.type = "CylinderGeometry"; - - this.parameters = { - radiusTop: radiusTop, - radiusBottom: radiusBottom, - height: height, - radialSegments: radialSegments, - heightSegments: heightSegments, - openEnded: openEnded, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - this.fromBufferGeometry( - new CylinderBufferGeometry( - radiusTop, - radiusBottom, - height, - radialSegments, - heightSegments, - openEnded, - thetaStart, - thetaLength - ) - ); - this.mergeVertices(); - } -} - -class CylinderBufferGeometry extends BufferGeometry { - parameters = {}; - constructor( - radiusTop?, - radiusBottom?, - height?, - radialSegments?, - heightSegments?, - openEnded?, - thetaStart?, - thetaLength? - ) { - super(); - - this.type = "CylinderBufferGeometry"; - - this.parameters = { - radiusTop: radiusTop, - radiusBottom: radiusBottom, - height: height, - radialSegments: radialSegments, - heightSegments: heightSegments, - openEnded: openEnded, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - const scope = this; - - radiusTop = radiusTop !== undefined ? radiusTop : 1; - radiusBottom = radiusBottom !== undefined ? radiusBottom : 1; - height = height || 1; - - radialSegments = Math.floor(radialSegments) || 8; - heightSegments = Math.floor(heightSegments) || 1; - - openEnded = openEnded !== undefined ? openEnded : false; - thetaStart = thetaStart !== undefined ? thetaStart : 0.0; - thetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2; - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // helper variables - - let index = 0; - const indexArray = []; - const halfHeight = height / 2; - let groupStart = 0; - - // generate geometry - - generateTorso(); - - // open-ended by default - // if (openEnded === false) { - // if (radiusTop > 0) generateCap(true); - // if (radiusBottom > 0) generateCap(false); - // } - - // build geometry - - this.setIndex(indices); - this.addAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.addAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.addAttribute("uv", new Float32BufferAttribute(uvs, 2)); - - function generateTorso() { - let x, y; - const normal = new Vector3(); - const vertex = new Vector3(); - - let groupCount = 0; - - // this will be used to calculate the normal - const slope = (radiusBottom - radiusTop) / height; - - // generate vertices, normals and uvs - - for (y = 0; y <= heightSegments; y++) { - const indexRow = []; - - const v = y / heightSegments; - - // calculate the radius of the current row - - const radius = v * (radiusBottom - radiusTop) + radiusTop; - - for (x = 0; x <= radialSegments; x++) { - const u = x / radialSegments; - - const theta = u * thetaLength + thetaStart; - - const sinTheta = Math.sin(theta); - const cosTheta = Math.cos(theta); - - // vertex - - vertex.x = radius * sinTheta; - vertex.y = -v * height + halfHeight; - vertex.z = radius * cosTheta; - vertices.push(vertex.x, vertex.y, vertex.z); - - // normal - - normal.set(sinTheta, slope, cosTheta).normalize(); - normals.push(normal.x, normal.y, normal.z); - - // uv - - uvs.push(u * 4, 1 - v); - - // save index of vertex in respective row - - indexRow.push(index++); - } - - // now save vertices of the row in our index array - - indexArray.push(indexRow); - } - - // generate indices - - for (x = 0; x < radialSegments; x++) { - for (y = 0; y < heightSegments; y++) { - // we use the index array to access the correct indices - - const a = indexArray[y][x]; - const b = indexArray[y + 1][x]; - const c = indexArray[y + 1][x + 1]; - const d = indexArray[y][x + 1]; - - // faces - - indices.push(a, b, d); - indices.push(b, c, d); - - // update group counter - - groupCount += 6; - } - } - - // add a group to the geometry. this will ensure multi material support - - scope.addGroup(groupStart, groupCount, 0); - - // calculate new start value for groups - - groupStart += groupCount; - } - } -} - -export { CylinderGeometry, CylinderBufferGeometry }; diff --git a/src/lib/geometry/plane.ts b/src/lib/geometry/plane.ts deleted file mode 100644 index a88b03f0..00000000 --- a/src/lib/geometry/plane.ts +++ /dev/null @@ -1,117 +0,0 @@ -/** - * @author mrdoob / http://mrdoob.com/ - * @author Mugen87 / https://github.com/Mugen87 - * @author njbrown / https://twitter.com/njbrown - */ - -import { Geometry } from "three"; -import { BufferGeometry } from "three"; -import { Float32BufferAttribute } from "three"; -import { Vector3 } from "three"; -import { Vector2 } from "three"; - -// PlaneGeometry (X, Z) - -class PlaneGeometry extends Geometry { - parameters = {}; - - constructor(width, height, widthSegments, heightSegments) { - super(); - this.type = "PlaneGeometry"; - - this.parameters = { - width: width, - height: height, - widthSegments: widthSegments, - heightSegments: heightSegments - }; - - this.fromBufferGeometry( - new PlaneBufferGeometry(width, height, widthSegments, heightSegments) - ); - this.mergeVertices(); - } -} - -// PlaneBufferGeometry - -class PlaneBufferGeometry extends BufferGeometry { - parameters = {}; - - constructor(width, height, widthSegments, heightSegments) { - super(); - - this.type = "PlaneBufferGeometry"; - - this.parameters = { - width: width, - height: height, - widthSegments: widthSegments, - heightSegments: heightSegments - }; - - width = width || 1; - height = height || 1; - - const width_half = width / 2; - const height_half = height / 2; - - const gridX = Math.floor(widthSegments) || 1; - const gridY = Math.floor(heightSegments) || 1; - - const gridX1 = gridX + 1; - const gridY1 = gridY + 1; - - const segment_width = width / gridX; - const segment_height = height / gridY; - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // generate vertices, normals and uvs - - for (let iy = 0; iy < gridY1; iy++) { - const y = iy * segment_height - height_half; - - for (let ix = 0; ix < gridX1; ix++) { - const x = ix * segment_width - width_half; - - vertices.push(x, 0, y); - - normals.push(0, 1, 0); - - uvs.push(ix / gridX); - uvs.push(1 - iy / gridY); - } - } - - // indices - - for (let iy = 0; iy < gridY; iy++) { - for (let ix = 0; ix < gridX; ix++) { - const a = ix + gridX1 * iy; - const b = ix + gridX1 * (iy + 1); - const c = ix + 1 + gridX1 * (iy + 1); - const d = ix + 1 + gridX1 * iy; - - // faces - - indices.push(a, b, d); - indices.push(b, c, d); - } - } - - // build geometry - - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - } -} - -export { PlaneGeometry, PlaneBufferGeometry }; diff --git a/src/lib/geometry/sphere.ts b/src/lib/geometry/sphere.ts deleted file mode 100644 index fb57f9b8..00000000 --- a/src/lib/geometry/sphere.ts +++ /dev/null @@ -1,183 +0,0 @@ -// snatched from threejs -/** - * @author mrdoob / http://mrdoob.com/ - * @author benaadams / https://twitter.com/ben_a_adams - * @author Mugen87 / https://github.com/Mugen87 - * @author njbrown / https://twitter.com/njbrown - */ - -import { Geometry } from "three"; -import { BufferGeometry } from "three"; -import { Float32BufferAttribute } from "three"; -import { Vector3 } from "three"; - -class SphereGeometry extends Geometry { - parameters = {}; - constructor( - radius?, - widthSegments?, - heightSegments?, - phiStart?, - phiLength?, - thetaStart?, - thetaLength? - ) { - super(); - - this.type = "SphereGeometry"; - - this.parameters = { - radius: radius, - widthSegments: widthSegments, - heightSegments: heightSegments, - phiStart: phiStart, - phiLength: phiLength, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - this.fromBufferGeometry( - new SphereBufferGeometry( - radius, - widthSegments, - heightSegments, - phiStart, - phiLength, - thetaStart, - thetaLength - ) - ); - //this.mergeVertices(); - } -} - -// SphereBufferGeometry - -class SphereBufferGeometry extends BufferGeometry { - parameters = {}; - constructor( - radius, - widthSegments, - heightSegments, - phiStart, - phiLength, - thetaStart, - thetaLength - ) { - super(); - - this.type = "SphereBufferGeometry"; - - this.parameters = { - radius: radius, - widthSegments: widthSegments, - heightSegments: heightSegments, - phiStart: phiStart, - phiLength: phiLength, - thetaStart: thetaStart, - thetaLength: thetaLength - }; - - radius = radius || 1; - - widthSegments = Math.max(3, Math.floor(widthSegments) || 8); - heightSegments = Math.max(2, Math.floor(heightSegments) || 6); - - phiStart = phiStart !== undefined ? phiStart : 0; - phiLength = phiLength !== undefined ? phiLength : Math.PI * 2; - - thetaStart = thetaStart !== undefined ? thetaStart : 0; - thetaLength = thetaLength !== undefined ? thetaLength : Math.PI; - - const thetaEnd = Math.min(thetaStart + thetaLength, Math.PI); - - let ix, iy; - - let index = 0; - const grid = []; - - const vertex = new Vector3(); - const normal = new Vector3(); - - // buffers - - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - - // generate vertices, normals and uvs - - for (iy = 0; iy <= heightSegments; iy++) { - const verticesRow = []; - - const v = iy / heightSegments; - - // special case for the poles - - let uOffset = 0; - - if (iy == 0 && thetaStart == 0) { - uOffset = 0.5 / widthSegments; - } else if (iy == heightSegments && thetaEnd == Math.PI) { - uOffset = -0.5 / widthSegments; - } - - for (ix = 0; ix <= widthSegments; ix++) { - const u = ix / widthSegments; - - // vertex - - vertex.x = - -radius * - Math.cos(phiStart + u * phiLength) * - Math.sin(thetaStart + v * thetaLength); - vertex.y = radius * Math.cos(thetaStart + v * thetaLength); - vertex.z = - radius * - Math.sin(phiStart + u * phiLength) * - Math.sin(thetaStart + v * thetaLength); - - vertices.push(vertex.x, vertex.y, vertex.z); - - // normal - - normal.copy(vertex).normalize(); - normals.push(normal.x, normal.y, normal.z); - - // uv - - uvs.push((u + uOffset) * 2, 1 - v); - - verticesRow.push(index++); - } - - grid.push(verticesRow); - } - - // indices - - for (iy = 0; iy < heightSegments; iy++) { - for (ix = 0; ix < widthSegments; ix++) { - const a = grid[iy][ix + 1]; - const b = grid[iy][ix]; - const c = grid[iy + 1][ix]; - const d = grid[iy + 1][ix + 1]; - - if (iy !== 0 || thetaStart > 0) indices.push(a, b, d); - if (iy !== heightSegments - 1 || thetaEnd < Math.PI) - indices.push(b, c, d); - } - } - - // build geometry - - this.setIndex(indices); - this.addAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.addAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.addAttribute("uv", new Float32BufferAttribute(uvs, 2)); - this.addAttribute("uv2", new Float32BufferAttribute(uvs, 2)); - } -} - -export { SphereGeometry, SphereBufferGeometry }; diff --git a/src/lib/library/libraryv0.ts b/src/lib/library/libraryv0.ts deleted file mode 100644 index 0b334bf8..00000000 --- a/src/lib/library/libraryv0.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { - TestShapeNode, - TestGradientNode, - TestSimplexNode, - TestWorleyNode, - TestMultiplyNode, - TestInvertNode, - TestNormalNode, - TestBrickNode, - TestWarpNode -} from "./v0/nodes"; - -import { DesignerLibrary } from "../designer/library"; - -export function createLibrary() { - const lib = new DesignerLibrary(); - lib.versionName = "v0"; - lib.addNode("shape", "Shape", TestShapeNode); - lib.addNode("gradient", "Gradient", TestGradientNode); - lib.addNode("multiply", "Multiply", TestMultiplyNode); - lib.addNode("invert", "Invert", TestInvertNode); - lib.addNode("worley", "Worley", TestWorleyNode); - lib.addNode("normal", "Normal", TestNormalNode); - lib.addNode("brick", "Brick", TestBrickNode); - lib.addNode("warp", "Warp", TestWarpNode); - lib.addNode("simplex", "Simpled Noise", TestSimplexNode); - - return lib; -} diff --git a/src/lib/library/libraryv1.ts b/src/lib/library/libraryv1.ts deleted file mode 100644 index 7e771d6a..00000000 --- a/src/lib/library/libraryv1.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { BrickGeneratorNode } from "./v1/brickgenerator"; -import { NormalMapNode, BetterWarpNode } from "./v1/normalmap"; -import { CellNode } from "./v1/cellnode"; -import { SolidCellNode } from "./v1/solidcell"; -import { LineCellNode } from "./v1/linecell"; -import { PolygonNode, CircleNode } from "./v1/shapes"; -import { BlendNode } from "./v1/blend"; -import { InvertNode } from "./v1/invert"; -import { WarpNode } from "./v1/warp"; -import { ColorNode, ColorizeNode } from "./v1/color"; -import { SimplexNoiseNode } from "./v1/simplexnoise"; -import { MaskNode } from "./v1/mask"; -import { Transform2DNode } from "./v1/transform2d"; -import { MapRangeNode } from "./v1/maprange"; -import { SplatNode } from "./v1/splat"; -import { Perlin3DNode } from "./v1/perlin3d"; -import { HexagonNode } from "./v1/hexagon"; -import { FractalNoiseNode } from "./v1/fractalnoise"; -import { TileNode } from "./v1/tile"; -import { ThresholdNode } from "./v1/threshold"; -import { HeightShiftNode } from "./v1/heightshift"; -import { CheckerBoardNode } from "./v1/checkerboard"; -import { DirectionalWarpNode } from "./v1/directionalwarp"; -import { MirrorNode } from "./v1/mirror"; -import { BrightnessContrastNode } from "./v1/brightnesscontrast"; -import { WaveNode } from "./v1/wave"; -import { CopyNode } from "./v1/copy"; -import { GradientNode, TriGradientNode } from "./v1/gradient"; -import { DesignerLibrary } from "../designer/library"; -import { OutputNode } from "./v1/output"; -import { GradientMapNode } from "./v1/gradientmap"; - -export function createLibrary() { - const lib = new DesignerLibrary(); - lib.versionName = "v1"; - lib.addNode("brickgenerator", "Brick Generator", BrickGeneratorNode); - lib.addNode("normalmap", "Normal Map", NormalMapNode); - lib.addNode("cell", "Cell", CellNode); - lib.addNode("solidcell", "Solid Cell", SolidCellNode); - lib.addNode("linecell", "Line Cell", LineCellNode); - lib.addNode("circle", "Circle", CircleNode); - lib.addNode("polygon", "Polygon", PolygonNode); - lib.addNode("blend", "Blend", BlendNode); - lib.addNode("invert", "Invert", InvertNode); - lib.addNode("warp", "Warp", WarpNode); - lib.addNode("color", "Color", ColorNode); - lib.addNode("colorize", "Colorize", ColorizeNode); - lib.addNode("simplexnoise", "Simplex Noise", SimplexNoiseNode); - lib.addNode("mask", "Mask", MaskNode); - lib.addNode("transform2d", "Transform2D", Transform2DNode); - lib.addNode("maprange", "Map Range", MapRangeNode); - lib.addNode("splat", "Splat", SplatNode); - lib.addNode("perlin3d", "Perlin 3D", Perlin3DNode); - lib.addNode("hexagon", "Hexagon", HexagonNode); - lib.addNode("fractalnoise", "Fractal Noise", FractalNoiseNode); - lib.addNode("tile", "Tile", TileNode); - lib.addNode("threshold", "Threshold", ThresholdNode); - lib.addNode("heightshift", "Height Shift", HeightShiftNode); - lib.addNode("checkerboard", "CheckerBoard", CheckerBoardNode); - lib.addNode("directionalwarp", "Directional Warp", DirectionalWarpNode); - lib.addNode("mirror", "Mirror", MirrorNode); - lib.addNode( - "brightnesscontrast", - "Brightness Contrast", - BrightnessContrastNode - ); - lib.addNode("wave", "Wave", WaveNode); - lib.addNode("copy", "Copy", CopyNode); - lib.addNode("gradient", "Gradient", GradientNode); - lib.addNode("trigradient", "TriGradient", TriGradientNode); - lib.addNode("output", "Output", OutputNode); - lib.addNode("gradientmap", "Gradient Map", GradientMapNode); - // lib.addNode("betterwarp", "Better Warp", BetterWarpNode); - - return lib; -} diff --git a/src/lib/library/libraryv2.ts b/src/lib/library/libraryv2.ts deleted file mode 100644 index dae2dbc7..00000000 --- a/src/lib/library/libraryv2.ts +++ /dev/null @@ -1,188 +0,0 @@ -import { BrickGeneratorNode } from "./v1/brickgenerator"; -import { NormalMapV2 } from "./v2/normalmapv2"; -import { CellNode } from "./v1/cellnode"; -import { SolidCellNode } from "./v1/solidcell"; -import { LineCellNode } from "./v1/linecell"; -import { PolygonNode, CircleNode } from "./v1/shapes"; -import { BlendNode } from "./v1/blend"; -import { InvertNode } from "./v1/invert"; -import { WarpNodeV2 } from "./v2/warpv2"; -import { ColorNode, ColorizeNode } from "./v1/color"; -import { SimplexNoiseNode } from "./v1/simplexnoise"; -import { MaskNode } from "./v1/mask"; -import { Transform2DNodeV2 } from "./v2/transform2dv2"; -import { MapRangeNode } from "./v1/maprange"; -import { Perlin3DNode } from "./v1/perlin3d"; -import { HexagonNode } from "./v1/hexagon"; -import { FractalNoiseNode } from "./v1/fractalnoise"; -import { TileNode } from "./v1/tile"; -import { ThresholdNode } from "./v1/threshold"; -import { HeightShiftNode } from "./v1/heightshift"; -import { CheckerBoardNode } from "./v1/checkerboard"; -import { DirectionalWarpNode } from "./v1/directionalwarp"; -import { MirrorNode } from "./v1/mirror"; -import { BrightnessContrastNode } from "./v1/brightnesscontrast"; -import { WaveNode } from "./v1/wave"; -import { CopyNode } from "./v1/copy"; -import { GradientNode, TriGradientNode } from "./v1/gradient"; -import { DesignerLibrary } from "../designer/library"; -import { OutputNode } from "./v1/output"; -import { GradientMapNode } from "./v1/gradientmap"; -import { SplatNodeV2 } from "./v2/splat"; -import { BlurV2 } from "./v2/blur"; -import { AdvanceSplatterV2 } from "./v2/advancesplatter"; -import { SlopeBlur } from "./v2/slopeblur"; -import { TileSampler } from "./v2/tilesampler"; -import { GradientDynamic } from "./v2/gradientdynamic"; -import { Clamp } from "./v2/clamp"; -import { Pow } from "./v2/pow"; -import { Quantize } from "./v2/quantize"; -import { HistogramShift } from "./v2/histogramshift"; -import { HistogramScan } from "./v2/histogramscan"; -import { HistogramSelect } from "./v2/histogramselect"; -import { Skew } from "./v2/skew"; -import { Bevel } from "./v2/bevel"; -import { FloodFill } from "./v2/floodfill"; -import { FloodFillToColor } from "./v2/floodfilltocolor"; -import { FloodFillToBBox } from "./v2/floodfilltobbox"; -import { FloodFillToRandomColor } from "./v2/floodfilltorandomcolor"; -import { FloodFillToRandomIntensity } from "./v2/floodfilltorandomintensity"; -import { FloodFillSampler } from "./v2/floodfillsampler"; -import { FloodFillToGradient } from "./v2/floodfilltogradient"; -import { StripesNode } from "./v2/stripes"; -import { RgbaMerge } from "./v2/rgbamerge"; -import { RgbaShuffle } from "./v2/rgbashuffle"; -import { ExtractChannel } from "./v2/extractchannel"; -import { Grayscale } from "./v2/grayscale"; -import { InvertNormal } from "./v2/invertnormal"; -import { CapsuleNode } from "./v2/capsule"; -import { CartesianToPolar } from "./v2/cartesiantopolar"; -import { PolarToCartesian } from "./v2/polartocartesian"; -import { CombineNormals } from "./v2/combinenormals"; -import { SoftFlower } from "./v2/softflower"; -import { Star } from "./v2/star"; -import { HslExtract } from "./v2/hslextract"; -import { Hsl } from "./v2/hsl"; -import { DirectionalBlur } from "./v2/directionalblur"; -import { AnisotropicBlur } from "./v2/anisotropicblur"; -import { CircularSplatter } from "./v2/circularsplatter"; -import { ValueNoise } from "./v2/valuenoise"; -import { ValueNoiseFractalSum } from "./v2/valuenoisefractalsum"; -import { GradientNoise } from "./v2/gradientnoise"; -import { GradientNoiseFractalSum } from "./v2/gradientnoisefractalsum"; -import { SimplexNoiseV2 } from "./v2/simplexnoise"; -import { DirectionalWarpNodeV2 } from "./v2/directionalwarpv2"; -import { ImageNode } from "./v2/imagenode"; - -export function createLibrary() { - const lib = new DesignerLibrary(); - lib.versionName = "v2"; - lib.addNode("brickgenerator", "Brick Generator", BrickGeneratorNode); - lib.addNode("normalmap", "Normal Map", NormalMapV2); - lib.addNode("cell", "Cell", CellNode); - lib.addNode("solidcell", "Solid Cell", SolidCellNode); - lib.addNode("linecell", "Line Cell", LineCellNode); - lib.addNode("circle", "Circle", CircleNode); - lib.addNode("polygon", "Polygon", PolygonNode); - lib.addNode("blend", "Blend", BlendNode); - lib.addNode("invert", "Invert", InvertNode); - lib.addNode("warp", "Warp", WarpNodeV2); - lib.addNode("color", "Color", ColorNode); - lib.addNode("colorize", "Colorize", ColorizeNode); - lib.addNode("simplexnoise", "Simplex Noise", SimplexNoiseNode); - lib.addNode("mask", "Mask", MaskNode); - lib.addNode("transform2d", "Transform2D", Transform2DNodeV2); - lib.addNode("maprange", "Map Range", MapRangeNode); - lib.addNode("splat", "Splat", SplatNodeV2); - lib.addNode("perlin3d", "Perlin 3D", Perlin3DNode); - lib.addNode("hexagon", "Hexagon", HexagonNode); - lib.addNode("fractalnoise", "Fractal Noise", FractalNoiseNode); - lib.addNode("tile", "Tile", TileNode); - lib.addNode("threshold", "Threshold", ThresholdNode); - lib.addNode("heightshift", "Height Shift", HeightShiftNode); - lib.addNode("checkerboard", "CheckerBoard", CheckerBoardNode); - lib.addNode("directionalwarp", "Directional Warp", DirectionalWarpNodeV2); - lib.addNode("mirror", "Mirror", MirrorNode); - lib.addNode( - "brightnesscontrast", - "Brightness Contrast", - BrightnessContrastNode - ); - lib.addNode("wave", "Wave", WaveNode); - lib.addNode("copy", "Copy", CopyNode); - lib.addNode("gradient", "Gradient", GradientNode); - lib.addNode("trigradient", "TriGradient", TriGradientNode); - lib.addNode("output", "Output", OutputNode); - lib.addNode("gradientmap", "Gradient Map", GradientMapNode); - lib.addNode("blurv2", "Blur", BlurV2); - lib.addNode("slopeblur", "Slope Blur", SlopeBlur); - lib.addNode("advancesplatter", "Advance Splatter", AdvanceSplatterV2); - lib.addNode("tilesampler", "Tile Sampler", TileSampler); - lib.addNode("gradientdynamic", "Gradient Dynamic", GradientDynamic); - lib.addNode("clamp", "Clamp", Clamp); - lib.addNode("pow", "Pow", Pow); - lib.addNode("quantize", "Quantize", Quantize); - lib.addNode("histogramshift", "Histogram Shift", HistogramShift); - lib.addNode("histogramscan", "Histogram Scan", HistogramScan); - lib.addNode("histogramselect", "Histogram Select", HistogramSelect); - lib.addNode("skew", "Skew", Skew); - lib.addNode("bevel", "Bevel", Bevel); - lib.addNode("floodfill", "Flood Fill", FloodFill); - lib.addNode("floodfilltocolor", "Flood Fill To Color", FloodFillToColor); - lib.addNode("floodfilltobbox", "Flood Fill To BBox", FloodFillToBBox); - lib.addNode( - "floodfilltorandomcolor", - "Flood Fill To Random Color", - FloodFillToRandomColor - ); - lib.addNode( - "floodfilltorandomintensity", - "Flood Fill To Random Intensity", - FloodFillToRandomIntensity - ); - lib.addNode("floodfillsampler", "Flood Fill Sampler", FloodFillSampler); - lib.addNode( - "floodfilltogradient", - "Flood Fill To Gradient", - FloodFillToGradient - ); - lib.addNode("stripes", "Stripes", StripesNode); - lib.addNode("rgbamerge", "RGBA Merge", RgbaMerge); - lib.addNode("rgbashuffle", "RGBA Shuffle", RgbaShuffle); - lib.addNode("extractchannel", "Extract Channel", ExtractChannel); - lib.addNode("grayscale", "Grayscale", Grayscale); - lib.addNode("invertnormal", "Invert Normal", InvertNormal); - lib.addNode("capsule", "Capsule", CapsuleNode); - lib.addNode("cartesiantopolar", "Cartesian to Polar", CartesianToPolar); - lib.addNode("polartocartesian", "Polar to Cartesian", PolarToCartesian); - lib.addNode("combinenormals", "Combine Normals", CombineNormals); - lib.addNode("softflower", "Soft Flower", SoftFlower); - lib.addNode("star", "Star", Star); - lib.addNode("hslextract", "HSL Extract", HslExtract); - lib.addNode("hsl", "HSL", Hsl); - lib.addNode("directionalblur", "Directional Blur", DirectionalBlur); - lib.addNode("anisotropic", "Anisotropic Blur", AnisotropicBlur); - lib.addNode("circularsplatter", "Circular Splatter", CircularSplatter); - lib.addNode("valuenoise", "Value Noise", ValueNoise); - lib.addNode("gradientnoise", "Gradient Noise", GradientNoise); - lib.addNode( - "gradientnoisefractalsum", - "Gradient Noise Fractal Sum", - GradientNoiseFractalSum - ); - lib.addNode( - "valuenoisefractalsum", - "Value Noise Fractal Sum", - ValueNoiseFractalSum - ); - lib.addNode( - "valuenoisefractalsum", - "Value Noise Fractal Sum", - ValueNoiseFractalSum - ); - lib.addNode("image", "Image", ImageNode); - //lib.addNode("simplexnoise", "Simplex Noise", SimplexNoiseV2); - // lib.addNode("betterwarp", "Better Warp", BetterWarpNode); - - return lib; -} diff --git a/src/lib/library/v0/nodes.ts b/src/lib/library/v0/nodes.ts deleted file mode 100644 index 99288807..00000000 --- a/src/lib/library/v0/nodes.ts +++ /dev/null @@ -1,415 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class TestGradientNode extends GpuDesignerNode { - public init() { - this.title = "Gradient Node"; - - const source = ` - vec4 process(vec2 uv) - { - return vec4(uv.x, 0, uv.y, 1); - } - `; - - this.buildShader(source); - } -} - -export class TestInvertNode extends GpuDesignerNode { - public init() { - this.title = "Invert"; - - this.addInput("color"); - - const source = ` - vec4 process(vec2 uv) - { - vec4 col = vec4(1.0) - texture(color,uv); - col.a = 1.0; - return col; - } - `; - - this.buildShader(source); - } -} - -export class TestMultiplyNode extends GpuDesignerNode { - public init() { - this.title = "Multiply"; - - this.addInput("colorA"); - this.addInput("colorB"); - - const source = ` - vec4 process(vec2 uv) - { - vec4 colA = texture(colorA,uv); - vec4 colB = texture(colorB,uv); - return colA * colB; - } - `; - - this.buildShader(source); - } -} - -export class TestShapeNode extends GpuDesignerNode { - public init() { - this.title = "Shape"; - //this.exportName = "result"; - - const source = ` - #define PI 3.14159265359 - #define TWO_PI 6.28318530718 - - vec4 process(vec2 uv) - { - vec3 color = vec3(0.0); - float d = 0.0; - - float scale = 0.5; - vec2 st = (uv - vec2(0.5,0.5)); - int N = 8; - - // Angle and radius from the current pixel - float a = atan(st.x,st.y)+PI; - float r = TWO_PI/float(N); - - // Shaping function that modulate the distance - d = cos(floor(.9+a/r)*r-a)*length(st) * (1.0 / scale); - - color = vec3(1.0-smoothstep(.5,.500001,d)); - - return vec4(color,1.0); - } - `; - - this.buildShader(source); - } -} - -export class TestWorleyNode extends GpuDesignerNode { - public init() { - this.title = "Worley"; - //this.exportName = "result"; - - this.addFloatProperty("scale", "Cell Scale", 5, 1, 20); - - const source = ` - vec3 mod289(vec3 x) { - return x - floor(x * (1.0 / 289.0)) * 289.0; - } - - vec2 mod289(vec2 x) { - return x - floor(x * (1.0 / 289.0)) * 289.0; - } - - // Modulo 7 without a division - vec3 mod7(vec3 x) { - return x - floor(x * (1.0 / 7.0)) * 7.0; - } - - // Permutation polynomial: (34x^2 + x) mod 289 - vec3 permute(vec3 x) { - return mod289((34.0 * x + 1.0) * x); - } - - // Cellular noise, returning F1 and F2 in a vec2. - // Standard 3x3 search window for good F1 and F2 values - vec2 cellular(vec2 P) { - #define K 0.142857142857 // 1/7 - #define Ko 0.428571428571 // 3/7 - #define jitter 1.0 // Less gives more regular pattern - vec2 Pi = mod289(floor(P)); - vec2 Pf = fract(P); - vec3 oi = vec3(-1.0, 0.0, 1.0); - vec3 of = vec3(-0.5, 0.5, 1.5); - vec3 px = permute(Pi.x + oi); - vec3 p = permute(px.x + Pi.y + oi); // p11, p12, p13 - vec3 ox = fract(p*K) - Ko; - vec3 oy = mod7(floor(p*K))*K - Ko; - vec3 dx = Pf.x + 0.5 + jitter*ox; - vec3 dy = Pf.y - of + jitter*oy; - vec3 d1 = dx * dx + dy * dy; // d11, d12 and d13, squared - p = permute(px.y + Pi.y + oi); // p21, p22, p23 - ox = fract(p*K) - Ko; - oy = mod7(floor(p*K))*K - Ko; - dx = Pf.x - 0.5 + jitter*ox; - dy = Pf.y - of + jitter*oy; - vec3 d2 = dx * dx + dy * dy; // d21, d22 and d23, squared - p = permute(px.z + Pi.y + oi); // p31, p32, p33 - ox = fract(p*K) - Ko; - oy = mod7(floor(p*K))*K - Ko; - dx = Pf.x - 1.5 + jitter*ox; - dy = Pf.y - of + jitter*oy; - vec3 d3 = dx * dx + dy * dy; // d31, d32 and d33, squared - // Sort out the two smallest distances (F1, F2) - vec3 d1a = min(d1, d2); - d2 = max(d1, d2); // Swap to keep candidates for F2 - d2 = min(d2, d3); // neither F1 nor F2 are now in d3 - d1 = min(d1a, d2); // F1 is now in d1 - d2 = max(d1a, d2); // Swap to keep candidates for F2 - d1.xy = (d1.x < d1.y) ? d1.xy : d1.yx; // Swap if smaller - d1.xz = (d1.x < d1.z) ? d1.xz : d1.zx; // F1 is in d1.x - d1.yz = min(d1.yz, d2.yz); // F2 is now not in d2.yz - d1.y = min(d1.y, d1.z); // nor in d1.z - d1.y = min(d1.y, d2.x); // F2 is in d1.y, we're done. - return sqrt(d1.xy); - } - - vec4 process(vec2 uv) - { - float scale = 7.0; - //vec2 cel = cellular(uv*vec2(scale)); - vec2 cel = cellular(uv*vec2(prop_scale)); - return vec4(vec3(cel.y - cel.x),1.0); - } - `; - - this.buildShader(source); - } -} - -// http://www.smart-page.net/smartnormal/js/SmartNormalMapFilter.js -export class TestNormalNode extends GpuDesignerNode { - public init() { - this.title = "Normal Map"; - //this.exportName = "result"; - this.addInput("height"); - - this.addFloatProperty("strength", "Strength", 1, 0, 10, 0.01); - - const source = ` - vec4 process(vec2 uv) - { - //vec2 size = textureSize(height); - vec2 size = vec2(1024,1024); // quick hack for now - vec2 step = vec2(1.0,1.0)/size; - - // center point - float d0 = abs(texture(height, uv + vec2(0.0, 0.0)).r); - - // sample horizontally - float d1 = abs(texture(height, uv + vec2(step.x, 0.0)).r); - float d2 = abs(texture(height, uv + vec2(-step.x, 0.0)).r); - - // sample vertically - float d3 = abs(texture(height, uv + vec2(0.0, step.y)).r); - float d4 = abs(texture(height, uv + vec2(0.0, -step.y)).r); - - // find diff horizontally and average - float dx = ((d2 - d0) + (d0 - d1)) * 0.5; - - // find diff vertically and average - float dy = ((d4 - d0) + (d0 - d3)) * 0.5; - - // calculate normal - //float strength = 0.05; - //float strength = (10.0-prop_strength) * 0.01; - vec3 normal = normalize(vec3(dx * prop_strength, dy * prop_strength, 1.0)); - vec3 final = normal.xyz * 0.5 + 0.5; // bring to 0.0 - 1.0 range - - return vec4(final, 1.0); - } - `; - - this.buildShader(source); - } -} - -export class TestWarpNode extends GpuDesignerNode { - public init() { - this.title = "Warp"; - - this.addInput("inputImage"); - this.addInput("height"); - - this.addFloatProperty("strength", "Strength", 1, 0, 100, 0.01); - - // calculates normal, then warps uv by it - const source = ` - vec4 process(vec2 uv) - { - //vec2 size = textureSize(height); - vec2 size = vec2(1024,1024); // quick hack for now - vec2 step = vec2(1.0,1.0)/size; - - // center point - float d0 = abs(texture(height, uv + vec2(0.0, 0.0)).r); - - // sample horizontally - float d1 = abs(texture(height, uv + vec2(step.x, 0.0)).r); - float d2 = abs(texture(height, uv + vec2(-step.x, 0.0)).r); - - // sample vertically - float d3 = abs(texture(height, uv + vec2(0.0, step.y)).r); - float d4 = abs(texture(height, uv + vec2(0.0, -step.y)).r); - - // find diff horizontally and average - float dx = ((d2 - d0) + (d0 - d1)) * 0.5; - - // find diff vertically and average - float dy = ((d4 - d0) + (d0 - d3)) * 0.5; - - // calculate normal - //float strength = 0.05; - //float strength = (10.0-prop_strength) * 0.01; - vec2 offset = vec2(dx, dy); - - vec4 color = texture(inputImage, uv + offset * prop_strength); - - return color; - } - `; - - this.buildShader(source); - } -} - -// https://thebookofshaders.com/11/ -export class TestSimplexNode extends GpuDesignerNode { - public init() { - this.title = "Simplex Noise"; - - this.addFloatProperty("scale", "Scale", 100, 1, 1000, 0.01); - - const source = ` - float random (in vec2 st) { - return fract(sin(dot(st.xy, - vec2(12.9898,78.233))) - * 43758.5453123); - } - - float noise (in vec2 st) { - vec2 i = floor(st); - vec2 f = fract(st); - - // Four corners in 2D of a tile - float a = random(i); - float b = random(i + vec2(1.0, 0.0)); - float c = random(i + vec2(0.0, 1.0)); - float d = random(i + vec2(1.0, 1.0)); - - // Smooth Interpolation - - // Cubic Hermine Curve. Same as SmoothStep() - vec2 u = f*f*(3.0-2.0*f); - // u = smoothstep(0.,1.,f); - - // Mix 4 coorners porcentages - return mix(a, b, u.x) + - (c - a)* u.y * (1.0 - u.x) + - (d - b) * u.x * u.y; - } - - vec2 skew (vec2 st) { - vec2 r = vec2(0.0); - r.x = 1.1547*st.x; - r.y = st.y+0.5*r.x; - return r; - } - - vec3 simplexGrid (vec2 st) { - vec3 xyz = vec3(0.0); - - vec2 p = fract(skew(st)); - if (p.x > p.y) { - xyz.xy = 1.0-vec2(p.x,p.y-p.x); - xyz.z = p.y; - } else { - xyz.yz = 1.0-vec2(p.x-p.y,p.y); - xyz.x = p.x; - } - - return fract(xyz); - } - - vec4 process(vec2 uv) - { - vec3 color = vec3(noise(uv * prop_scale)); - - return vec4(color,1.0); - } - `; - - this.buildShader(source); - } -} - -export class TestBrickNode extends GpuDesignerNode { - public init() { - this.title = "Brick"; - - this.addIntProperty("widthX", "Width X", 3, 0, 10, 1); - this.addIntProperty("widthY", "Width Y", 6, 0, 10, 1); - - this.addFloatProperty("holeX", "Hole X", 2, 1, 10, 0.01); - this.addFloatProperty("holeY", "Hole Y", 2, 1, 10, 0.01); - - const source = ` - vec4 process(vec2 uv) - { - float u = uv.x; - float v = uv.y; - - float widthX = float(prop_widthX); - float widthY = float(prop_widthY); - float shiftX = 0.5; - float shiftRandWeight = 0.0; - //float holeX = 0.03; - float holeX = prop_holeX / 100.0; - //float holeY = 0.03; - float holeY = prop_holeY / 100.0; - //float smooth = 0.05; - float smooth = 0.01; - - float normX = widthX; - float normY = widthY; - float uu = u * normX; - float vv = v * normY; - - float y = vv - floor(vv); - - if (vv >= normY) vv -= normY; - if (uu >= normX) uu -= normX; - - float by = floor(vv); - - if ((vv * 0.5 - floor(vv * 0.5)) >= 0.5) - uu += shiftX; - - if (uu >= normX) uu -= normX; - - float bx = floor(uu); - - float x = uu - floor(uu); - - float val = 1.0; - - bool inside = true; - if (holeX > 0.0) inside = inside && (x > (holeX * normX)); - if (holeY > 0.0) inside = inside && (y > (holeY * normY)); - - if (inside) { - float dist = min(min(x -holeX*normX, 1.0 - x)/normX, min(y - holeY*normY, 1.0 - y)/normY); - dist *= min(normX, normY); - - if (dist < smooth) { - val = val * dist/smooth; - } - } else val = 0.0; - - vec4 color; - color.r = val; - color.g = val; - color.b = val; - color.a = 1.0; - - return color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/blend.ts b/src/lib/library/v1/blend.ts deleted file mode 100644 index 97b3263f..00000000 --- a/src/lib/library/v1/blend.ts +++ /dev/null @@ -1,84 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class BlendNode extends GpuDesignerNode { - public init() { - this.title = "Blend"; - - this.addInput("colorA"); // foreground - this.addInput("colorB"); // background - this.addInput("opacity"); - - this.addEnumProperty("type", "Type", [ - "Multiply", - "Add", - "Subtract", - "Divide", - // "Add Sub", - "Max", - "Min", - "Switch", - "Overlay", - "Screen" - ]); - this.addFloatProperty("opacity", "Opacity", 1.0, 0.0, 1.0, 0.01); - - const source = ` - - float screen(float fg, float bg) { - float res = (1.0 - fg) * (1.0 - bg); - return 1.0 - res; - } - vec4 process(vec2 uv) - { - float finalOpacity = prop_opacity; - if (opacity_connected) - finalOpacity *= texture(opacity, uv).r; - - vec4 colA = texture(colorA,uv); - vec4 colB = texture(colorB,uv); - vec4 col = vec4(1.0); - - if (prop_type==0){ // multiply - col.rgb = colA.rgb * colB.rgb; - } - if (prop_type==1) // add - col.rgb = colA.rgb + colB.rgb; - if (prop_type==2) // subtract - col.rgb = colB.rgb - colA.rgb; - if (prop_type==3) // divide - col.rgb = colB.rgb / colA.rgb; - // if (prop_type==4) {// add sub - // if (colA.r > 0.5) col.r = colB.r + colA.r; else col.r = colB.r - colA.r; - // if (colA.g > 0.5) col.g = colB.g + colA.g; else col.g = colB.g - colA.g; - // if (colA.b > 0.5) col.b = colB.b + colA.b; else col.b = colB.b - colA.b; - // } - if (prop_type==4) { // max - col.rgb = max(colA.rgb, colB.rgb); - } - if (prop_type==5) { // min - col.rgb = min(colA.rgb, colB.rgb); - } - if (prop_type==6) { // switch - col.rgb = colA.rgb; - } - if (prop_type==7) { // overlay - if (colB.r < 0.5) col.r = colB.r * colA.r; else col.r = screen(colB.r, colA.r); - if (colB.g < 0.5) col.g = colB.g * colA.g; else col.g = screen(colB.g, colA.g); - if (colB.b < 0.5) col.b = colB.b * colA.b; else col.b = screen(colB.b, colA.b); - } - if (prop_type==8) { // screen - col.r = screen(colA.r, colB.r); - col.g = screen(colA.g, colB.g); - col.b = screen(colA.b, colB.b); - } - - // apply opacity - col.rgb = mix(colB.rgb, col.rgb, vec3(finalOpacity)); - - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/brickgenerator.ts b/src/lib/library/v1/brickgenerator.ts deleted file mode 100644 index 2c90d8e4..00000000 --- a/src/lib/library/v1/brickgenerator.ts +++ /dev/null @@ -1,139 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class BrickGeneratorNode extends GpuDesignerNode { - public init() { - this.title = "Brick Generator"; - - this.addFloatProperty("rows", "Rows", 6, 1, 20, 1); - this.addFloatProperty("columns", "Columns", 6, 1, 20, 1); - - this.addFloatProperty("offset", "Offset", 0.5, 0, 1, 0.1); - - // brick size - const sizeProps = this.createGroup("Size"); - sizeProps.collapsed = false; - sizeProps.add( - this.addFloatProperty("brickWidth", "Brick Width", 0.9, 0, 1, 0.01) - ); - sizeProps.add( - this.addFloatProperty("brickHeight", "Brick Height", 0.9, 0, 1, 0.01) - ); - - // height - const heightProps = this.createGroup("Height"); - heightProps.collapsed = false; - heightProps.add( - this.addFloatProperty("heightMin", "Height Min", 0.0, 0, 1, 0.05) - ); - heightProps.add( - this.addFloatProperty("heightMax", "Height Max", 1.0, 0, 1, 0.05) - ); - heightProps.add( - this.addFloatProperty("heightBalance", "Height Balance", 1.0, 0, 1, 0.05) - ); - heightProps.add( - this.addFloatProperty("heightVariance", "Height Variance", 0, 0, 1, 0.05) - ); - - const source = ` - //vec2 brickSize = vec2(prop_brickWidth, prop_brickHeight); - //vec2 tileSize = vec2(prop_rows, prop_columns); - - // float shiftX = 0.5; - // float shiftY = 0.0; - - // offset for alternating rows - //float offset = prop_offset; - - // HEIGHT FUNCTIONS - float calculateHeight(vec2 brickId) - { - // height - float heightMin = prop_heightMin; - float heightMax = prop_heightMax; - float heightBalance= prop_heightBalance; // threshold that decides whether to use height variance or not - float heightVariance = prop_heightVariance; // multiplies the heightMax-heightMin range - - - // check whether or not there should be a height range in the first place - float balRand = _rand(vec2(_seed) + brickId * vec2(0.01)); - - // if balRand is less than heightBalance it means it qualifies for a random - // height. This way if heightBalance is 0 then we only use the min luminance - if( balRand > heightBalance) { - return 1.0; - } - - // calculate height variance - // need to offset brickId to give new random result - float randVariance = _rand(vec2(_seed) + (brickId + vec2(1) ) * vec2(0.01)); - randVariance *= heightVariance; - - float range = (heightMax - heightMin); - float height = heightMax - - range * randVariance; - - return height; - } - - // slope - // float slopeX;// slope x direction - // float slopeY;// slope y direction - // float slopeBalance;// threshold that determines whether or not to use slope - // float slopeVariation;// decreases the range of the slope - - vec2 is_brick(vec2 pos) - { - vec2 brickSize = vec2(prop_brickWidth, prop_brickHeight); - - vec2 edgeSize = (vec2(1.0) - brickSize) * vec2(0.5); - vec2 brick = vec2(0.0); - - if (pos.x > edgeSize.x && pos.x < (1.0 - edgeSize.x)) - brick.x = 1.0; - - if (pos.y > edgeSize.y && pos.y < (1.0 - edgeSize.y)) - brick.y = 1.0; - - return brick; - } - - vec4 process(vec2 uv) - { - vec2 tileSize = vec2(prop_columns, prop_rows); - float offset = prop_offset; - - //vec2 pos = uv * vec2(5); - vec2 pos = uv * tileSize; - - float xOffset = 0.0; - if (fract(pos.y * 0.5) > 0.5) { - xOffset = offset; - } - pos.x += xOffset; - - // a brick's id would be floor(pos) - // this gives us its origin - // this can act as a random seed for the entire brick - vec2 brickId = floor(pos);// - vec2(xOffset, 0); - - // wrap around x - if (brickId.x > tileSize.x-1.0) - brickId.x = 0.0; - - //float lum = _rand(vec2(_seed) + brickId * vec2(0.01)); - //float lum = randomFloat(0); - float lum = calculateHeight(brickId); - pos = fract(pos); - - //vec2 isBrick = step(pos,vec2(0.95,0.9)); - vec2 isBrick =is_brick(pos); - - - return vec4(vec3(isBrick.x * isBrick.y * lum),1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/brightnesscontrast.ts b/src/lib/library/v1/brightnesscontrast.ts deleted file mode 100644 index 4173b1c6..00000000 --- a/src/lib/library/v1/brightnesscontrast.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/brightnesscontrast.js -export class BrightnessContrastNode extends GpuDesignerNode { - public init() { - this.title = "Brightness Contrast"; - - this.addInput("image"); - - this.addFloatProperty("contrast", "Contrast", 0.0, -1, 1, 0.1); - this.addFloatProperty("brightness", "Brightness", 0.0, -1, 1, 0.1); - const source = ` - vec4 process(vec2 uv) - { - vec4 col = texture(image, uv); - - col.rgb += prop_brightness; - if (prop_contrast > 0.0) - col.rgb = (col.rgb - 0.5) / (1.0 - prop_contrast) + 0.5; - else - col.rgb = (col.rgb - 0.5) * (1.0 + prop_contrast) + 0.5; - - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/cellnode.ts b/src/lib/library/v1/cellnode.ts deleted file mode 100644 index acb56677..00000000 --- a/src/lib/library/v1/cellnode.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://thebookofshaders.com/12/ -export class CellNode extends GpuDesignerNode { - public init() { - this.title = "Cell"; - - this.addIntProperty("scale", "Scale", 5, 0, 256); - this.addBoolProperty("invert", "Invert", false); - this.addFloatProperty("entropy", "Order", 0, 0, 1, 0.01); - this.addFloatProperty("intensity", "Intensity", 1, 0, 2, 0.01); - - const source = ` - vec2 random2( vec2 p ) { - p += vec2(_seed); - return fract(sin(vec2(dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3))))*43758.5453); - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - vec4 process(vec2 uv) - { - uv *= float(prop_scale); - - vec2 i_st = floor(uv); - vec2 f_st = fract(uv); - - float m_dist = 1.; - - for (int y= -1; y <= 1; y++) { - for (int x= -1; x <= 1; x++) { - vec2 neighbor = vec2(float(x),float(y)); - // wraps around cells to make it seamless - vec2 neighborCell = i_st + neighbor; - neighborCell.x = wrapAround(neighborCell.x, float(prop_scale)); - neighborCell.y = wrapAround(neighborCell.y, float(prop_scale)); - - // Random position from current + neighbor place in the grid - vec2 point = random2(neighborCell); - - // entropy is lerping between the center and the random point - point = mix(point, vec2(0.5,0.5), prop_entropy); - - // Animate the point - //point = 0.5 + 0.5*sin(u_time + 6.2831*point); - - // Vector between the pixel and the point - vec2 diff = neighbor + point - f_st; - - // Distance to the point - float dist = length(diff); - - // Keep the closer distance - m_dist = min(m_dist, dist); - } - } - - if (prop_invert) - m_dist = 1.0 - m_dist; - - return vec4(vec3(m_dist) * prop_intensity, 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/checkerboard.ts b/src/lib/library/v1/checkerboard.ts deleted file mode 100644 index 8254f498..00000000 --- a/src/lib/library/v1/checkerboard.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; - -// https://stackoverflow.com/questions/4694608/glsl-checkerboard-pattern -export class CheckerBoardNode extends GpuDesignerNode { - public init() { - this.title = "CheckerBoard"; - - this.addFloatProperty("rows", "Rows", 2, 1, 20, 1); - this.addFloatProperty("columns", "Columns", 2, 1, 20, 1); - - this.addColorProperty("color", "Color", new Color()); - - const source = ` - vec4 process(vec2 uv) - { - if ((mod(prop_columns*uv.x, 1.0) < 0.5) ^^ (mod(prop_rows*uv.y, 1.0) < 0.5)) - { - return vec4(prop_color.rgb, 1.0); - } - else - { - return vec4(1.0, 1.0, 1.0, 1.0); - } - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/color.ts b/src/lib/library/v1/color.ts deleted file mode 100644 index 4f96ba13..00000000 --- a/src/lib/library/v1/color.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; - -export class ColorizeNode extends GpuDesignerNode { - public init() { - this.title = "Colorize"; - - this.addInput("image"); - - this.addColorProperty("color", "Color", new Color()); - - const source = ` - vec4 process(vec2 uv) - { - return texture(image,uv) * prop_color; - } - `; - - this.buildShader(source); - } -} - -export class ColorNode extends GpuDesignerNode { - public init() { - this.title = "Color"; - - this.addColorProperty("color", "Color", new Color()); - - const source = ` - vec4 process(vec2 uv) - { - return prop_color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/copy.ts b/src/lib/library/v1/copy.ts deleted file mode 100644 index 8af68e78..00000000 --- a/src/lib/library/v1/copy.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class CopyNode extends GpuDesignerNode { - public init() { - this.title = "Copy"; - - this.addInput("image"); - this.addStringProperty("name", "Name"); - - const source = ` - vec4 process(vec2 uv) - { - vec4 col = texture(image, uv); - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/directionalwarp.ts b/src/lib/library/v1/directionalwarp.ts deleted file mode 100644 index d14151d7..00000000 --- a/src/lib/library/v1/directionalwarp.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class DirectionalWarpNode extends GpuDesignerNode { - public init() { - this.title = "Directional Warp"; - - this.addInput("inputImage"); - this.addInput("height"); - - this.addFloatProperty("intensity", "Intensity", 0.1, -0.5, 0.5, 0.01); - this.addFloatProperty("angle", "Angle", 0.85, 0.0, 3.142, 0.01); - - // calculates normal, then warps uv by it - const source = ` - vec4 process(vec2 uv) - { - vec2 step = vec2(1.0,1.0)/_textureSize; - - vec2 dir = normalize(vec2(cos(prop_angle), sin(prop_angle))); - - // center point - float dist = abs(texture(height, uv).r) - 0.5; - - vec4 color = texture(inputImage, uv + dir * prop_intensity * dist); - - return color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/fractalnoise.ts b/src/lib/library/v1/fractalnoise.ts deleted file mode 100644 index 1a8abdcb..00000000 --- a/src/lib/library/v1/fractalnoise.ts +++ /dev/null @@ -1,122 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://thebookofshaders.com/11/ -export class FractalNoiseNode extends GpuDesignerNode { - public init() { - this.title = "Fractal Noise"; - - this.addIntProperty("scale", "Scale", 1, 1, 10, 1); - this.addIntProperty("scaleX", "X Scale", 1, 1, 15, 1); - this.addIntProperty("scaleY", "Y Scale", 1, 1, 15, 1); - this.addIntProperty("startBand", "Start Band", 4, 1, 10, 1); - this.addIntProperty("endBand", "End Band", 8, 1, 10, 1); - this.addFloatProperty("persistence", "Persistence", 0.6, 0.0, 1.0, 0.01); - this.addFloatProperty( - "persistenceStart", - "Persistence Start", - 1.0, - 0.0, - 1.0, - 0.01 - ); - this.addFloatProperty("brightness", "Brightness", 0.5, 0.0, 1.0, 0.01); - - const source = ` - // - // GLSL textureless classic 2D noise "cnoise", - // with an RSL-style periodic variant "pnoise". - // Author: Stefan Gustavson (stefan.gustavson@liu.se) - // Version: 2011-08-22 - // - // Many thanks to Ian McEwan of Ashima Arts for the - // ideas for permutation and gradient selection. - // - // Copyright (c) 2011 Stefan Gustavson. All rights reserved. - // Distributed under the MIT license. See LICENSE file. - // https://github.com/stegu/webgl-noise - // - - vec4 mod289(vec4 x) - { - return x - floor(x * (1.0 / 289.0)) * 289.0; - } - - vec4 permute(vec4 x) - { - return mod289(((x*34.0)+1.0)*x); - } - - vec4 taylorInvSqrt(vec4 r) - { - return 1.79284291400159 - 0.85373472095314 * r; - } - - vec2 fade(vec2 t) { - return t*t*t*(t*(t*6.0-15.0)+10.0); - } - - // Classic Perlin noise, periodic variant - float pnoise(vec2 P, vec2 rep) - { - vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0); - vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, rep.xyxy); // To create noise with explicit period - Pi = mod289(Pi); // To avoid truncation effects in permutation - vec4 ix = Pi.xzxz; - vec4 iy = Pi.yyww; - vec4 fx = Pf.xzxz; - vec4 fy = Pf.yyww; - - vec4 i = permute(permute(ix) + iy); - - vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ; - vec4 gy = abs(gx) - 0.5 ; - vec4 tx = floor(gx + 0.5); - gx = gx - tx; - - vec2 g00 = vec2(gx.x,gy.x); - vec2 g10 = vec2(gx.y,gy.y); - vec2 g01 = vec2(gx.z,gy.z); - vec2 g11 = vec2(gx.w,gy.w); - - vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - float n00 = dot(g00, vec2(fx.x, fy.x)); - float n10 = dot(g10, vec2(fx.y, fy.y)); - float n01 = dot(g01, vec2(fx.z, fy.z)); - float n11 = dot(g11, vec2(fx.w, fy.w)); - - vec2 fade_xy = fade(Pf.xy); - vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x); - float n_xy = mix(n_x.x, n_x.y, fade_xy.y); - return 2.3 * n_xy; - } - - vec4 process(vec2 uv) - { - float scale_value = prop_persistenceStart; - float persistence = prop_persistence; - float total = 0.0; - vec2 scale = vec2(prop_scaleX, prop_scaleY) * float(prop_scale); - - //int startBand = 3; - //int endBand = 12; - for(int i = 1; i <=20; i++) { - if (i >= prop_startBand && i <= prop_endBand) { - total += (pnoise(uv*scale, scale)) * scale_value; - scale_value *= persistence; - } - scale *= 2.0; - } - - return vec4(vec3(total + prop_brightness),1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/gradient.ts b/src/lib/library/v1/gradient.ts deleted file mode 100644 index ed93afc0..00000000 --- a/src/lib/library/v1/gradient.ts +++ /dev/null @@ -1,204 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; - -export class GradientNode extends GpuDesignerNode { - public init() { - this.title = "Gradient"; - - const white = new Color(); - white.r = 1; - white.g = 1; - white.b = 1; - - this.addColorProperty("colorA", "Color A", Color.parse("#000000")); - this.addFloatProperty("posA", "Position A", 0, 0, 1, 0.01); - this.addColorProperty("colorB", "Color B", white); - this.addFloatProperty("posB", "Position B", 1, 0, 1, 0.01); - - this.addEnumProperty("mode", "Gradient Direction", [ - "Left To Right", - "Right To Left", - "Top To Bottom", - "Bottom To Top" - ]); - - const source = ` - #define POINTS_MAX 32 - - // assumes points are sorted - vec3 calcGradient(float t, vec3 colors[POINTS_MAX], float positions[POINTS_MAX], int numPoints) - { - if (numPoints == 0) - return vec3(1,0,0); - - if (numPoints == 1) - return colors[0]; - - // here at least two points are available - if (t < positions[0]) - return colors[0]; - - int last = numPoints - 1; - if (t > positions[last]) - return colors[last]; - - // find two points in-between and lerp - - for(int i = 0; i < numPoints-1;i++) { - if (positions[i+1] > t) { - vec3 colorA = colors[i]; - vec3 colorB = colors[i+1]; - - float t1 = positions[i]; - float t2 = positions[i+1]; - - float lerpPos = (t - t1)/(t2 - t1); - return mix(colorA, colorB, lerpPos); - - } - - } - - return vec3(0,0,0); - } - - - vec4 process(vec2 uv) - { - float t = 0.0; - - // left to right - if (prop_mode == 0) - t = uv.x; - // right to left - else if (prop_mode == 1) - t = 1.0 - uv.x; - // top to bottom - else if (prop_mode == 2) - t = 1.0 - uv.y; - // bottom to top - else if (prop_mode == 3) - t = uv.y; - - - vec3 colors[POINTS_MAX]; - colors[0] = prop_colorA.rgb; - colors[1] = prop_colorB.rgb; - float positions[POINTS_MAX]; - positions[0] = prop_posA; - positions[1] = prop_posB; - - - vec3 col = calcGradient(t, colors, positions, 2); - - return vec4(col,1.0); - } - `; - - this.buildShader(source); - } -} - -export class TriGradientNode extends GpuDesignerNode { - public init() { - this.title = "TriGradient"; - - const white = new Color(); - white.r = 1; - white.g = 1; - white.b = 1; - - this.addColorProperty("colorA", "Color A", Color.parse("#000000")); - this.addFloatProperty("posA", "Position A", 0, 0, 1, 0.01); - - this.addColorProperty("colorB", "Color B", white); - this.addFloatProperty("posB", "Position B", 0.5, 0, 1, 0.01); - - this.addColorProperty("colorC", "Color C", Color.parse("#000000")); - this.addFloatProperty("posC", "Position C", 1, 0, 1, 0.01); - - this.addEnumProperty("mode", "Gradient Direction", [ - "Left To Right", - "Right To Left", - "Top To Bottom", - "Bottom To Top" - ]); - - const source = ` - #define POINTS_MAX 32 - - // assumes points are sorted - vec3 calcGradient(float t, vec3 colors[POINTS_MAX], float positions[POINTS_MAX], int numPoints) - { - if (numPoints == 0) - return vec3(1,0,0); - - if (numPoints == 1) - return colors[0]; - - // here at least two points are available - if (t < positions[0]) - return colors[0]; - - int last = numPoints - 1; - if (t > positions[last]) - return colors[last]; - - // find two points in-between and lerp - - for(int i = 0; i < numPoints-1;i++) { - if (positions[i+1] > t) { - vec3 colorA = colors[i]; - vec3 colorB = colors[i+1]; - - float t1 = positions[i]; - float t2 = positions[i+1]; - - float lerpPos = (t - t1)/(t2 - t1); - return mix(colorA, colorB, lerpPos); - - } - - } - - return vec3(0,0,0); - } - - - vec4 process(vec2 uv) - { - float t = 0.0; - - // left to right - if (prop_mode == 0) - t = uv.x; - // right to left - else if (prop_mode == 1) - t = 1.0 - uv.x; - // top to bottom - else if (prop_mode == 2) - t = 1.0 - uv.y; - // bottom to top - else if (prop_mode == 3) - t = uv.y; - - - vec3 colors[POINTS_MAX]; - colors[0] = prop_colorA.rgb; - colors[1] = prop_colorB.rgb; - colors[2] = prop_colorC.rgb; - float positions[POINTS_MAX]; - positions[0] = prop_posA; - positions[1] = prop_posB; - positions[2] = prop_posC; - - - vec3 col = calcGradient(t, colors, positions, 3); - - return vec4(col,1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/gradientmap.ts b/src/lib/library/v1/gradientmap.ts deleted file mode 100644 index a3d9f627..00000000 --- a/src/lib/library/v1/gradientmap.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; -import { Gradient } from "@/lib/designer/gradient"; - -export class GradientMapNode extends GpuDesignerNode { - public init() { - this.title = "GradientMap"; - - this.addInput("inputImage"); - - this.addGradientProperty("gradient", "Gradient", Gradient.default()); - - const source = ` - float grayscale(vec3 col) - { - return (col.r + col.g + col.b) / 3.0; - } - - vec4 process(vec2 uv) - { - // grayscale input color - float t = grayscale(texture(inputImage, uv).rgb); - vec3 col = sampleGradient(prop_gradient, t); - - return vec4(col, 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/heightshift.ts b/src/lib/library/v1/heightshift.ts deleted file mode 100644 index ecdc0cca..00000000 --- a/src/lib/library/v1/heightshift.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class HeightShiftNode extends GpuDesignerNode { - public init() { - this.title = "Height Shift"; - - this.addInput("image"); - - this.addFloatProperty("shift", "Shift", 0.0, -1.0, 1.0, 0.01); - - const source = ` - vec4 process(vec2 uv) - { - vec4 a = texture(image, uv); - - return a + vec4(vec3(prop_shift), 0.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/hexagon.ts b/src/lib/library/v1/hexagon.ts deleted file mode 100644 index 08382b31..00000000 --- a/src/lib/library/v1/hexagon.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class HexagonNode extends GpuDesignerNode { - public init() { - this.title = "Hexagon"; - - this.addFloatProperty("scaleX", "X Scale", 3, 1, 32, 1); - this.addFloatProperty("scaleY", "Y Scale", 2, 1, 32, 1); - this.addFloatProperty("margin", "Margin", 0.9, 0.0, 1.0, 0.01); - this.addFloatProperty("gradient", "Gradient", 0, 0, 1.0, 0.01); - - const source = ` - // https://www.shadertoy.com/view/Xljczw - - //todo: cleanup - const vec2 s = vec2(1, 1.7320508); // sqrt(3.0) - vec4 getHex(vec2 p){ - vec4 hC = floor(vec4(p, p - vec2(.5, 1))/s.xyxy) + .5; - vec4 h = vec4(p - hC.xy*s, p - (hC.zw + .5)*s); - return dot(h.xy, h.xy)= b) return 1.0; - - return (t-a)/(b-a); - } - - //const float ratio = 1.15470053838;// 2/sqrt(3) - - // https://www.redblobgames.com/grids/hexagons/ - const float ratio =3.0 * (1.0/sqrt(3.0)); - vec4 process(vec2 uv) - { - // make it more tileable - //uv += vec2(0.0, -0.5); - //uv.y *= 2.0/s.y; - - // it - vec4 h = getHex(uv*vec2(prop_scaleX, prop_scaleY * ratio)); - float dist = hex(h.xy) * 2.0;// result range from hex function is 0.0-0.5 - float finalDist = 1.0 - linearstep(prop_margin - prop_margin*prop_gradient, prop_margin, dist); - - //todo: apply random color using h.zw as color id - return vec4(vec3(finalDist),1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/invert.ts b/src/lib/library/v1/invert.ts deleted file mode 100644 index 2e298d44..00000000 --- a/src/lib/library/v1/invert.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class InvertNode extends GpuDesignerNode { - public init() { - this.title = "Invert"; - - this.addInput("color"); - - const source = ` - vec4 process(vec2 uv) - { - vec4 col = vec4(1.0) - texture(color,uv); - col.a = 1.0; - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/linecell.ts b/src/lib/library/v1/linecell.ts deleted file mode 100644 index c60591f3..00000000 --- a/src/lib/library/v1/linecell.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://thebookofshaders.com/edit.php#12/tissue.frag -export class LineCellNode extends GpuDesignerNode { - public init() { - this.title = "Lined Cell"; - - this.addIntProperty("scale", "Scale", 5, 0, 256); - this.addBoolProperty("invert", "Invert", false); - this.addFloatProperty("entropy", "Order", 0, 0, 1, 0.01); - this.addFloatProperty("intensity", "Intensity", 1, 0, 2, 0.01); - this.addFloatProperty("thickness", "Line Thickness", 0.1, 0, 0.2, 0.01); - - const source = ` - vec2 random2( vec2 p ) { - p += vec2(_seed); - return fract(sin(vec2(dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3))))*43758.5453); - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - vec3 voronoi(vec2 uv) - { - vec2 i_st = floor(uv); - vec2 f_st = fract(uv); - - float m_dist = 1.; - vec2 mg, mr; - float md = 8.0; - vec2 closestPoint = vec2(0.5,0.5); - - for (int y= -1; y <= 1; y++) { - for (int x= -1; x <= 1; x++) { - vec2 neighbor = vec2(float(x),float(y)); - // wraps around cells to make it seamless - vec2 neighborCell = i_st + neighbor; - neighborCell.x = wrapAround(neighborCell.x, float(prop_scale)); - neighborCell.y = wrapAround(neighborCell.y, float(prop_scale)); - - // Random position from current + neighbor place in the grid - vec2 point = random2(neighborCell); - - // entropy is lerping between the center and the random point - point = mix(point, vec2(0.5,0.5), prop_entropy); - - // Vector between the pixel and the point - vec2 diff = neighbor + point - f_st; - - // Distance to the point - float dist = length(diff); - - // Keep the closer distance - //m_dist = min(m_dist, dist); - if (dist < md) { - closestPoint = neighborCell; - md = dist; - mr = diff; - mg = neighbor; - } - } - } - - // if both points are closest to each other then - // find the line inbetween - // this means that we wrap the neighbor the same way - // as we did above - md = 8.0; - for (int j=-2; j<=2; j++ ) { - for (int i=-2; i<=2; i++ ) { - vec2 neighbor = mg + vec2(float(i),float(j)); // actual pos - vec2 neighborCell = i_st + neighbor; - neighborCell.x = wrapAround(neighborCell.x, float(prop_scale)); - neighborCell.y = wrapAround(neighborCell.y, float(prop_scale)); - - ////vec2 o = random2(i_st + neighbor); - vec2 point = random2(neighborCell); - - point = mix(point, vec2(0.5,0.5), prop_entropy); - - //vec2 r = g + o - f_st; - vec2 diff = neighbor + point - f_st; - - if( dot(mr-diff,mr-diff)>0.00001 )// if they're both their nearest - md = min( md, dot( 0.5*(mr+diff), normalize(diff-mr) ) ); - } - } - - return vec3(md, mr); - } - - vec4 process(vec2 uv) - { - uv *= float(prop_scale); - vec3 c = voronoi(uv); - - vec3 color = vec3(0.0); - - color = mix( vec3(1.0), color, smoothstep( prop_thickness, prop_thickness, c.x ) ); - - if (prop_invert) - color = vec3(1.0) - color; - - return vec4(color * prop_intensity, 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/maprange.ts b/src/lib/library/v1/maprange.ts deleted file mode 100644 index b5b0577a..00000000 --- a/src/lib/library/v1/maprange.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class MapRangeNode extends GpuDesignerNode { - public init() { - this.title = "Map Range"; - - this.addInput("color"); - this.addFloatProperty("in_min", "Input Minimum", 0, 0, 1.0, 0.01); - this.addFloatProperty("in_max", "Input Maximum", 1, 0, 1.0, 0.01); - this.addFloatProperty("out_min", "Output Minimum", 0, 0, 1.0, 0.01); - this.addFloatProperty("out_max", "Output Maximum", 1, 0, 1.0, 0.01); - - const source = ` - vec4 process(vec2 uv) - { - vec4 col = texture(color,uv); - - // color range coming in - float inDiff = prop_in_max - prop_in_min; - col = (col-prop_in_min) / inDiff; - - - float outDiff = prop_out_max - prop_out_min; - col.rgb = prop_out_min + col.rgb * vec3(outDiff); - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/mask.ts b/src/lib/library/v1/mask.ts deleted file mode 100644 index 6becb9a7..00000000 --- a/src/lib/library/v1/mask.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class MaskNode extends GpuDesignerNode { - public init() { - this.title = "Mask"; - - this.addInput("textureA"); - this.addInput("textureB"); - this.addInput("mask"); - - const source = ` - float lum(vec4 col) - { - return (col.r + col.g + col.b) / 3.0; - } - - vec4 process(vec2 uv) - { - vec4 a = texture(textureA, uv); - vec4 b = texture(textureB, uv); - vec4 m = texture(mask, uv); - float t = lum(m); - - // lerp - return a * t + b * (1.0 - t); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/mirror.ts b/src/lib/library/v1/mirror.ts deleted file mode 100644 index 10aaab53..00000000 --- a/src/lib/library/v1/mirror.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class MirrorNode extends GpuDesignerNode { - public init() { - this.title = "Mirror"; - - this.addInput("image"); - - this.addEnumProperty("mode", "Mirror Mode", [ - "Left To Right", - "Right To Left", - "Top To Bottom", - "Bottom To Top" - ]); - this.addFloatProperty("offset", "Offset", 0.5, 0, 1, 0.01); - this.addBoolProperty("clamp", "Clamp", true); - - const source = ` - vec4 process(vec2 uv) - { - // left to right - if (prop_mode == 0) - if (uv.x > prop_offset) - uv.x = prop_offset - (uv.x - prop_offset); - - // right to left - if (prop_mode == 1) - if (uv.x < prop_offset) - uv.x = prop_offset + (prop_offset - uv.x); - - // bottom to top - if (prop_mode == 2) - if (uv.y < prop_offset) - uv.y = prop_offset + (prop_offset - uv.y); - - // top to bottom - if (prop_mode == 3) - if (uv.y > prop_offset) - uv.y = prop_offset - (uv.y - prop_offset); - - - if (prop_clamp) - uv = clamp(uv, vec2(0.0), vec2(1.0)); - vec4 col = texture(image, uv); - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/normalmap.ts b/src/lib/library/v1/normalmap.ts deleted file mode 100644 index 8f0b3b59..00000000 --- a/src/lib/library/v1/normalmap.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// http://www.smart-page.net/smartnormal/js/SmartNormalMapFilter.js -export class NormalMapNode extends GpuDesignerNode { - public init() { - this.title = "Normal Map"; - //this.exportName = "result"; - this.addInput("height"); - - this.addFloatProperty("strength", "Strength", 0.02, -0.02, 0.02, 0.00001); - - const source = ` - vec4 process(vec2 uv) - { - //vec2 size = textureSize(height); - //vec2 size = vec2(1024,1024); // quick hack for now - vec2 step = vec2(1.0,1.0)/_textureSize; - - // center point - float d0 = abs(texture(height, uv + vec2(0.0, 0.0)).r) * prop_strength / 2.0; - - // sample horizontally - float d1 = abs(texture(height, uv + vec2(step.x, 0.0)).r) * prop_strength / 2.0; - float d2 = abs(texture(height, uv + vec2(-step.x, 0.0)).r) * prop_strength / 2.0; - - // sample vertically - float d3 = abs(texture(height, uv + vec2(0.0, step.y)).r) * prop_strength / 2.0; - float d4 = abs(texture(height, uv + vec2(0.0, -step.y)).r) * prop_strength / 2.0; - - // find diff horizontally and average - float dx = ((d2 - d0) + (d0 - d1)) * 0.5; - - // find diff vertically and average - float dy = ((d4 - d0) + (d0 - d3)) * 0.5; - - // calculate normal - //vec3 normal = normalize(vec3(dx * prop_strength, dy * prop_strength, 1.0)); - //vec3 normal = normalize(vec3(dx, dy, 1.0)); - //vec3 final = normal.xyz * 0.5 + 0.5; // bring to 0.0 - 1.0 range - - vec3 dvx = vec3(step.x, 0.0 , d1-d0); - vec3 dvy = vec3(0.0 , step.y, d3-d0); - vec3 normal = normalize(cross(dvx, dvy)); - vec3 final = normal.xyz * 0.5 + 0.5; - - return vec4(final, 1.0); - } - `; - - this.buildShader(source); - } -} - -export class BetterWarpNode extends GpuDesignerNode { - public init() { - this.title = "Better Warp Node"; - //this.exportName = "result"; - this.addInput("image"); - this.addInput("height"); - - this.addFloatProperty("strength", "Strength", 0.001, -0.02, 0.02, 0.00001); - this.addFloatProperty("spread", "Spread", 0.1, 0, 1, 0.01); - - const source = ` - vec4 process(vec2 uv) - { - //vec2 size = textureSize(height); - //vec2 size = vec2(1024,1024); // quick hack for now - vec2 step = vec2(1.0,1.0)/_textureSize; - - // center point - float d0 = abs(texture(height, uv + vec2(0.0, 0.0)).r) * prop_strength / 2.0; - - // sample horizontally - float d1 = abs(texture(height, uv + vec2(step.x, 0.0)).r) * prop_strength / 2.0; - float d2 = abs(texture(height, uv + vec2(-step.x, 0.0)).r) * prop_strength / 2.0; - - // sample vertically - float d3 = abs(texture(height, uv + vec2(0.0, step.y)).r) * prop_strength / 2.0; - float d4 = abs(texture(height, uv + vec2(0.0, -step.y)).r) * prop_strength / 2.0; - - // find diff horizontally and average - float dx = ((d2 - d0) + (d0 - d1)) * 0.5; - - // find diff vertically and average - float dy = ((d4 - d0) + (d0 - d3)) * 0.5; - - // calculate normal - //vec3 normal = normalize(vec3(dx * prop_strength, dy * prop_strength, 1.0)); - //vec3 normal = normalize(vec3(dx, dy, 1.0)); - //vec3 final = normal.xyz * 0.5 + 0.5; // bring to 0.0 - 1.0 range - - vec3 dvx = vec3(step.x, 0.0 , d1-d0); - vec3 dvy = vec3(0.0 , step.y, d3-d0); - vec3 normal = normalize(cross(dvx, dvy)); - //vec3 final = normal.xyz * 0.5 + 0.5; - - float intensity = (1.0 - texture(height, uv).r) * prop_spread; - vec3 colorOut = texture(image, uv + vec2(-normal.x * intensity, -normal.y * intensity) ).rgb; - - return vec4(colorOut, 1.0); - //return vec4(vec3(normal.y), 1.0); - //return vec4(vec3(dot(normal, vec3(0,0,1))), 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/output.ts b/src/lib/library/v1/output.ts deleted file mode 100644 index 8a630805..00000000 --- a/src/lib/library/v1/output.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; - -export class OutputNode extends GpuDesignerNode { - public init() { - this.title = "Output"; - - this.addInput("image"); - this.addStringProperty("name", "Output Name"); - this.addEnumProperty("components", "Components", [ - "RGBA", - "RGB", - "R", - "G", - "B", - "A" - ]); - - this.addEnumProperty("precision", "Precision", [ - "8 Bits Per Component", - "16 Bits Per Component" - ]); - this.addColorProperty("color", "Default Color", new Color()); - - const source = ` - vec4 process(vec2 uv) - { - vec4 col; - if (image_connected) { - col = vec4(0,1,0,1); - col = texture(image, uv); - // return texture(image, uv); - } else { - col = prop_color; - // return prop_color; - } - - if(prop_components == 2) col.rgb = vec3(col.r); - if(prop_components == 3) col.rgb = vec3(col.g); - if(prop_components == 4) col.rgb = vec3(col.b); - if(prop_components == 5) col.rgb = vec3(col.a); - - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/perlin3d.ts b/src/lib/library/v1/perlin3d.ts deleted file mode 100644 index cb08f4f7..00000000 --- a/src/lib/library/v1/perlin3d.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class Perlin3DNode extends GpuDesignerNode { - public init() { - this.title = "Perlin 3D"; - - const source = ` - vec3 mod289(vec3 x) -{ - return x - floor(x * (1.0 / 289.0)) * 289.0; -} - -vec4 mod289(vec4 x) -{ - return x - floor(x * (1.0 / 289.0)) * 289.0; -} - -vec4 permute(vec4 x) -{ - return mod289(((x*34.0)+1.0)*x); -} - -vec4 taylorInvSqrt(vec4 r) -{ - return 1.79284291400159 - 0.85373472095314 * r; -} - -vec3 fade(vec3 t) { - return t*t*t*(t*(t*6.0-15.0)+10.0); -} - -// Classic Perlin noise -float cnoise(vec3 P) -{ - vec3 Pi0 = floor(P); // Integer part for indexing - vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1 - Pi0 = mod289(Pi0); - Pi1 = mod289(Pi1); - vec3 Pf0 = fract(P); // Fractional part for interpolation - vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0 - vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec4 iy = vec4(Pi0.yy, Pi1.yy); - vec4 iz0 = Pi0.zzzz; - vec4 iz1 = Pi1.zzzz; - - vec4 ixy = permute(permute(ix) + iy); - vec4 ixy0 = permute(ixy + iz0); - vec4 ixy1 = permute(ixy + iz1); - - vec4 gx0 = ixy0 * (1.0 / 7.0); - vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5; - gx0 = fract(gx0); - vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); - vec4 sz0 = step(gz0, vec4(0.0)); - gx0 -= sz0 * (step(0.0, gx0) - 0.5); - gy0 -= sz0 * (step(0.0, gy0) - 0.5); - - vec4 gx1 = ixy1 * (1.0 / 7.0); - vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5; - gx1 = fract(gx1); - vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); - vec4 sz1 = step(gz1, vec4(0.0)); - gx1 -= sz1 * (step(0.0, gx1) - 0.5); - gy1 -= sz1 * (step(0.0, gy1) - 0.5); - - vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); - vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); - vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); - vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); - vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); - vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); - vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); - vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); - - vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - float n000 = dot(g000, Pf0); - float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); - float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); - float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); - float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); - float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); - float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); - float n111 = dot(g111, Pf1); - - vec3 fade_xyz = fade(Pf0); - vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); - vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); - float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return 2.2 * n_xyz; -} - -// Classic Perlin noise, periodic variant -float pnoise(vec3 P, vec3 rep) -{ - vec3 Pi0 = mod(floor(P), rep); // Integer part, modulo period - vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); // Integer part + 1, mod period - Pi0 = mod289(Pi0); - Pi1 = mod289(Pi1); - vec3 Pf0 = fract(P); // Fractional part for interpolation - vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0 - vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec4 iy = vec4(Pi0.yy, Pi1.yy); - vec4 iz0 = Pi0.zzzz; - vec4 iz1 = Pi1.zzzz; - - vec4 ixy = permute(permute(ix) + iy); - vec4 ixy0 = permute(ixy + iz0); - vec4 ixy1 = permute(ixy + iz1); - - vec4 gx0 = ixy0 * (1.0 / 7.0); - vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5; - gx0 = fract(gx0); - vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0); - vec4 sz0 = step(gz0, vec4(0.0)); - gx0 -= sz0 * (step(0.0, gx0) - 0.5); - gy0 -= sz0 * (step(0.0, gy0) - 0.5); - - vec4 gx1 = ixy1 * (1.0 / 7.0); - vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5; - gx1 = fract(gx1); - vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1); - vec4 sz1 = step(gz1, vec4(0.0)); - gx1 -= sz1 * (step(0.0, gx1) - 0.5); - gy1 -= sz1 * (step(0.0, gy1) - 0.5); - - vec3 g000 = vec3(gx0.x,gy0.x,gz0.x); - vec3 g100 = vec3(gx0.y,gy0.y,gz0.y); - vec3 g010 = vec3(gx0.z,gy0.z,gz0.z); - vec3 g110 = vec3(gx0.w,gy0.w,gz0.w); - vec3 g001 = vec3(gx1.x,gy1.x,gz1.x); - vec3 g101 = vec3(gx1.y,gy1.y,gz1.y); - vec3 g011 = vec3(gx1.z,gy1.z,gz1.z); - vec3 g111 = vec3(gx1.w,gy1.w,gz1.w); - - vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - float n000 = dot(g000, Pf0); - float n100 = dot(g100, vec3(Pf1.x, Pf0.yz)); - float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z)); - float n110 = dot(g110, vec3(Pf1.xy, Pf0.z)); - float n001 = dot(g001, vec3(Pf0.xy, Pf1.z)); - float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z)); - float n011 = dot(g011, vec3(Pf0.x, Pf1.yz)); - float n111 = dot(g111, Pf1); - - vec3 fade_xyz = fade(Pf0); - vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z); - vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y); - float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return 2.2 * n_xyz; -} - -vec4 process(vec2 uv) -{ - float c = pnoise(vec3(uv * 10.0,10.0), vec3(10.0,10.0,10.0)); - - return vec4(vec3(c), 1.0); -} - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/shapes.ts b/src/lib/library/v1/shapes.ts deleted file mode 100644 index a6a92f1c..00000000 --- a/src/lib/library/v1/shapes.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://thebookofshaders.com/07/ -export class PolygonNode extends GpuDesignerNode { - public init() { - this.title = "Polygon"; - - this.addFloatProperty("radius", "Radius", 0.7, 0, 3, 0.01); - this.addFloatProperty("angle", "Angle", 0, 0.0, 360.0, 1); - this.addIntProperty("sides", "Sides", 5, 0, 20, 1); - this.addFloatProperty("gradient", "Gradient", 0, 0, 1.0, 0.01); - - const source = ` - #define PI 3.14159265359 - #define TWO_PI 6.28318530718 - - float linearstep(float a, float b, float t) - { - if (t <= a) return 0.0; - if (t >= b) return 1.0; - - return (t-a)/(b-a); - } - - vec4 process(vec2 uv) - { - uv = uv *2.-1.; - - // Angle and radius from the current pixel - float a = atan(uv.x,uv.y)+radians(prop_angle); - float r = TWO_PI/float(prop_sides); - - float d = cos(floor(.5+a/r)*r-a)*length(uv) / prop_radius; - - vec3 color = vec3(1.0-linearstep(0.8-prop_gradient,0.8,d)); - - return vec4(color, 1.0); - } - `; - - this.buildShader(source); - } -} - -export class CircleNode extends GpuDesignerNode { - public init() { - this.title = "Circle"; - - this.addFloatProperty("radius", "Radius", 0.4, 0, 1, 0.01); - this.addEnumProperty("color_gen", "Color Generation", [ - "Flat", - "Linear", - "Exponent" - ]); - - const source = ` - vec4 process(vec2 uv) - { - float dist = distance(uv, vec2(0.5)); - if( dist <= prop_radius) { - if (prop_color_gen==0) - return vec4(vec3(1.0), 1.0); - else if (prop_color_gen==1) - return vec4(vec3(1.0 - dist / prop_radius), 1.0); - else if (prop_color_gen==2) - { - float val = dist / prop_radius; - return vec4(vec3(1.0 - val * val), 1.0); - } - - } - - return vec4(vec3(0.0), 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/simplexnoise.ts b/src/lib/library/v1/simplexnoise.ts deleted file mode 100644 index 6b779ae3..00000000 --- a/src/lib/library/v1/simplexnoise.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://thebookofshaders.com/11/ -export class SimplexNoiseNode extends GpuDesignerNode { - public init() { - this.title = "Simplex Noise"; - - this.addFloatProperty("scale", "Scale", 100, 1, 1000, 0.01); - - const source = ` - float random (in vec2 st) { - return fract(sin(dot(st.xy, - vec2(12.9898,78.233))) - * 43758.5453123); - } - - float noise (in vec2 st) { - vec2 i = floor(st); - vec2 f = fract(st); - - // Four corners in 2D of a tile - float a = random(i); - float b = random(i + vec2(1.0, 0.0)); - float c = random(i + vec2(0.0, 1.0)); - float d = random(i + vec2(1.0, 1.0)); - - // Smooth Interpolation - - // Cubic Hermine Curve. Same as SmoothStep() - vec2 u = f*f*(3.0-2.0*f); - // u = smoothstep(0.,1.,f); - - // Mix 4 coorners porcentages - return mix(a, b, u.x) + - (c - a)* u.y * (1.0 - u.x) + - (d - b) * u.x * u.y; - } - - vec2 skew (vec2 st) { - vec2 r = vec2(0.0); - r.x = 1.1547*st.x; - r.y = st.y+0.5*r.x; - return r; - } - - vec3 simplexGrid (vec2 st) { - vec3 xyz = vec3(0.0); - - vec2 p = fract(skew(st)); - if (p.x > p.y) { - xyz.xy = 1.0-vec2(p.x,p.y-p.x); - xyz.z = p.y; - } else { - xyz.yz = 1.0-vec2(p.x-p.y,p.y); - xyz.x = p.x; - } - - return fract(xyz); - } - - vec4 process(vec2 uv) - { - vec3 color = vec3(noise(uv * prop_scale)); - - return vec4(color,1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/solidcell.ts b/src/lib/library/v1/solidcell.ts deleted file mode 100644 index d7bb122f..00000000 --- a/src/lib/library/v1/solidcell.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class SolidCellNode extends GpuDesignerNode { - public init() { - this.title = "Solid Cell"; - - this.addIntProperty("scale", "Scale", 5, 0, 256); - this.addBoolProperty("invert", "Invert", false); - this.addFloatProperty("entropy", "Order", 0, 0, 1, 0.01); - this.addFloatProperty("intensity", "Intensity", 1, 0, 2, 0.01); - - const source = ` - vec2 random2( vec2 p ) { - p += vec2(_seed); - return fract(sin(vec2(dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3))))*43758.5453); - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - vec4 process(vec2 uv) - { - uv *= float(prop_scale); - - vec2 i_st = floor(uv); - vec2 f_st = fract(uv); - - float m_dist = 1.; - vec2 closestPoint = vec2(0.5,0.5); - - for (int y= -1; y <= 1; y++) { - for (int x= -1; x <= 1; x++) { - vec2 neighbor = vec2(float(x),float(y)); - // wraps around cells to make it seamless - vec2 neighborCell = i_st + neighbor; - neighborCell.x = wrapAround(neighborCell.x, float(prop_scale)); - neighborCell.y = wrapAround(neighborCell.y, float(prop_scale)); - - // Random position from current + neighbor place in the grid - vec2 point = random2(neighborCell); - - // entropy is lerping between the center and the random point - point = mix(point, vec2(0.5,0.5), prop_entropy); - - // Animate the point - //point = 0.5 + 0.5*sin(u_time + 6.2831*point); - - // Vector between the pixel and the point - vec2 diff = neighbor + point - f_st; - - // Distance to the point - float dist = length(diff); - - // Keep the closer distance - //m_dist = min(m_dist, dist); - if (dist < m_dist) { - m_dist = dist; - closestPoint = neighborCell; - } - } - } - - vec3 color = vec3(_rand(vec2(_seed)+closestPoint)); - if (prop_invert) - color = vec3(1.0) - color; - - return vec4(color * prop_intensity, 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/splat.ts b/src/lib/library/v1/splat.ts deleted file mode 100644 index 362082ef..00000000 --- a/src/lib/library/v1/splat.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class SplatNode extends GpuDesignerNode { - public init() { - this.title = "Splat"; - - this.addInput("image"); - - this.addIntProperty("count", "Count", 50, 0, 1000, 1); - - const source = ` - // https://github.com/glslify/glsl-inverse/blob/master/index.glsl - // mat3 inverse(mat3 m) { - // float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2]; - // float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2]; - // float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2]; - - // float b01 = a22 * a11 - a12 * a21; - // float b11 = -a22 * a10 + a12 * a20; - // float b21 = a21 * a10 - a11 * a20; - - // float det = a00 * b01 + a01 * b11 + a02 * b21; - - // return mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11), - // b11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10), - // b21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det; - // } - - mat3 transMat(vec2 t) - { - return mat3(vec3(1.0,0.0,0.0), vec3(0.0,1.0,0.0), vec3(t, 1.0)); - } - - mat3 scaleMat(vec2 s) - { - return mat3(vec3(s.x,0.0,0.0), vec3(0.0,s.y,0.0), vec3(0.0, 0.0, 1.0)); - } - - mat3 rotMat(float rot) - { - float r = radians(rot); - return mat3(vec3(cos(r), -sin(r),0.0), vec3(sin(r), cos(r),0.0), vec3(0.0, 0.0, 1.0)); - } - - vec2 transformUV(vec2 uv, vec2 translate, float rot, vec2 scale) - { - mat3 trans = transMat(vec2(0.5, 0.5)) * - transMat(vec2(translate.x, translate.y)) * - rotMat(rot) * - scaleMat(vec2(scale.x, scale.y)) * - transMat(vec2(-0.5, -0.5)); - - vec3 res = inverse(trans) * vec3(uv, 1.0); - uv = res.xy; - - return clamp(uv,vec2(0.0), vec2(1.0)); - } - - float randomFloatRange(int index, float fmin, float fmax) - { - float r = _rand(vec2(_seed) + vec2(float(index) * 0.0001)); - - return fmin + (fmax - fmin) * r; - } - - // if uv is out of bounds then return vec4(0) - vec4 sampleImage(vec2 uv) - { - if (uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0) - return texture(image, uv); - return vec4(0.0); - } - - const int MAX_ITER = 1000; - - // https://stackoverflow.com/questions/38986208/webgl-loop-index-cannot-be-compared-with-non-constant-expression - vec4 process(vec2 uv) - { - vec4 color = vec4(0.0); - for(int i = 0; i= prop_count) - break; - - float x = randomFloatRange(i*10 + 1, -0.5, 0.5); - float y = randomFloatRange(i*13 + 2, -0.5, 0.5); - float r = randomFloatRange(i*15 + 3, 0.0, 360.0); - - vec2 sampleUV = transformUV(uv, vec2(x,y), r, vec2(1.0)); - color += sampleImage(sampleUV); - - //sample 4 sides - sampleUV = transformUV(uv, vec2(x,y) + vec2(-1.0, 0.0), r, vec2(1.0)); - color += sampleImage(sampleUV); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 1.0, 0.0), r, vec2(1.0)); - color += sampleImage(sampleUV); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 0.0, 1.0), r, vec2(1.0)); - color += sampleImage(sampleUV); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 0.0, -1.0), r, vec2(1.0)); - color += sampleImage(sampleUV); - } - - //color = color / vec4(float(prop_count)); - - return color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/threshold.ts b/src/lib/library/v1/threshold.ts deleted file mode 100644 index 7df1af5d..00000000 --- a/src/lib/library/v1/threshold.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class ThresholdNode extends GpuDesignerNode { - public init() { - this.title = "Threshold"; - - this.addInput("image"); - - this.addFloatProperty("threshold", "Threshold", 0.0, 0.0, 1.0, 0.01); - this.addBoolProperty("invert", "Invert", true); - - const source = ` - vec4 process(vec2 uv) - { - vec4 a = texture(image, uv); - - if (prop_invert) - a.rgb = step(1.0 - prop_threshold, a.rgb); - else - a.rgb = step(prop_threshold, a.rgb); - - return a; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/tile.ts b/src/lib/library/v1/tile.ts deleted file mode 100644 index e5392289..00000000 --- a/src/lib/library/v1/tile.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class TileNode extends GpuDesignerNode { - public init() { - this.title = "Tile"; - - this.addInput("image"); - - this.addFloatProperty("offset", "Offset", 0.5, 0, 1, 0.1); - - // brick size - this.addFloatProperty("brickWidth", "Tile Width", 1.0, 0, 1, 0.01); - this.addFloatProperty("brickHeight", "Tile Height", 1.0, 0, 1, 0.01); - - this.addFloatProperty("rows", "Rows", 6, 1, 20, 1); - this.addFloatProperty("columns", "Columns", 6, 1, 20, 1); - - const source = ` - // offset for alternating rows - - vec2 is_brick(vec2 pos) - { - vec2 brickSize = vec2(prop_brickWidth, prop_brickHeight); - - vec2 edgeSize = (vec2(1.0) - brickSize) * vec2(0.5); - vec2 brick = vec2(0.0); - - if (pos.x > edgeSize.x && pos.x < (1.0 - edgeSize.x)) - brick.x = 1.0; - - if (pos.y > edgeSize.y && pos.y < (1.0 - edgeSize.y)) - brick.y = 1.0; - - return brick; - } - - vec4 process(vec2 uv) - { - float offset = prop_offset; - vec2 tileSize = vec2(prop_rows, prop_columns); - vec2 pos = uv * tileSize; - - float xOffset = 0.0; - if (fract(pos.y * 0.5) > 0.5) { - xOffset = offset; - } - pos.x += xOffset; - - // a brick's id would be floor(pos) - // this gives us its origin - // this can act as a random seed for the entire brick - vec2 brickId = floor(pos);// - vec2(xOffset, 0); - - // wrap around x - if (brickId.x > tileSize.x-1.0) - brickId.x = 0.0; - - // this brings it to the range of 0 - 1 - // perfect for sampling texture - pos = fract(pos); - - vec2 isBrick =is_brick(pos); - vec4 col = texture(image, pos); - - return vec4(col.rgb, isBrick.x * isBrick.y * col.a); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/transform2d.ts b/src/lib/library/v1/transform2d.ts deleted file mode 100644 index ae162168..00000000 --- a/src/lib/library/v1/transform2d.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class Transform2DNode extends GpuDesignerNode { - public init() { - this.title = "Transform2D"; - - this.addInput("image"); - - this.addFloatProperty("translateX", "Translate X", 0, -1.0, 1.0, 0.01); - this.addFloatProperty("translateY", "Translate Y", 0, -1.0, 1.0, 0.01); - - this.addFloatProperty("scaleX", "Scale X", 1, -2.0, 2.0, 0.01); - this.addFloatProperty("scaleY", "Scale Y", 1, -2.0, 2.0, 0.01); - - this.addFloatProperty("rot", "Rotation", 0, 0.0, 360.0, 0.01); - - this.addBoolProperty("clamp", "Clamp", true); - - const source = ` - // https://github.com/glslify/glsl-inverse/blob/master/index.glsl - // mat3 inverse(mat3 m) { - // float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2]; - // float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2]; - // float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2]; - - // float b01 = a22 * a11 - a12 * a21; - // float b11 = -a22 * a10 + a12 * a20; - // float b21 = a21 * a10 - a11 * a20; - - // float det = a00 * b01 + a01 * b11 + a02 * b21; - - // return mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11), - // b11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10), - // b21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det; - // } - - mat2 buildScale(float sx, float sy) - { - return mat2(sx, 0.0, 0.0, sy); - } - - // rot is in degrees - mat2 buildRot(float rot) - { - float r = radians(rot); - return mat2(cos(r), -sin(r), sin(r), cos(r)); - } - - mat3 transMat(vec2 t) - { - return mat3(vec3(1.0,0.0,0.0), vec3(0.0,1.0,0.0), vec3(t, 1.0)); - } - - mat3 scaleMat(vec2 s) - { - return mat3(vec3(s.x,0.0,0.0), vec3(0.0,s.y,0.0), vec3(0.0, 0.0, 1.0)); - } - - mat3 rotMat(float rot) - { - float r = radians(rot); - return mat3(vec3(cos(r), -sin(r),0.0), vec3(sin(r), cos(r),0.0), vec3(0.0, 0.0, 1.0)); - } - - vec4 process(vec2 uv) - { - // transform by (-0.5, -0.5) - // scale - // rotate - // transform - // transform by (0.5, 0.5) - - mat3 trans = transMat(vec2(0.5, 0.5)) * - transMat(vec2(prop_translateX, prop_translateY)) * - rotMat(prop_rot) * - scaleMat(vec2(prop_scaleX, prop_scaleY)) * - transMat(vec2(-0.5, -0.5)); - - vec3 res = inverse(trans) * vec3(uv, 1.0); - uv = res.xy; - - - if (prop_clamp) - return texture(image, clamp(uv,vec2(0.0), vec2(1.0))); - return texture(image, uv); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/warp.ts b/src/lib/library/v1/warp.ts deleted file mode 100644 index ad97002d..00000000 --- a/src/lib/library/v1/warp.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class WarpNode extends GpuDesignerNode { - public init() { - this.title = "Warp"; - - this.addInput("inputImage"); - this.addInput("height"); - - this.addFloatProperty("intensity", "Intensity", 0.1, -1.0, 1.0, 0.01); - - // calculates normal, then warps uv by it - const source = ` - vec4 process(vec2 uv) - { - vec2 step = vec2(1.0,1.0)/_textureSize; - vec4 warpCol = texture(height, uv); - float warp = (warpCol.r + warpCol.g + warpCol.b) / 3.0; - - vec4 color = texture(inputImage, uv + (vec2(warp) - 0.5) * vec2(1.0, -1.0) * prop_intensity); - - return color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v1/wave.ts b/src/lib/library/v1/wave.ts deleted file mode 100644 index 4e3f00a0..00000000 --- a/src/lib/library/v1/wave.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class WaveNode extends GpuDesignerNode { - public init() { - this.title = "Wave"; - - this.addIntProperty("xfrequency", "X Frequency", 1, 0, 20, 1); - this.addIntProperty("yfrequency", "Y Frequency", 0, 0, 20, 1); - this.addFloatProperty("phase", "Phase Offset", 0.0, 0.0, 3.142, 0.01); - this.addFloatProperty("amp", "Amplitude", 0.5, 0.0, 1.0, 0.01); - - // calculates normal, then warps uv by it - const source = ` - vec4 process(vec2 uv) - { - float fx = uv.x * 3.142 * 2.0 * float(prop_xfrequency); - float fy = uv.y * 3.142 * 2.0 * float(prop_yfrequency); - float wave = sin(fx + fy + prop_phase) * prop_amp; - - // bring wave to range 0...1 - wave = wave * 0.5 + 0.5; - - return vec4(vec3(wave), 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/advancesplatter.ts b/src/lib/library/v2/advancesplatter.ts deleted file mode 100644 index dd336047..00000000 --- a/src/lib/library/v2/advancesplatter.ts +++ /dev/null @@ -1,191 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class AdvanceSplatterV2 extends GpuDesignerNode { - public init() { - this.title = "Advance Splatter"; - - this.addInput("image"); - this.addInput("mask"); - this.addInput("size"); - this.addInput("intensity"); - - this.addIntProperty("count", "Count", 50, 0, 1000, 1); - this.addFloatProperty("rot", "Rotation", 0, 0, 360, 0.1); - - this.addFloatProperty("intensityRand", "Random Intensity", 0, 0, 1.0, 0.01); - - this.addFloatProperty("scale", "Scale", 1, 0, 4, 0.1); - this.addFloatProperty("scaleRand", "Scale random", 0, 0, 1, 0.1); - - this.addEnumProperty("blendType", "Blend Type", ["Max", "Add"]); - - const source = ` - // https://github.com/glslify/glsl-inverse/blob/master/index.glsl - // mat3 inverse(mat3 m) { - // float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2]; - // float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2]; - // float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2]; - - // float b01 = a22 * a11 - a12 * a21; - // float b11 = -a22 * a10 + a12 * a20; - // float b21 = a21 * a10 - a11 * a20; - - // float det = a00 * b01 + a01 * b11 + a02 * b21; - - // return mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11), - // b11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10), - // b21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det; - // } - - mat3 transMat(vec2 t) - { - return mat3(vec3(1.0,0.0,0.0), vec3(0.0,1.0,0.0), vec3(t, 1.0)); - } - - mat3 scaleMat(vec2 s) - { - return mat3(vec3(s.x,0.0,0.0), vec3(0.0,s.y,0.0), vec3(0.0, 0.0, 1.0)); - } - - mat3 rotMat(float rot) - { - float r = radians(rot); - return mat3(vec3(cos(r), -sin(r),0.0), vec3(sin(r), cos(r),0.0), vec3(0.0, 0.0, 1.0)); - } - - vec2 transformUV(vec2 uv, vec2 translate, float rot, vec2 scale) - { - mat3 trans = transMat(vec2(0.5, 0.5)) * - transMat(vec2(translate.x, translate.y)) * - rotMat(rot) * - scaleMat(vec2(scale.x, scale.y)) * - transMat(vec2(-0.5, -0.5)); - - vec3 res = inverse(trans) * vec3(uv, 1.0); - uv = res.xy; - - return clamp(uv,vec2(0.0), vec2(1.0)); - } - - float randomFloatRange(int index, float fmin, float fmax) - { - float r = _rand(vec2(_seed) + vec2(float(index) * 0.0001)); - - return fmin + (fmax - fmin) * r; - } - - // if uv is out of bounds then return vec4(0) - vec4 sampleImage(sampler2D image, vec2 uv) - { - if (uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0) - return texture(image, uv); - return vec4(0.0); - } - - float calcIntensity(int i, vec2 uv) - { - // intensity - float intens = 1.0; - // multiply by texture if available - if (intensity_connected) { - intens *= texture(intensity, uv).r; - } - // random intensity per tile - float randIntensity = randomFloatRange(i*17 + 8, 0.0, 1.0); - - // lerp between random intensity and one by image ( or 1.0 ) - intens = mix(intens, randIntensity, prop_intensityRand); - - return intens; - } - - vec2 calcScale(int i, vec2 uv) - { - float s = prop_scale; - if (size_connected) { - s *= texture(size, uv).r; - } - - float randScale = randomFloatRange(i*11 + 6, 0.0, 1.0); - - s = mix(s, randScale, prop_scaleRand); - - return vec2(s); - } - - vec4 blend(vec4 colA, vec4 colB) - { - vec4 col = vec4(1.0); - if (prop_blendType==0) // max - col.rgb = max(colA.rgb, colB.rgb); - if (prop_blendType==1) // add - col.rgb = colA.rgb + colB.rgb; - - return col; - } - - const int MAX_ITER = 1000; - - // https://stackoverflow.com/questions/38986208/webgl-loop-index-cannot-be-compared-with-non-constant-expression - vec4 process(vec2 uv) - { - vec4 color = vec4(0.0, 0.0, 0.0, 1.0); - for(int i = 0; i= prop_count) - break; - - float x = randomFloatRange(i*10 + 1, -0.5, 0.5); - float y = randomFloatRange(i*13 + 2, -0.5, 0.5); - float r = randomFloatRange(i*15 + 3, 0.0, 360.0) + prop_rot; - // float s = 1.0; - - //vec2 center = transformUV(vec2(0.5, 0.5), vec2(x,y), r, vec2(1.0)); - - if (mask_connected) { - float mask = texture(mask, vec2(x,y) + vec2(0.5)).r; - if (mask < 0.001f) - continue; - } - - // if (size_connected) { - // s = s * texture(size, vec2(x,y) + vec2(0.5)).r; - // } - - vec2 s = calcScale(i, vec2(x,y) + vec2(0.5)); - - float intens = calcIntensity(i, vec2(x,y) + vec2(0.5)); - - vec2 sampleUV = transformUV(uv, vec2(x,y), r, s); - color = blend(color, sampleImage(image, sampleUV) * intens); - - // sample 4 sides - sampleUV = transformUV(uv, vec2(x,y) + vec2(-1.0, 0.0), r, s); - color = blend(color, sampleImage(image, sampleUV) * intens); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 1.0, 0.0), r, s); - color = blend(color, sampleImage(image, sampleUV) * intens); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 0.0, 1.0), r, s); - color = blend(color, sampleImage(image, sampleUV) * intens); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 0.0, -1.0), r, s); - color = blend(color, sampleImage(image, sampleUV) * intens); - - // sample 4 diagonal sides - sampleUV = transformUV(uv, vec2(x,y) + vec2(-1.0, 1.0), r, s); - color = blend(color, sampleImage(image, sampleUV) * intens); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 1.0, 1.0), r, s); - color = blend(color, sampleImage(image, sampleUV) * intens); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 1.0, 1.0), r, s); - color = blend(color, sampleImage(image, sampleUV) * intens); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 1.0, -1.0), r, s); - color = blend(color, sampleImage(image, sampleUV) * intens); - } - - //color = color / vec4(float(prop_count)); - - return color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/anisotropicblur.ts b/src/lib/library/v2/anisotropicblur.ts deleted file mode 100644 index f4d17dc2..00000000 --- a/src/lib/library/v2/anisotropicblur.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// uses single pass gaussian -// https://www.shadertoy.com/view/4tSyzy -// https://stackoverflow.com/questions/2157920/why-define-pi-4atan1-d0 -export class AnisotropicBlur extends GpuDesignerNode { - public init() { - this.title = "Anisotropic Blur"; - - this.addInput("image"); - - this.addFloatProperty("intensity", "Intensity", 2, 0, 10, 0.1); - this.addFloatProperty("anisotropy", "Anisotropy", 0.7, 0, 1.0, 0.1); - this.addIntProperty("samples", "Samples", 50, 0, 100, 1); - this.addFloatProperty("angle", "Angle", 0, 0, 360, 1); - - const source = ` - #define pow2(x) (x * x) - - const float pi = atan(1.0) * 4.0; - - float gaussian(vec2 i, float sigma) { - return 1.0 / (2.0 * pi * pow2(sigma)) * exp(-((pow2(i.x) + pow2(i.y)) / (2.0 * pow2(sigma)))); - } - - mat2 buildRot(float rot) - { - float r = radians(rot); - return mat2(cos(r), -sin(r), sin(r), cos(r)); - } - - vec3 blur(sampler2D sp, vec2 uv, vec2 scale) { - vec3 col = vec3(0.0); - float accum = 0.0; - float weight; - vec2 offset; - - float sigma = float(prop_samples) * 0.25; - float aniso = 1.0 - prop_anisotropy; - - for (int x = -prop_samples / 2; x < prop_samples / 2; ++x) { - for (int y = -prop_samples / 2; y < prop_samples / 2; ++y) { - offset = vec2(x, y); - weight = gaussian(offset, sigma); - - offset.y *= aniso; - offset = buildRot(prop_angle) * offset; - - col += texture(sp, uv + scale * offset).rgb * weight; - accum += weight; - } - } - - return col / accum; - } - - vec4 process(vec2 uv) - { - if (!image_connected) - return vec4(0,0,0,1.0); - - vec4 color = vec4(0.0); - vec2 ps = vec2(1.0, 1.0) / _textureSize; - color.rgb = blur(image, uv, ps * prop_intensity); - color.a = 1.0; - - return color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/bevel.ts b/src/lib/library/v2/bevel.ts deleted file mode 100644 index 22ee3ae9..00000000 --- a/src/lib/library/v2/bevel.ts +++ /dev/null @@ -1,285 +0,0 @@ -import { NodeRenderContext } from "@/lib/designer"; -import { TextureDataType } from "@/lib/designer/gl"; -import { FloatProperty } from "@/lib/designer/properties"; -import { TextureDataConverter } from "@/lib/designer/texturedataconverter"; -import { DesignerNode } from "../../designer/designernode"; - -// https://xjavascript.com/view/639466/read-pixels-in-webgltexture-rendering-webgl-to-texture -export class Bevel extends DesignerNode { - f: Float64Array; - z: Float64Array; - v: Uint16Array; - grid: Float64Array; - gridInner: Float64Array; - gridOuter: Float64Array; - - // working pixels - resultPixels: Float32Array; - readPixels: Float32Array; - - readFbo: WebGLFramebuffer; - - distanceProp: FloatProperty; - - width: number; - height: number; - - converter: TextureDataConverter; - - public init() { - this.title = "Bevel"; - - this.addInput("image"); - - this.distanceProp = this.addFloatProperty( - "distance", - "Distance", - 50.0, - 0.0, - 100.0, - 0.01 - ); - - this.initArrays(); - - // create framebuffer for reading pixels from input texture - this.readFbo = this.gl.createFramebuffer(); - this.converter = new TextureDataConverter( - this.gl as WebGL2RenderingContext - ); - } - - private initArrays() { - const width = this.designer.width; - const height = this.designer.height; - this.width = width; - this.height = height; - - let size = Math.max(width, height); - - // make it span 3 textures wide to get wrapping - this.f = new Float64Array(size * 3); - this.z = new Float64Array(size * 3 + 1); - this.v = new Uint16Array(size * 3); - - // convert image to float64 array - let gridSize = width * height; - this.grid = new Float64Array(gridSize); - this.gridOuter = new Float64Array(gridSize); - this.gridInner = new Float64Array(gridSize); - this.resultPixels = new Float32Array(width * height * 4); - this.readPixels = new Float32Array(width * height * 4); - } - - public render(context: NodeRenderContext) { - const inputs = context.inputs; - - if (inputs.length == 0) return; - - let inputTexture = inputs[0].node.tex; - - if ( - this.designer.width != this.width || - this.designer.height != this.height - ) { - // this.width = this.designer.width; - // this.height = this.designer.height; - - this.initArrays(); - } - - const width = this.designer.width; - const height = this.designer.height; - const gridOuter = this.gridOuter; - const gridInner = this.gridInner; - const grid = this.grid; - - let gridSize = width * height; - let gl = context.gl as WebGL2RenderingContext; - - // gl.bindFramebuffer(gl.FRAMEBUFFER, this.readFbo); - // gl.framebufferTexture2D( - // gl.FRAMEBUFFER, - // gl.COLOR_ATTACHMENT0, - // gl.TEXTURE_2D, - // inputTexture, - // 0 - // ); - // if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) == gl.FRAMEBUFFER_COMPLETE) { - // gl.readPixels( - // 0, - // 0, - // width, - // height, - // gl.RGBA, - // gl.HALF_FLOAT, - // this.readPixels - // ); - // } else { - // alert("Bevel: unable to read from FBO"); - // } - // gl.bindFramebuffer(gl.FRAMEBUFFER, null); - - this.readPixels = new Float32Array( - this.converter.getData( - inputTexture, - width, - height, - TextureDataType.Float32 - ) - ); - - // max value from each color component - const VALUE_MAX = 15360.0; - let pixels = this.readPixels; - - // copy data over from canvas data to grid - for (let i = 0; i < gridSize; i++) { - // let col = 0; - // col += VALUE_MAX - pixels[i * 4 + 0]; - // col += VALUE_MAX - pixels[i * 4 + 1]; - // col += VALUE_MAX - pixels[i * 4 + 2]; - // let a = (col * 0.3333) / VALUE_MAX; - - // just use the red component - let a = pixels[i * 4 + 0]; - - //let a = 1.0 - (col * 0.3333) / 255; // invert - this.gridOuter[i] = - a === 1 ? 0 : a === 0 ? INF : Math.pow(Math.max(0, 0.5 - a), 2); - this.gridInner[i] = - a === 1 ? INF : a === 0 ? 0 : Math.pow(Math.max(0, a - 0.5), 2); - } - - edt(this.gridOuter, width, height, this.f, this.v, this.z); - edt(this.gridInner, width, height, this.f, this.v, this.z); - - let min = 1.0; - let max = 0; - let radius = this.distanceProp.getValue(); - let offset = 0.25; - - for (let i = 0; i < gridSize; i++) { - // let col = grid[i]; - let d = Math.sqrt(gridOuter[i]) - Math.sqrt(gridInner[i]); - //var col = 255 - 255 * (d / 50 + 0.25); - var col = VALUE_MAX - VALUE_MAX * (d / radius + offset); - // clamp - col = Math.max(0, Math.min(VALUE_MAX, col)); - - min = Math.min(min, col); - max = Math.max(max, col); - grid[i] = col; - } - - let range = max - min; - let scale = 1.0 / range; - // console.log(min, max, range, scale); - - let resultPixels = this.resultPixels; - for (let i = 0; i < gridSize; i++) { - //let col = (grid[i] - min) * scale; - let col = 1.0 - (grid[i] - min) * scale; // de-invert - - resultPixels[i * 4 + 0] = col; - resultPixels[i * 4 + 1] = col; - resultPixels[i * 4 + 2] = col; - resultPixels[i * 4 + 3] = 1.0; - } - - gl.bindTexture(gl.TEXTURE_2D, this.tex); - - const level = 0; - const internalFormat = gl.RGBA16F; - const border = 0; - const format = gl.RGBA; - const type = gl.FLOAT; - const data = resultPixels; - gl.texImage2D( - gl.TEXTURE_2D, - level, - internalFormat, - this.designer.width, - this.designer.height, - border, - format, - type, - data - ); - - // set the filtering so we don't need mips - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); - - gl.bindTexture(gl.TEXTURE_2D, null); - } -} - -// todo: find better algorithm -// https://github.com/parmanoir/Meijster-distance -// https://github.com/scijs/distance-transform - -// https://github.com/mapbox/tiny-sdf/blob/master/index.js#L60 -// https://observablehq.com/@mourner/fast-distance-transform - -var INF = 1e20; - -// 2D Euclidean squared distance transform by Felzenszwalb & Huttenlocher https://cs.brown.edu/~pff/papers/dt-final.pdf -function edt( - data: Float64Array, - width: number, - height: number, - f: Float64Array, - v: Uint16Array, - z: Float64Array -) { - for (let x = 0; x < width; x++) edt1d(data, x, width, height, f, v, z); - for (let y = 0; y < height; y++) edt1d(data, y * width, 1, width, f, v, z); -} - -// 1D squared distance transform -function edt1d( - grid: Float64Array, - offset: number, - stride: number, - length: number, - f: Float64Array, - v: Uint16Array, - z: Float64Array -) { - let q, k, s, r; - v[0] = 0; - z[0] = -INF; - z[1] = INF; - - // load line in array for convenient access - // do it three times - for (q = 0; q < length; q++) f[q] = grid[offset + q * stride]; - for (q = 0; q < length; q++) f[q + length] = grid[offset + q * stride]; - for (q = 0; q < length; q++) - f[q + length + length] = grid[offset + q * stride]; - - for (q = 1, k = 0, s = 0; q < length * 3; q++) { - do { - r = v[k]; - s = (f[q] - f[r] + q * q - r * r) / (q - r) / 2; - // todo: wrap k in z[k] and make --k > -length - } while (s <= z[k] && --k > -1); - - k++; - v[k] = q; - z[k] = s; - z[k + 1] = INF; - } - - // only cope over mid section - // |----|----|----| - // ^ - for (q = length, k = 0; q < length + length; q++) { - while (z[k + 1] < q) k++; - r = v[k]; - grid[offset + (q - length) * stride] = f[r] + (q - r) * (q - r); - } -} diff --git a/src/lib/library/v2/blur.ts b/src/lib/library/v2/blur.ts deleted file mode 100644 index 0576250e..00000000 --- a/src/lib/library/v2/blur.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// uses single pass gaussian -// https://www.shadertoy.com/view/4tSyzy -// https://stackoverflow.com/questions/2157920/why-define-pi-4atan1-d0 -export class BlurV2 extends GpuDesignerNode { - public init() { - this.title = "Blur"; - - this.addInput("image"); - - this.addFloatProperty("intensity", "Intensity", 1, 0, 10, 0.1); - this.addIntProperty("samples", "Samples", 50, 0, 100, 1); - - const source = ` - #define pow2(x) (x * x) - - const float pi = atan(1.0) * 4.0; - - float gaussian(vec2 i, float sigma) { - return 1.0 / (2.0 * pi * pow2(sigma)) * exp(-((pow2(i.x) + pow2(i.y)) / (2.0 * pow2(sigma)))); - } - - vec3 blur(sampler2D sp, vec2 uv, vec2 scale) { - vec3 col = vec3(0.0); - float accum = 0.0; - float weight; - vec2 offset; - - float sigma = float(prop_samples) * 0.25; - - for (int x = -prop_samples / 2; x < prop_samples / 2; ++x) { - for (int y = -prop_samples / 2; y < prop_samples / 2; ++y) { - offset = vec2(x, y); - weight = gaussian(offset, sigma); - col += texture(sp, uv + scale * offset).rgb * weight; - accum += weight; - } - } - - return col / accum; - } - - vec4 process(vec2 uv) - { - if (!image_connected) - return vec4(0,0,0,1.0); - - vec4 color = vec4(0.0); - vec2 ps = vec2(1.0, 1.0) / _textureSize; - color.rgb = blur(image, uv, ps * prop_intensity); - color.a = 1.0; - - return color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/capsule.ts b/src/lib/library/v2/capsule.ts deleted file mode 100644 index 059f62c5..00000000 --- a/src/lib/library/v2/capsule.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://thebookofshaders.com/07/ -export class CapsuleNode extends GpuDesignerNode { - public init() { - this.title = "Capsule"; - - this.addFloatProperty("radius", "Radius", 0.2, 0, 1.0, 0.01); - this.addFloatProperty("topRadius", "Top Radius", 0.0, 0.0, 0.5, 0.01); - this.addFloatProperty("bottomRadius", "Bottom Radius", 0.0, 0, 0.5, 0.01); - this.addFloatProperty("length", "Length", 0.6, 0, 2.0, 0.01); - this.addFloatProperty("gradient", "Gradient", 0, 0, 1.0, 0.01); - - const source = ` - #define PI 3.14159265359 - #define TWO_PI 6.28318530718 - - float linearstep(float a, float b, float t) - { - if (t <= a) return 0.0; - if (t >= b) return 1.0; - - return (t-a)/(b-a); - } - - // https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm - float sdUnevenCapsule( vec2 p, float r1, float r2, float h ) - { - p.x = abs(p.x); - float b = (r1-r2)/h; - float a = sqrt(1.0-b*b); - float k = dot(p,vec2(-b,a)); - if( k < 0.0 ) return length(p) - r1; - if( k > a*h ) return length(p-vec2(0.0,h)) - r2; - return dot(p, vec2(a,b) ) - r1; - } - - vec4 process(vec2 uv) - { - uv = uv *2.-1.; - uv.y += prop_length * 0.5; - - float d = sdUnevenCapsule(uv, prop_bottomRadius, prop_topRadius, prop_length); - - vec3 color = vec3(1.0-linearstep(prop_radius-prop_gradient, prop_radius, d)); - //vec3 color = vec3(d); - - return vec4(color, 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/cartesiantopolar.ts b/src/lib/library/v2/cartesiantopolar.ts deleted file mode 100644 index cb7fcef1..00000000 --- a/src/lib/library/v2/cartesiantopolar.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; -import { Gradient } from "@/lib/designer/gradient"; - -// https://www.mathsisfun.com/polar-cartesian-coordinates.html -export class CartesianToPolar extends GpuDesignerNode { - public init() { - this.title = "Cartesian To Polar"; - - this.addInput("image"); - - this.addFloatProperty("yscale", "Y Scale", 1.0, 0, 4.0, 0.01); - this.addIntProperty("xtile", "X Tile", 2, 0, 5, 1); - this.addFloatProperty("angle_offset", "Angle Offset", 0.0, 0, 360, 1.0); - // this.addBoolProperty("clamp", "Clamp", false); - - const source = ` - const float PI = 3.142; - vec4 process(vec2 uv) - { - vec2 dir = uv - vec2(0.5, 0.5); - float y = length(dir) * 2.0 * prop_yscale; - - float x = atan(dir.y, dir.x); - x = (x + PI) / (PI * 2.0); // bring to range 0..1 - x += (prop_angle_offset / 360.0); - x = x * float(prop_xtile); - - vec4 col = texture(image, vec2(x, y)); - - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/circularsplatter.ts b/src/lib/library/v2/circularsplatter.ts deleted file mode 100644 index bd86ab3f..00000000 --- a/src/lib/library/v2/circularsplatter.ts +++ /dev/null @@ -1,368 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class CircularSplatter extends GpuDesignerNode { - public init() { - this.title = "Circular Splatter"; - - this.addInput("image"); - this.addInput("mask"); - this.addInput("size"); - this.addInput("intensity"); - - this.addIntProperty("count", "Count", 10, 0, 50, 1); - this.addIntProperty("rings", "Rings", 1, 0, 5, 1); - - this.addEnumProperty("blendType", "Blend Type", ["Max", "Add"]); - - this.addFloatProperty("radius", "Radius", 0.3, 0, 1.0, 0.01); - this.addFloatProperty("spacing", "Spacing", 1.0, 0, 2.0, 0.01); - this.addFloatProperty( - "spiralInfluence", - "Spiral Influence", - 0.0, - 0.0, - 1.0, - 0.01 - ); - this.addBoolProperty("reverseSpiral", "Reverse Spiral Direction", false); - - // ROTATION - const rotProp = this.createGroup("Rotation"); - rotProp.collapsed = false; - rotProp.add(this.addFloatProperty("rot", "Rotation", 0, 0, 360, 0.1)); - rotProp.add( - this.addFloatProperty("rotRand", "Random Rotation", 0.0, 0.0, 1.0, 0.01) - ); - rotProp.add( - this.addFloatProperty("ringRot", "Ring Rotation", 0, 0, 360, 0.1) - ); - rotProp.add( - this.addFloatProperty( - "ringRotRand", - "Ring Rotation Random", - 0.0, - 0.0, - 1.0, - 0.01 - ) - ); - rotProp.add( - this.addFloatProperty( - "ringRotOffset", - "Ring Rotation Offset", - 0.0, - 0.0, - 1.0, - 0.01 - ) - ); - rotProp.add( - this.addBoolProperty("pivotCenter", "Pivot Orientation From Center", true) - ); - - // INTENSITY - const intensityProp = this.createGroup("Intensity"); - intensityProp.collapsed = false; - intensityProp.add( - this.addFloatProperty( - "intensityRand", - "Random Intensity", - 0, - 0, - 1.0, - 0.01 - ) - ); - intensityProp.add( - this.addFloatProperty( - "intensityByRing", - "Intensity By Ring", - 0, - 0, - 1.0, - 0.01 - ) - ); - intensityProp.add( - this.addBoolProperty( - "invertIntensityByRing", - "Invert Intensity By Ring", - true - ) - ); - intensityProp.add( - this.addFloatProperty( - "intensityByAngle", - "Intensity By Angle", - 0, - 0, - 1.0, - 0.01 - ) - ); - intensityProp.add( - this.addBoolProperty( - "invertIntensityByAngle", - "Invert Intensity By Angle", - true - ) - ); - - // SCALE - const scaleProp = this.createGroup("Scale"); - scaleProp.collapsed = false; - scaleProp.add( - this.addFloatProperty("inputSize", "Input Size", 0.1, 0, 1, 0.01) - ); - scaleProp.add(this.addFloatProperty("scale", "Scale", 1, 0, 1, 0.01)); - scaleProp.add( - this.addFloatProperty("scaleRand", "Scale random", 0, 0, 1, 0.01) - ); - - scaleProp.add( - this.addFloatProperty("scaleByRing", "Scale By Ring", 0, 0, 1.0, 0.01) - ); - scaleProp.add( - this.addBoolProperty("invertScaleByRing", "Scale Intensity By Ring", true) - ); - scaleProp.add( - this.addFloatProperty("scaleByAngle", "Scale By Angle", 0, 0, 1.0, 0.01) - ); - scaleProp.add( - this.addBoolProperty( - "invertScaleByAngle", - "Scale Intensity By Angle", - true - ) - ); - - const source = ` - mat3 transMat(vec2 t) - { - return mat3(vec3(1.0,0.0,0.0), vec3(0.0,1.0,0.0), vec3(t, 1.0)); - } - - mat3 scaleMat(vec2 s) - { - return mat3(vec3(s.x,0.0,0.0), vec3(0.0,s.y,0.0), vec3(0.0, 0.0, 1.0)); - } - - mat3 rotMat(float rot) - { - float r = radians(rot); - return mat3(vec3(cos(r), -sin(r),0.0), vec3(sin(r), cos(r),0.0), vec3(0.0, 0.0, 1.0)); - } - - vec2 transformUV(vec2 uv, vec2 translate, float rot, vec2 scale) - { - mat3 trans = transMat(vec2(0.5, 0.5)) * - transMat(vec2(translate.x, translate.y)) * - rotMat(rot) * - scaleMat(vec2(scale.x, scale.y)) * - transMat(vec2(-0.5, -0.5)); - - vec3 res = inverse(trans) * vec3(uv, 1.0); - uv = res.xy; - - return clamp(uv,vec2(0.0), vec2(1.0)); - } - - float randomFloatRange(int index, float fmin, float fmax) - { - float r = _rand(vec2(_seed) + vec2(float(index) * 0.0001)); - - return fmin + (fmax - fmin) * r; - } - - float randomFloatRange(vec2 seed, float fmin, float fmax) - { - float r = _rand(vec2(_seed) + vec2(seed * 0.0001)); - - return fmin + (fmax - fmin) * r; - } - - // if uv is out of bounds then return vec4(0) - vec4 sampleImage(sampler2D image, vec2 uv) - { - if (uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0) - return texture(image, uv); - return vec4(0.0); - } - - float calcIntensity(int i, vec2 uv, float radialFactor, float invRadialFactor, float angleFactor) - { - // intensity - float intens = 1.0; - // multiply by texture if available - if (intensity_connected) { - intens *= texture(intensity, uv).r; - } - // random intensity per tile - // float randIntensity = randomFloatRange(uv, 0.0, 1.0); - float randIntensity = randomFloatRange(i*13 + 9, 0.0, 1.0); - - // lerp between random intensity and one by image ( or 1.0 ) - intens = mix(intens, randIntensity, prop_intensityRand); - - // multiply by radial factor - float intensityRadialFactor = 1.0; - if (prop_invertIntensityByRing) - intensityRadialFactor = mix(1.0, invRadialFactor, prop_intensityByRing); - else - intensityRadialFactor = mix(1.0, radialFactor, prop_intensityByRing); - - intens *= intensityRadialFactor; - - // multiply by angle factor - float intensityAngleFactor = 1.0; - if (prop_invertIntensityByAngle) - intensityAngleFactor = mix(1.0, (1.0 - angleFactor), prop_intensityByAngle); - else - intensityAngleFactor = mix(1.0, angleFactor, prop_intensityByAngle); - - intens *= intensityAngleFactor; - - return intens; - } - - vec2 calcScale(int i, vec2 uv, float radialFactor, float invRadialFactor, float angleFactor) - { - float s = prop_scale; - if (size_connected) { - s *= texture(size, uv).r; - } - - float randScale = randomFloatRange(i*11 + 6, 0.0, 1.0); - //float randScale = randomFloatRange(uv, 0.0, 1.0); - - s = mix(s, randScale, prop_scaleRand); - - // multiply by radial factor - float scaleRadialFactor = 1.0; - if (prop_invertScaleByRing) - scaleRadialFactor = mix(1.0, invRadialFactor, prop_scaleByRing); - else - scaleRadialFactor = mix(1.0, radialFactor, prop_scaleByRing); - - s *= scaleRadialFactor; - - // multiply by angle factor - float scaleAngleFactor = 1.0; - if (prop_invertScaleByAngle) - scaleAngleFactor = mix(1.0, (1.0 - angleFactor), prop_scaleByAngle); - else - scaleAngleFactor = mix(1.0, angleFactor, prop_scaleByAngle); - - s *= scaleAngleFactor; - - return vec2(s) * prop_inputSize; - } - - vec4 blend(vec4 colA, vec4 colB) - { - vec4 col = vec4(1.0); - if (prop_blendType==0) // max - col.rgb = max(colA.rgb, colB.rgb); - if (prop_blendType==1) // add - col.rgb = colA.rgb + colB.rgb; - - return col; - } - - // https://stackoverflow.com/questions/38986208/webgl-loop-index-cannot-be-compared-with-non-constant-expression - vec4 process(vec2 uv) - { - vec4 color = vec4(0.0, 0.0, 0.0, 1.0); - float spacing = prop_radius/float(prop_rings); - float angle_spacing = 360.0/float(prop_count); - - // calculate rings from the outside going in - for(int ring = 0; ring = []; - width: number; - height: number; - results: Float32Array; - - constructor() {} - - init(width: number, height: number) { - this.width = width; - this.height = height; - - let visited = this.visited; - visited.length = width * height; - - this.results = new Float32Array(width * height * 4); - } - - process(pixels: Uint16Array) { - let threshold = 0.1; - - // allocate image of same size to track visited pixels - let visited = this.visited; - for (let i = 0; i < visited.length; i++) visited[i] = false; - - let width = this.width; - let height = this.height; - - this.rects = []; - for (let y = 0; y < height; y++) { - for (let x = 0; x < width; x++) { - if (visited[y * width + x] == true) continue; - - this.captureIsland(x, y, pixels, width, height, visited); - } - } - - this.renderOutput(this.results); - } - - captureIsland( - x: number, - y: number, - pixels: Uint16Array, - width: number, - height: number, - visited: Array - ) { - let rect: Box = new Box(); - rect.negativeInfinity(); - - // this queue contains coords in a global space - // i.e. values can be negative or larger than the - // texture size - let queue: Vector[] = [new Vector(x, y)]; - while (queue.length > 0) { - let globalPixel = queue.shift(); - // should never happen - if (!globalPixel) continue; - - let pixel = this.mapPixelToLocal(globalPixel, width, height); - - // skip if already visited - if (visited[pixel.y * width + pixel.x] == true) continue; - - visited[pixel.y * width + pixel.x] = true; - - // 0.1 or less denotes a dark pixel - // skip this - let intensity = this.getIntensity( - pixel.x, - pixel.y, - pixels, - width, - height - ); - if (intensity < 0.1) { - continue; - } - - // ok it's a white enough pixel, add it's neighbors to the queue - // and expand the rect - rect.expand(globalPixel.x, globalPixel.y); - rect.pixels.push( - new FloodFillPixel(pixel.x, pixel.y, globalPixel.x, globalPixel.y) - ); - - queue.push(new Vector(globalPixel.x + 1, globalPixel.y + 0)); - queue.push(new Vector(globalPixel.x - 1, globalPixel.y + 0)); - queue.push(new Vector(globalPixel.x + 0, globalPixel.y + 1)); - queue.push(new Vector(globalPixel.x + 0, globalPixel.y - 1)); - } - - if (rect.width <= 0 || rect.height <= 0) return; - - this.rects.push(rect); - } - - mapPixelToLocal(globalPixel: Vector, width: number, height: number): Vector { - return new Vector( - wrapAround(globalPixel.x, width), - wrapAround(globalPixel.y, height) - ); - } - - getIntensity( - x: number, - y: number, - data: Uint16Array, - width: number, - height: number - ): number { - let col = 0; - col += data[4 * (width * y + x) + 0]; - col += data[4 * (width * y + x) + 1]; - col += data[4 * (width * y + x) + 2]; - - // average map to 0.0 - 1.0 - let intensity = col * (1.0 / 3.0) * ONE_OVER_VALUE_MAX; - - return intensity; - } - - renderRects(canvas: HTMLCanvasElement) { - let ctx = canvas.getContext("2d"); - if (!ctx) return; - - ctx.strokeStyle = "red"; - ctx.lineWidth = 1; - - for (let rect of this.rects) { - ctx.strokeRect(rect.x, rect.y, rect.width, rect.height); - } - } - - renderOutput(results: Float32Array) { - let width = this.width; - let height = this.height; - - // clear results first - for (let i = 0; i < results.length; i++) results[i] = 0; - - for (let rect of this.rects) { - let sx = rect.width * (1.0 / width); // * 255; - let sy = rect.height * (1.0 / height); // * 255; - - for (let pixel of rect.pixels) { - let u = (pixel.globalX - rect.left) / rect.width; // * 255; - let v = (pixel.globalY - rect.top) / rect.height; // * 255; - - setColorAtPixel( - results, - width, - height, - pixel.localX, - pixel.localY, - u, - v, - sx, - sy - ); - //setColorAtPixel(data, pixel.x, pixel.y, 255, 0, 0, 255); - } - } - } -} - -// https://stackoverflow.com/questions/14325750/using-mod-to-wrap-around -// upperBound is never touchec -function wrapAround(value: number, upperBound: number) { - return (value + upperBound - 1) % upperBound; -} - -// https://codepen.io/Geeyoam/pen/vLGZzG -function getColorAtPixel(imageData: ImageData, x: number, y: number) { - const { width, data } = imageData; - - return { - r: data[4 * (width * y + x) + 0], - g: data[4 * (width * y + x) + 1], - b: data[4 * (width * y + x) + 2], - a: data[4 * (width * y + x) + 3] - }; -} - -function setColorAtPixel( - data: Float32Array, - width: number, - height: number, - x: number, - y: number, - r: number, - g: number, - b: number, - a: number -) { - data[4 * (width * y + x) + 0] = r; - data[4 * (width * y + x) + 1] = g; - data[4 * (width * y + x) + 2] = b; - data[4 * (width * y + x) + 3] = a; -} diff --git a/src/lib/library/v2/floodfillsampler.ts b/src/lib/library/v2/floodfillsampler.ts deleted file mode 100644 index 499c7873..00000000 --- a/src/lib/library/v2/floodfillsampler.ts +++ /dev/null @@ -1,174 +0,0 @@ -import { Color } from "@/lib/designer/color"; -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class FloodFillSampler extends GpuDesignerNode { - public init() { - this.title = "Flood Fill Sampler"; - - this.addInput("floodfill"); - this.addInput("image"); - this.addInput("mask"); - this.addInput("size"); - this.addInput("intensity"); - - this.addFloatProperty("rot", "Rotation", 0, 0, 360, 0.1); - this.addFloatProperty("rotRand", "Random Rotation", 0, 0, 1.0, 0.01); - this.addFloatProperty("posRand", "Random Position", 0, 0, 1.0, 0.01); - this.addFloatProperty("intensityRand", "Random Intensity", 0, 0, 1.0, 0.01); - this.addFloatProperty("scale", "Scale", 1, 0, 4, 0.1); - this.addFloatProperty("scaleRand", "Scale random", 0, 0, 1, 0.1); - - this.addIntProperty("precision", "Precision", 2, 1, 3, 1); - - this.addColorProperty("bg", "Background Color", new Color()); - - const source = ` - - mat3 transMat(vec2 t) - { - return mat3(vec3(1.0,0.0,0.0), vec3(0.0,1.0,0.0), vec3(t, 1.0)); - } - - mat3 scaleMat(vec2 s) - { - return mat3(vec3(s.x,0.0,0.0), vec3(0.0,s.y,0.0), vec3(0.0, 0.0, 1.0)); - } - - mat3 rotMat(float rot) - { - float r = radians(rot); - return mat3(vec3(cos(r), -sin(r),0.0), vec3(sin(r), cos(r),0.0), vec3(0.0, 0.0, 1.0)); - } - - vec2 transformUV(vec2 uv, vec2 translate, float rot, vec2 scale) - { - mat3 trans = transMat(vec2(0.5, 0.5)) * - transMat(vec2(translate.x, translate.y)) * - rotMat(rot) * - scaleMat(vec2(scale.x, scale.y)) * - transMat(vec2(-0.5, -0.5)); - - vec3 res = inverse(trans) * vec3(uv, 1.0); - uv = res.xy; - - return clamp(uv,vec2(0.0), vec2(1.0)); - } - - float randomFloatRange(vec2 center, int offset, float fmin, float fmax) - { - float r = _rand(vec2(_seed) + center + vec2(float(offset)) * 0.01); - - return fmin + (fmax - fmin) * r; - } - - // if uv is out of bounds then return vec4(0) - vec4 sampleImage(sampler2D image, vec2 uv) - { - if (uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0) - return texture(image, uv); - return vec4(prop_bg.rgb, 1.0); - } - - float calcIntensity(vec2 center) - { - // intensity - float intens = 1.0; - // multiply by texture if available - if (intensity_connected) { - intens *= texture(intensity, center).r; - } - // random intensity per tile - float randIntensity = randomFloatRange(center, 8, 0.0, 1.0); - - // lerp between random intensity and one by image ( or 1.0 ) - intens = mix(intens, randIntensity, prop_intensityRand); - - return intens; - } - - vec2 calcRandomOffset(vec2 center) - { - float randPosX = randomFloatRange(center, 4, -1.0, 1.0); - float randPosY = randomFloatRange(center, 5, -1.0, 1.0); - vec2 randPos = normalize(vec2(randPosX, randPosY)) * prop_posRand; - return vec2(randPos.x, randPos.y); - } - - vec2 calcScale(vec2 center) - { - float s = prop_scale; - if (size_connected) { - s *= texture(size, center).r; - } - - float randScale = randomFloatRange(center, 3, 0.0, 1.0); - // lerp between random scale and one by image ( or 1.0 ) - s = mix(s, randScale, prop_scaleRand); - - return vec2(s); - } - - vec2 calcFloodFillOrigin(vec2 uv, vec4 pixelData) - { - // pixelPos box width pixel uv to box - return uv - pixelData.ba * pixelData.rg; - } - - vec2 calcFloodFillCenter(vec2 uv, vec4 pixelData) - { - vec2 origin = calcFloodFillOrigin(uv, pixelData); - origin += pixelData.ba * vec2(0.5); - - return origin; - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - // https://forum.processing.org/two/discussion/13586/how-to-round-a-float-to-its-second-or-third-decimal - float floatRound(float number, int place) { - float rounder = 1.0 / float(place); - return number - mod(number, rounder); - } - - vec4 process(vec2 uv) - { - vec4 pixelData = texture(floodfill, uv); - if (pixelData.ba == vec2(0.0, 0.0)) - return vec4(prop_bg.rgb, 1.0); - - vec2 center = calcFloodFillCenter(uv, pixelData); - - // convert to local - center.x = wrapAround(center.x, 1.0); - center.y = wrapAround(center.y, 1.0); - - // quantize center to remove minor innaccuracies - // the hash function is very sensitive to even small changes - int place = int(pow(float(10), float(prop_precision))); - center.x = floatRound(center.x, place); - center.y = floatRound(center.y, place); - - vec2 t = calcRandomOffset(center); - float intens = calcIntensity(center); - float r = randomFloatRange(center, 3, -180.0, 180.0) * prop_rotRand + prop_rot; - - if (mask_connected) { - float mask = texture(mask, center).r; - if (mask < 0.001f) - return vec4(prop_bg.rgb, 1.0); - } - - vec2 s = calcScale(center); - - vec2 finalUv = transformUV(pixelData.rg, t, r, s); - vec3 color = texture(image, finalUv).rgb; - - return vec4(color * intens, 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/floodfilltobbox.ts b/src/lib/library/v2/floodfilltobbox.ts deleted file mode 100644 index ba9bb90c..00000000 --- a/src/lib/library/v2/floodfilltobbox.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class FloodFillToBBox extends GpuDesignerNode { - public init() { - this.title = "Flood Fill To BBox"; - - this.addInput("floodfill"); - - this.addEnumProperty("function", "Function", [ - "max(x,y)", - "min(x,y)", - "x", - "y", - "length(x,y)" - ]); - - const source = ` - vec4 process(vec2 uv) - { - vec4 pixelData = texture(floodfill, uv); - if (pixelData.ba == vec2(0.0, 0.0)) - return vec4(0.0, 0.0, 0.0, 1.0); - - float intensity = 0.0; - - if (prop_function==0) - intensity = max(pixelData.b, pixelData.a); - else if (prop_function==1) - intensity = min(pixelData.b, pixelData.a); - else if (prop_function==2) - intensity = pixelData.b; - else if (prop_function==3) - intensity = pixelData.a; - else if (prop_function==4) - intensity = sqrt(pixelData.b * pixelData.b + pixelData.a * pixelData.a); - - return vec4(vec3(intensity), 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/floodfilltocolor.ts b/src/lib/library/v2/floodfilltocolor.ts deleted file mode 100644 index fc979799..00000000 --- a/src/lib/library/v2/floodfilltocolor.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class FloodFillToColor extends GpuDesignerNode { - public init() { - this.title = "Flood Fill To Color"; - - this.addInput("floodfill"); - this.addInput("color"); - - this.addIntProperty("precision", "Precision", 2, 1, 3, 1); - - let prop = this.addEnumProperty("source", "Sample Origin", [ - "Top-Left", - "Center" - ]); - - const source = ` - vec2 calcFloodFillOrigin(vec2 uv, vec4 pixelData) - { - // pixelPos box width pixel uv to box - return uv - pixelData.ba * pixelData.rg; - } - - vec2 calcFloodFillCenter(vec2 uv, vec4 pixelData) - { - vec2 origin = calcFloodFillOrigin(uv, pixelData); - origin += pixelData.ba * vec2(0.5); - - return origin; - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - // https://forum.processing.org/two/discussion/13586/how-to-round-a-float-to-its-second-or-third-decimal - float floatRound(float number, int place) { - float rounder = 1.0 / float(place); - return number - mod(number, rounder); - } - - vec4 process(vec2 uv) - { - vec4 pixelData = texture(floodfill, uv); - if (pixelData.ba == vec2(0.0, 0.0)) - return vec4(0.0, 0.0, 0.0, 1.0); - - // sampling origin as opposed to center because of precison - // issues that comes with the division - vec2 center; - if (prop_source == 0) - center = calcFloodFillOrigin(uv, pixelData); - else if (prop_source == 1) - center = calcFloodFillCenter(uv, pixelData); - - // convert to local - center.x = wrapAround(center.x, 1.0); - center.y = wrapAround(center.y, 1.0); - - // quantize center to remove minor innaccuracies - // the hash function is very sensitive to even small changes - int place = int(pow(float(10), float(prop_precision))); - center.x = floatRound(center.x, place); - center.y = floatRound(center.y, place); - - vec4 color = texture(color, center); - - return color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/floodfilltogradient.ts b/src/lib/library/v2/floodfilltogradient.ts deleted file mode 100644 index 8be3f6af..00000000 --- a/src/lib/library/v2/floodfilltogradient.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class FloodFillToGradient extends GpuDesignerNode { - public init() { - this.title = "Flood Fill To Gradient"; - - this.addInput("floodfill"); - - this.addFloatProperty("angle", "Angle", 0, 0, 360, 1); - this.addFloatProperty("variation", "Angle Variation", 0, 0, 1.0, 0.05); - this.addIntProperty("precision", "Precision", 2, 1, 3, 1); - - const source = ` - vec2 calcFloodFillOrigin(vec2 uv, vec4 pixelData) - { - // pixelPos box width pixel uv to box - return uv - pixelData.ba * pixelData.rg; - } - - vec2 calcFloodFillCenter(vec2 uv, vec4 pixelData) - { - vec2 origin = calcFloodFillOrigin(uv, pixelData); - origin += pixelData.ba * vec2(0.5); - - return origin; - } - - mat2 buildRot(float rot) - { - float r = radians(rot); - return mat2(cos(r), -sin(r), sin(r), cos(r)); - } - - // https://github.com/g-truc/glm/blob/master/glm/gtx/projection.inl - float distAlongDir(vec2 x, vec2 dir) - { - return dot(x, dir) / dot(dir, dir); - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - // https://forum.processing.org/two/discussion/13586/how-to-round-a-float-to-its-second-or-third-decimal - float floatRound(float number, int place) { - float rounder = 1.0 / float(place); - return number - mod(number, rounder); - } - - vec4 process(vec2 uv) - { - vec4 pixelData = texture(floodfill, uv); - if (pixelData.ba == vec2(0.0, 0.0)) - return vec4(0.0, 0.0, 0.0, 1.0); - - - vec2 origin = calcFloodFillOrigin(uv, pixelData); - vec2 center = calcFloodFillCenter(uv, pixelData); - - vec2 originSeed; - int place = int(pow(float(10), float(prop_precision))); - originSeed.x = wrapAround(origin.x, 1.0); - originSeed.y = wrapAround(origin.y, 1.0); - originSeed.x = floatRound(originSeed.x, place); - originSeed.y = floatRound(originSeed.y, place); - - float rotRand = _rand(vec2(_seed) + originSeed * vec2(0.01)); - float addedRot = rotRand * 360.0 * prop_variation; - - float radius = length(origin - center); - vec2 dir = buildRot(prop_angle + addedRot) * vec2(-radius, 0); - vec2 centerToUv = uv - center; - - // project originToUv along dir to get gradiant (range -1.0 to 1.0) - float grad = distAlongDir(centerToUv, dir); - - // map to 0.0 to 1.0 - grad = grad * 0.5 + 0.5; - //grad = grad * 2.0 - 1.0; - - return vec4(vec3(grad), 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/floodfilltorandomcolor.ts b/src/lib/library/v2/floodfilltorandomcolor.ts deleted file mode 100644 index 9f3094c1..00000000 --- a/src/lib/library/v2/floodfilltorandomcolor.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class FloodFillToRandomColor extends GpuDesignerNode { - public init() { - this.title = "Flood Fill To Random Color"; - - this.addInput("floodfill"); - this.addIntProperty("precision", "Precision", 2, 1, 3, 1); - - const source = ` - vec2 calcFloodFillOrigin(vec2 uv, vec4 pixelData) - { - // pixelPos box width pixel uv to box - return uv - pixelData.ba * pixelData.rg; - } - - vec2 calcFloodFillCenter(vec2 uv, vec4 pixelData) - { - vec2 origin = calcFloodFillOrigin(uv, pixelData); - // this is the source of the lack of precision!! - origin += pixelData.ba * vec2(0.5); - - return origin; - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - // https://forum.processing.org/two/discussion/13586/how-to-round-a-float-to-its-second-or-third-decimal - float floatRound(float number, int place) { - float rounder = 1.0 / float(place); - return number - mod(number, rounder); - } - - vec4 process(vec2 uv) - { - vec4 pixelData = texture(floodfill, uv); - if (pixelData.ba == vec2(0.0, 0.0)) - return vec4(0.0, 0.0, 0.0, 1.0); - - vec2 center = calcFloodFillOrigin(uv, pixelData); - - // convert to local - center.x = wrapAround(center.x, 1.0); - center.y = wrapAround(center.y, 1.0); - - // quantize center to remove minor innaccuracies - // the hash function is very sensitive to even small changes - int place = int(pow(float(10), float(prop_precision))); - center.x = floatRound(center.x, place); - center.y = floatRound(center.y, place); - - vec4 color = vec4(0.0, 0.0, 0.0, 1.0); - color.r = _rand(vec2(_seed) + center + (vec2(1) ) * vec2(0.01)); - color.g = _rand(vec2(_seed) + center + (vec2(2) ) * vec2(0.01)); - color.b = _rand(vec2(_seed) + center + (vec2(3) ) * vec2(0.01)); - - return color; - //return vec4(center.x, center.y, 0.0, 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/floodfilltorandomintensity.ts b/src/lib/library/v2/floodfilltorandomintensity.ts deleted file mode 100644 index 1c36c0fe..00000000 --- a/src/lib/library/v2/floodfilltorandomintensity.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class FloodFillToRandomIntensity extends GpuDesignerNode { - public init() { - this.title = "Flood Fill To Random Intensity"; - - this.addInput("floodfill"); - this.addIntProperty("precision", "Precision", 2, 1, 3, 1); - - const source = ` - vec2 calcFloodFillOrigin(vec2 uv, vec4 pixelData) - { - // pixelPos box width pixel uv to box - return uv - pixelData.ba * pixelData.rg; - } - - vec2 calcFloodFillCenter(vec2 uv, vec4 pixelData) - { - vec2 origin = calcFloodFillOrigin(uv, pixelData); - origin += pixelData.ba * vec2(0.5); - - return origin; - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - // https://forum.processing.org/two/discussion/13586/how-to-round-a-float-to-its-second-or-third-decimal - float floatRound(float number, int place) { - float rounder = 1.0 / float(place); - return number - mod(number, rounder); - } - - vec4 process(vec2 uv) - { - vec4 pixelData = texture(floodfill, uv); - if (pixelData.ba == vec2(0.0, 0.0)) - return vec4(0.0, 0.0, 0.0, 1.0); - - vec2 center = calcFloodFillOrigin(uv, pixelData); - - // convert to local - center.x = wrapAround(center.x, 1.0); - center.y = wrapAround(center.y, 1.0); - - // quantize center to remove minor innaccuracies - // the hash function is very sensitive to even small changes - int place = int(pow(float(10), float(prop_precision))); - center.x = floatRound(center.x, place); - center.y = floatRound(center.y, place); - - vec4 color = vec4(0.0, 0.0, 0.0, 1.0); - color.rgb = vec3(_rand(vec2(_seed) + center + (vec2(1) ) * vec2(0.01))); - - return color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/gradientdynamic.ts b/src/lib/library/v2/gradientdynamic.ts deleted file mode 100644 index e28a51b5..00000000 --- a/src/lib/library/v2/gradientdynamic.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class GradientDynamic extends GpuDesignerNode { - public init() { - this.title = "Gradient Dynamic"; - - this.addInput("image"); - this.addInput("gradient"); - - this.addFloatProperty("position", "Position", 0, 0, 1, 0.01); - - this.addEnumProperty("orientation", "Gradient Direction", [ - "Vertical", - "Horizontal" - ]); - - const source = ` - vec4 process(vec2 uv) - { - float t = 0.0; - - float intensity = texture(image, uv).r; - - vec4 col = vec4(0); - if (prop_orientation == 0) - col = texture(gradient, vec2(prop_position, intensity)); - else - col = texture(gradient, vec2(intensity, prop_position)); - - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/gradientnoise.ts b/src/lib/library/v2/gradientnoise.ts deleted file mode 100644 index 614e2d3d..00000000 --- a/src/lib/library/v2/gradientnoise.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://www.shadertoy.com/view/XdXGW8 -export class GradientNoise extends GpuDesignerNode { - public init() { - this.title = "Gradient Noise"; - - this.addIntProperty("scale", "Scale", 20, 1, 1000, 1); - this.addIntProperty("scaleX", "Scale X", 1, 1, 5, 1); - this.addIntProperty("scaleY", "Scale Y", 1, 1, 5, 1); - - const source = ` - vec2 hash( vec2 x ) // replace this by something better - { - const vec2 k = vec2( 0.3183099, 0.3678794 ); - x = x*k + k.yx; - return -1.0 + 2.0*fract( 16.0 * k*fract( x.x*x.y*(x.x+x.y)) ); - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - vec2 wrapAndHash(vec2 value, vec2 upperBounds) { - value.x = wrapAround(value.x, upperBounds.x); - value.y = wrapAround(value.y, upperBounds.y); - - return -1.0 + 2.0 * hash22(value + vec2(_seed)); - } - - float noise( in vec2 p ) - { - vec2 i = floor( p ); - vec2 f = fract( p ); - - vec2 u = f*f*(3.0-2.0*f); - - vec2 bounds = vec2(float(prop_scaleX), float(prop_scaleY)) * float(prop_scale); - - return mix( mix( dot( wrapAndHash( i + vec2(0.0,0.0), bounds ), f - vec2(0.0,0.0) ), - dot( wrapAndHash( i + vec2(1.0,0.0), bounds ), f - vec2(1.0,0.0) ), u.x), - mix( dot( wrapAndHash( i + vec2(0.0,1.0), bounds ), f - vec2(0.0,1.0) ), - dot( wrapAndHash( i + vec2(1.0,1.0), bounds ), f - vec2(1.0,1.0) ), u.x), u.y); - } - - vec4 process(vec2 uv) - { - float f = noise(uv * vec2(float(prop_scaleX), float(prop_scaleY)) * float(prop_scale)); - - // adjust range - f = 0.5 + 0.5 * f; - - vec3 color = vec3(f); - - return vec4(color,1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/gradientnoisefractalsum.ts b/src/lib/library/v2/gradientnoisefractalsum.ts deleted file mode 100644 index 56094791..00000000 --- a/src/lib/library/v2/gradientnoisefractalsum.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://www.shadertoy.com/view/XdXGW8 -export class GradientNoiseFractalSum extends GpuDesignerNode { - public init() { - this.title = "Gradient Noise Fractal Sum"; - - this.addIntProperty("scale", "Scale", 8, 1, 100, 1); - this.addIntProperty("layers", "Layers", 5, 1, 20, 1); - this.addFloatProperty("gain", "Gain", 0.5, 0.1, 2, 0.1); - this.addFloatProperty("lacunarity", "Lacunarity", 2.0, 0.1, 2, 0.1); - - const source = ` - vec2 hash( vec2 x ) // replace this by something better - { - const vec2 k = vec2( 0.3183099, 0.3678794 ); - x = x*k + k.yx; - return -1.0 + 2.0*fract( 16.0 * k*fract( x.x*x.y*(x.x+x.y)) ); - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - vec2 wrapAndHash(vec2 value, vec2 upperBounds) { - value.x = wrapAround(value.x, upperBounds.x); - value.y = wrapAround(value.y, upperBounds.y); - - return -1.0 + 2.0 * hash22(value + vec2(_seed)); - } - - float noise( in vec2 p ) - { - vec2 i = floor( p ); - vec2 f = fract( p ); - - vec2 u = f*f*(3.0-2.0*f); - - vec2 bounds = vec2(float(prop_scale)); - - return mix( mix( dot( wrapAndHash( i + vec2(0.0,0.0), bounds ), f - vec2(0.0,0.0) ), - dot( wrapAndHash( i + vec2(1.0,0.0), bounds ), f - vec2(1.0,0.0) ), u.x), - mix( dot( wrapAndHash( i + vec2(0.0,1.0), bounds ), f - vec2(0.0,1.0) ), - dot( wrapAndHash( i + vec2(1.0,1.0), bounds ), f - vec2(1.0,1.0) ), u.x), u.y); - } - - vec4 process(vec2 uv) - { - - float scale = float(prop_scale); - float amplitude = 1.0; - - float sum = 0.0; - - for(int i = 0; i < prop_layers; i++) { - sum += noise(uv * float(scale)) * amplitude; - - scale *= prop_lacunarity; - amplitude *= prop_gain; - } - - // adjust range - sum = 0.5 + 0.5 * sum; - - vec3 color = vec3(sum); - - return vec4(color,1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/grayscale.ts b/src/lib/library/v2/grayscale.ts deleted file mode 100644 index ff269822..00000000 --- a/src/lib/library/v2/grayscale.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; -import { Gradient } from "@/lib/designer/gradient"; - -export class Grayscale extends GpuDesignerNode { - public init() { - this.title = "Grayscale"; - - this.addInput("image"); - - const source = ` - vec4 process(vec2 uv) - { - // grayscale input color - vec4 col = texture(image, uv); - - col.rgb = vec3((col.r + col.g + col.b) * 0.3333333); - - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/histogramscan.ts b/src/lib/library/v2/histogramscan.ts deleted file mode 100644 index 97d5fb5e..00000000 --- a/src/lib/library/v2/histogramscan.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class HistogramScan extends GpuDesignerNode { - public init() { - this.title = "Histogram Scan"; - - this.addInput("image"); - - this.addFloatProperty("position", "Position", 0.5, 0.0, 1.0, 0.01); - this.addFloatProperty("contrast", "Contrast", 0.01, 0.01, 1.0, 0.01); - this.addBoolProperty("invert", "Invert", false); - - const source = ` - vec4 process(vec2 uv) - { - vec4 a = texture(image, uv); - - vec3 col = a.rgb; - - vec3 diff = abs(col - vec3(prop_position)); - diff = clamp(diff, 0.0, prop_contrast); - - vec3 result = diff * (1.0 / prop_contrast); - - if(prop_invert) - return vec4(result, a.a); - else - return vec4(vec3(1.0) - result, a.a); - } - `; - - this.buildShader(source); - } -} - -// SHADERTOY - -// void mainImage( out vec4 fragColor, in vec2 fragCoord ) -// { -// // Normalized pixel coordinates (from 0 to 1) -// vec2 uv = fragCoord/iResolution.xy; - -// vec3 col = vec3(uv.x); - -// float contrast = 0.01; -// float position = 0.7; -// vec3 diff = abs(col - vec3(position)); -// diff = clamp(diff, 0.0, contrast); - -// vec3 result = diff * (1.0 / contrast); - -// // Output to screen -// //fragColor = vec4(vec3( 1.0 - result),1.0); -// //fragColor = vec4(vec3(result),1.0); -// fragColor = vec4(vec3(1.0) - result,1.0); -// } diff --git a/src/lib/library/v2/histogramselect.ts b/src/lib/library/v2/histogramselect.ts deleted file mode 100644 index d444069f..00000000 --- a/src/lib/library/v2/histogramselect.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class HistogramSelect extends GpuDesignerNode { - public init() { - this.title = "Histogram Select"; - - this.addInput("image"); - - this.addFloatProperty("position", "Position", 0.5, 0.0, 1.0, 0.01); - this.addFloatProperty("range", "Range", 0.1, 0.0, 1.0, 0.01); - this.addFloatProperty("contrast", "Contrast", 0.01, 0.01, 1.0, 0.01); - this.addBoolProperty("invert", "Invert", false); - - const source = ` - vec4 process(vec2 uv) - { - vec4 a = texture(image, uv); - - vec3 col = a.rgb; - - vec3 diff = abs(col - vec3(prop_position)); - diff -= vec3(prop_range); - diff = clamp(diff, 0.0, prop_contrast); - - vec3 result = diff * (1.0 / prop_contrast); - - if(prop_invert) - return vec4(result, a.a); - else - return vec4(vec3(1.0) - result, a.a); - } - `; - - this.buildShader(source); - } -} - -// SHADERTOY - -// void mainImage( out vec4 fragColor, in vec2 fragCoord ) -// { -// // Normalized pixel coordinates (from 0 to 1) -// vec2 uv = fragCoord/iResolution.xy; - -// vec3 col = vec3(uv.x); - -// float contrast = 0.01; -// float position = 0.7; -// vec3 diff = abs(col - vec3(position)); -// diff = clamp(diff, 0.0, contrast); - -// vec3 result = diff * (1.0 / contrast); - -// // Output to screen -// //fragColor = vec4(vec3( 1.0 - result),1.0); -// //fragColor = vec4(vec3(result),1.0); -// fragColor = vec4(vec3(1.0) - result,1.0); -// } diff --git a/src/lib/library/v2/histogramshift.ts b/src/lib/library/v2/histogramshift.ts deleted file mode 100644 index 83f4101a..00000000 --- a/src/lib/library/v2/histogramshift.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class HistogramShift extends GpuDesignerNode { - public init() { - this.title = "Histogram Shift"; - - this.addInput("image"); - - this.addFloatProperty("position", "Position", 0.0, 0.0, 1.0, 0.01); - - const source = ` - vec4 process(vec2 uv) - { - vec4 a = texture(image, uv); - - // shows artifacts for pixels at 1 when position is at 0 - a.rgb = mod(a.rgb + vec3(prop_position), vec3(1.0)); - - return a; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/hsl.ts b/src/lib/library/v2/hsl.ts deleted file mode 100644 index 5ae514aa..00000000 --- a/src/lib/library/v2/hsl.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; -import { Gradient } from "@/lib/designer/gradient"; - -// https://www.shadertoy.com/view/XljGzV -// https://www.rapidtables.com/convert/color/rgb-to-hsl.html -// https://gist.github.com/yiwenl/745bfea7f04c456e0101 -export class Hsl extends GpuDesignerNode { - public init() { - this.title = "HSL"; - - this.addInput("image"); - - this.addFloatProperty("hue", "Hue Offset", 0.0, -0.5, 0.5, 0.01); - this.addFloatProperty("sat", "Saturation Offset", 0.0, -0.5, 0.5, 0.01); - this.addFloatProperty( - "lightness", - "Lightness Offset", - 0.0, - -0.5, - 0.5, - 0.01 - ); - - const source = ` - - vec3 hsl2rgb( in vec3 c ) - { - vec3 rgb = clamp( abs(mod(c.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0 ); - - return c.z + c.y * (rgb-0.5)*(1.0-abs(2.0*c.z-1.0)); - } - - vec3 rgb2hsl( in vec3 c ){ - float h = 0.0; - float s = 0.0; - float l = 0.0; - float r = c.r; - float g = c.g; - float b = c.b; - float cMin = min( r, min( g, b ) ); - float cMax = max( r, max( g, b ) ); - - l = ( cMax + cMin ) / 2.0; - if ( cMax > cMin ) { - float cDelta = cMax - cMin; - - //s = l < .05 ? cDelta / ( cMax + cMin ) : cDelta / ( 2.0 - ( cMax + cMin ) ); Original - s = l < .0 ? cDelta / ( cMax + cMin ) : cDelta / ( 2.0 - ( cMax + cMin ) ); - - if ( r == cMax ) { - h = ( g - b ) / cDelta; - } else if ( g == cMax ) { - h = 2.0 + ( b - r ) / cDelta; - } else { - h = 4.0 + ( r - g ) / cDelta; - } - - if ( h < 0.0) { - h += 6.0; - } - h = h / 6.0; - } - return vec3( h, s, l ); - } - - vec4 process(vec2 uv) - { - // grayscale input color - vec4 col = texture(image, uv); - - vec3 hsl = rgb2hsl(col.rgb); - - hsl.x += prop_hue; - hsl.y += prop_sat; - hsl.z += prop_lightness; - - vec3 rgb = hsl2rgb(hsl); - - return vec4(rgb, 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/hslextract.ts b/src/lib/library/v2/hslextract.ts deleted file mode 100644 index ed2b8fa0..00000000 --- a/src/lib/library/v2/hslextract.ts +++ /dev/null @@ -1,73 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; -import { Gradient } from "@/lib/designer/gradient"; - -// https://www.shadertoy.com/view/XljGzV -// https://www.rapidtables.com/convert/color/rgb-to-hsl.html -// https://gist.github.com/yiwenl/745bfea7f04c456e0101 -export class HslExtract extends GpuDesignerNode { - public init() { - this.title = "HSL Extract"; - - this.addInput("image"); - - let prop = this.addEnumProperty("source", "Source", [ - "Hue", - "Saturation", - "Lightness" - ]); - - const source = ` - - vec3 rgb2hsl( in vec3 c ){ - float h = 0.0; - float s = 0.0; - float l = 0.0; - float r = c.r; - float g = c.g; - float b = c.b; - float cMin = min( r, min( g, b ) ); - float cMax = max( r, max( g, b ) ); - - l = ( cMax + cMin ) / 2.0; - if ( cMax > cMin ) { - float cDelta = cMax - cMin; - - //s = l < .05 ? cDelta / ( cMax + cMin ) : cDelta / ( 2.0 - ( cMax + cMin ) ); Original - s = l < .0 ? cDelta / ( cMax + cMin ) : cDelta / ( 2.0 - ( cMax + cMin ) ); - - if ( r == cMax ) { - h = ( g - b ) / cDelta; - } else if ( g == cMax ) { - h = 2.0 + ( b - r ) / cDelta; - } else { - h = 4.0 + ( r - g ) / cDelta; - } - - if ( h < 0.0) { - h += 6.0; - } - h = h / 6.0; - } - return vec3( h, s, l ); - } - - vec4 process(vec2 uv) - { - // grayscale input color - vec4 col = texture(image, uv); - - vec3 hsl = rgb2hsl(col.rgb); - - float result = 0.0; - if (prop_source == 0) result = hsl.x; - if (prop_source == 1) result = hsl.y; - if (prop_source == 2) result = hsl.z; - - return vec4(vec3(result), 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/imagenode.ts b/src/lib/library/v2/imagenode.ts deleted file mode 100644 index 47506e4a..00000000 --- a/src/lib/library/v2/imagenode.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; -import { Image } from "@/lib/designer/image"; -import { DesignerNode } from "@/lib/designer/designernode"; -import { NodeRenderContext } from "@/lib/designer"; -import { ImageProperty } from "@/lib/designer/properties"; - -export class ImageNode extends DesignerNode { - canvas: HTMLCanvasElement; - imageProp: ImageProperty; - public init() { - this.title = "Image"; - - this.canvas = document.createElement("canvas") as HTMLCanvasElement; - this.canvas.width = this.designer.width; - this.canvas.height = this.designer.height; - - let ctx = this.canvas.getContext("2d"); - ctx.fillStyle = "rgb(0,255,0)"; - ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); - - this.imageProp = this.addImageProperty("image", "Image", Image.empty()); - } - - public render(context: NodeRenderContext) { - let gl = context.gl as WebGL2RenderingContext; - - this.canvas.width = this.designer.width; - this.canvas.height = this.designer.height; - console.log(this.designer.width); - console.log(this.designer.height); - - let ctx = this.canvas.getContext("2d"); - - // ctx.fillStyle = "rgb(0,255,0)"; - // ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); - - ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); - if (this.imageProp.value && !this.imageProp.value.isEmpty) { - ctx.drawImage( - this.imageProp.value.canvas, - 0, - 0, - this.canvas.width, - this.canvas.height - ); - console.log("drawing image"); - } - - gl.bindTexture(gl.TEXTURE_2D, this.tex); - - //todo: this throws an error, manually convert to float texture - const level = 0; - const internalFormat = gl.RGBA16F; - const border = 0; - const format = gl.RGBA; - const type = gl.UNSIGNED_BYTE; - const data = this.canvas; - gl.texImage2D( - gl.TEXTURE_2D, - level, - internalFormat, - this.designer.width, - this.designer.height, - border, - format, - type, - data - ); - - // set the filtering so we don't need mips - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); - gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); - - gl.bindTexture(gl.TEXTURE_2D, null); - } -} diff --git a/src/lib/library/v2/invertnormal.ts b/src/lib/library/v2/invertnormal.ts deleted file mode 100644 index f9bae0dc..00000000 --- a/src/lib/library/v2/invertnormal.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; -import { Gradient } from "@/lib/designer/gradient"; - -export class InvertNormal extends GpuDesignerNode { - public init() { - this.title = "Invert Normal"; - - this.addInput("inputImage"); - - this.addBoolProperty("invertRed", "Invert Red", false); - this.addBoolProperty("invertGreen", "Invert Green", true); - this.addBoolProperty("invertBlue", "Invert Blue", false); - this.addBoolProperty("invertAlpha", "Invert Alpha", false); - - const source = ` - - vec4 process(vec2 uv) - { - // grayscale input color - vec4 result = texture(inputImage,uv); - - if(prop_invertRed) result.r = 1.0 - result.r; - if(prop_invertGreen) result.g = 1.0 - result.g; - if(prop_invertBlue) result.b = 1.0 - result.b; - if(prop_invertAlpha) result.a = 1.0 - result.a; - - return result; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/normalmapv2.ts b/src/lib/library/v2/normalmapv2.ts deleted file mode 100644 index 2f32a7b5..00000000 --- a/src/lib/library/v2/normalmapv2.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// http://www.smart-page.net/smartnormal/js/SmartNormalMapFilter.js -export class NormalMapV2 extends GpuDesignerNode { - public init() { - this.title = "Normal Map"; - //this.exportName = "result"; - this.addInput("height"); - - // this.addFloatProperty("strength", "Strength", 0.02, -0.02, 0.02, 0.00001); - this.addFloatProperty("strength", "Strength", 1, -2.0, 2.0, 0.05); - this.addIntProperty("range", "Range", 1, 1, 20, 1); - this.addBoolProperty("res_ind", "Resolution Independent", false); - - const source = ` - vec4 process(vec2 uv) - { - vec2 step = (vec2(1.0, 1.0) / _textureSize) * float(prop_range); - if (prop_res_ind) - step = (vec2(1.0, 1.0) / 1024.0) * float(prop_range); - float strength = prop_strength * 0.1; - - // center point - float d0 = abs(texture(height, uv + vec2(0.0, 0.0)).r) * strength / 2.0; - - // sample horizontally - float d1 = abs(texture(height, uv + vec2(step.x, 0.0)).r) * strength / 2.0; - float d2 = abs(texture(height, uv + vec2(-step.x, 0.0)).r) * strength / 2.0; - - // sample vertically - float d3 = abs(texture(height, uv + vec2(0.0, step.y)).r) * strength / 2.0; - float d4 = abs(texture(height, uv + vec2(0.0, -step.y)).r) * strength / 2.0; - - // find diff horizontally and average - float dx = ((d2 - d0) + (d0 - d1)) * 0.5; - - // find diff vertically and average - float dy = ((d4 - d0) + (d0 - d3)) * 0.5; - - vec3 dvx = vec3(step.x, 0.0 , d1-d0); - vec3 dvy = vec3(0.0 , step.y, d3-d0); - vec3 normal = normalize(cross(dvx, dvy)); - vec3 final = normal.xyz * 0.5 + 0.5; - - return vec4(final, 1.0); - } - `; - - this.buildShader(source); - } -} - -export class BetterWarpNode extends GpuDesignerNode { - public init() { - this.title = "Better Warp Node"; - //this.exportName = "result"; - this.addInput("image"); - this.addInput("height"); - - this.addFloatProperty("strength", "Strength", 0.001, -0.02, 0.02, 0.00001); - this.addFloatProperty("spread", "Spread", 0.1, 0, 1, 0.01); - - const source = ` - vec4 process(vec2 uv) - { - //vec2 size = textureSize(height); - //vec2 size = vec2(1024,1024); // quick hack for now - vec2 step = vec2(1.0,1.0)/_textureSize; - - // center point - float d0 = abs(texture(height, uv + vec2(0.0, 0.0)).r) * prop_strength / 2.0; - - // sample horizontally - float d1 = abs(texture(height, uv + vec2(step.x, 0.0)).r) * prop_strength / 2.0; - float d2 = abs(texture(height, uv + vec2(-step.x, 0.0)).r) * prop_strength / 2.0; - - // sample vertically - float d3 = abs(texture(height, uv + vec2(0.0, step.y)).r) * prop_strength / 2.0; - float d4 = abs(texture(height, uv + vec2(0.0, -step.y)).r) * prop_strength / 2.0; - - // find diff horizontally and average - float dx = ((d2 - d0) + (d0 - d1)) * 0.5; - - // find diff vertically and average - float dy = ((d4 - d0) + (d0 - d3)) * 0.5; - - // calculate normal - //vec3 normal = normalize(vec3(dx * prop_strength, dy * prop_strength, 1.0)); - //vec3 normal = normalize(vec3(dx, dy, 1.0)); - //vec3 final = normal.xyz * 0.5 + 0.5; // bring to 0.0 - 1.0 range - - vec3 dvx = vec3(step.x, 0.0 , d1-d0); - vec3 dvy = vec3(0.0 , step.y, d3-d0); - vec3 normal = normalize(cross(dvx, dvy)); - //vec3 final = normal.xyz * 0.5 + 0.5; - - float intensity = (1.0 - texture(height, uv).r) * prop_spread; - vec3 colorOut = texture(image, uv + vec2(-normal.x * intensity, -normal.y * intensity) ).rgb; - - return vec4(colorOut, 1.0); - //return vec4(vec3(normal.y), 1.0); - //return vec4(vec3(dot(normal, vec3(0,0,1))), 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/polartocartesian.ts b/src/lib/library/v2/polartocartesian.ts deleted file mode 100644 index 1bc678ad..00000000 --- a/src/lib/library/v2/polartocartesian.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; -import { Gradient } from "@/lib/designer/gradient"; - -// https://www.mathsisfun.com/polar-cartesian-coordinates.html -export class PolarToCartesian extends GpuDesignerNode { - public init() { - this.title = "Polar To Cartesian"; - - this.addInput("image"); - - this.addFloatProperty( - "angle_offset", - "Sample Angle Offset", - 0.0, - 0, - 360, - 1 - ); - - const source = ` - const float PI = 3.1415926538; - vec4 process(vec2 uv) - { - float offset = prop_angle_offset / (360.0) * (PI * 2.0); - float angle = (uv.x - 0.5) * PI * 2.0 + offset; - float dist = uv.y * 0.5; - - float x = dist * cos(angle); - float y = dist * sin(angle); - - vec2 coords = vec2(0.5) + vec2(x, y); - - vec4 col = texture(image, coords); - - return col; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/pow.ts b/src/lib/library/v2/pow.ts deleted file mode 100644 index c262792b..00000000 --- a/src/lib/library/v2/pow.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class Pow extends GpuDesignerNode { - public init() { - this.title = "Pow"; - - this.addInput("image"); - - this.addFloatProperty("exponent", "Exponent", 1.0, 0.0, 10.0, 0.01); - - const source = ` - vec4 process(vec2 uv) - { - vec4 a = texture(image, uv); - a.rgb = pow(a.rgb, vec3(prop_exponent)); - - return a; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/quantize.ts b/src/lib/library/v2/quantize.ts deleted file mode 100644 index dfc1ae88..00000000 --- a/src/lib/library/v2/quantize.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class Quantize extends GpuDesignerNode { - public init() { - this.title = "Quantize"; - - this.addInput("image"); - - this.addIntProperty("steps", "Steps", 12, 2, 20, 1); - - const source = ` - vec4 process(vec2 uv) - { - vec4 a = texture(image, uv); - a.rgb = floor(a.rgb * vec3(float(prop_steps))) / vec3(float(prop_steps)); - - return a; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/rgbamerge.ts b/src/lib/library/v2/rgbamerge.ts deleted file mode 100644 index 9b6ffca9..00000000 --- a/src/lib/library/v2/rgbamerge.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; -import { Gradient } from "@/lib/designer/gradient"; - -export class RgbaMerge extends GpuDesignerNode { - public init() { - this.title = "RGBA Merge"; - - this.addInput("redSource"); - this.addInput("greenSource"); - this.addInput("blueSource"); - this.addInput("alphaSource"); - - // Red - let prop = this.addEnumProperty("redSource", "Red Source", [ - "Red", - "Green", - "Blue", - "Alpha", - "Average (RGB)" - ]); - prop.setValue(0); - - // Green - prop = this.addEnumProperty("greenSource", "Green Source", [ - "Red", - "Green", - "Blue", - "Alpha", - "Average (RGB)" - ]); - prop.setValue(1); - - // Blue - prop = this.addEnumProperty("blueSource", "Blue Source", [ - "Red", - "Green", - "Blue", - "Alpha", - "Average (RGB)" - ]); - prop.setValue(2); - - // Alpha - prop = this.addEnumProperty("alphaSource", "Alpha Source", [ - "Red", - "Green", - "Blue", - "Alpha", - "Average (RGB)" - ]); - prop.setValue(3); - - const source = ` - - float getChannel(vec4 inputData, int mode) - { - if (mode == 0) return inputData.r; - if (mode == 1) return inputData.g; - if (mode == 2) return inputData.b; - if (mode == 3) return inputData.a; - if (mode == 4) { - return (inputData.r + inputData.g + inputData.b) * 0.3333333; - } - - return 0.0; - } - - vec4 process(vec2 uv) - { - // grayscale input color - vec4 r = texture(redSource,uv); - vec4 g = texture(greenSource,uv); - vec4 b = texture(blueSource,uv); - vec4 a = texture(alphaSource,uv); - - vec4 result = vec4(0, 0, 0, 1); - if (redSource_connected) - result.r = getChannel(r, prop_redSource); - if (greenSource_connected) - result.g = getChannel(g, prop_greenSource); - if (blueSource_connected) - result.b = getChannel(b, prop_blueSource); - if (alphaSource_connected) - result.a = getChannel(a, prop_alphaSource); - - return result; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/rgbashuffle.ts b/src/lib/library/v2/rgbashuffle.ts deleted file mode 100644 index ec60f44b..00000000 --- a/src/lib/library/v2/rgbashuffle.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; -import { Color } from "@/lib/designer/color"; -import { Gradient } from "@/lib/designer/gradient"; - -export class RgbaShuffle extends GpuDesignerNode { - public init() { - this.title = "RGBA Shuffle"; - - this.addInput("inputImage"); - - // Red - let prop = this.addEnumProperty("redSource", "Red Source", [ - "Red", - "Green", - "Blue", - "Alpha", - "Average (RGB)" - ]); - prop.setValue(0); - - // Green - prop = this.addEnumProperty("greenSource", "Green Source", [ - "Red", - "Green", - "Blue", - "Alpha", - "Average (RGB)" - ]); - prop.setValue(1); - - // Blue - prop = this.addEnumProperty("blueSource", "Blue Source", [ - "Red", - "Green", - "Blue", - "Alpha", - "Average (RGB)" - ]); - prop.setValue(2); - - // Alpha - prop = this.addEnumProperty("alphaSource", "Alpha Source", [ - "Red", - "Green", - "Blue", - "Alpha", - "Average (RGB)" - ]); - prop.setValue(3); - - const source = ` - - float getChannel(vec4 inputData, int mode) - { - if (mode == 0) return inputData.r; - if (mode == 1) return inputData.g; - if (mode == 2) return inputData.b; - if (mode == 3) return inputData.a; - if (mode == 4) { - return (inputData.r + inputData.g + inputData.b) * 0.3333333; - } - - return 0.0; - } - - vec4 process(vec2 uv) - { - // grayscale input color - vec4 col = texture(inputImage,uv); - - vec4 result = vec4(0); - result.r = getChannel(col, prop_redSource); - result.g = getChannel(col, prop_greenSource); - result.b = getChannel(col, prop_blueSource); - result.a = getChannel(col, prop_alphaSource); - - return result; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/simplexnoise.ts b/src/lib/library/v2/simplexnoise.ts deleted file mode 100644 index 33b2a00f..00000000 --- a/src/lib/library/v2/simplexnoise.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://www.shadertoy.com/view/Msf3WH -// previous implementation was actually value noise -export class SimplexNoiseV2 extends GpuDesignerNode { - public init() { - this.title = "Simplex Noise"; - - this.addIntProperty("scale", "Scale", 100, 1, 1000, 1); - this.addIntProperty("scaleX", "Scale X", 1, 1, 5, 1); - this.addIntProperty("scaleY", "Scale Y", 1, 1, 5, 1); - - const source = ` - vec2 hash( vec2 x ) // replace this by something better - { - const vec2 k = vec2( 0.3183099, 0.3678794 ); - x = x*k + k.yx; - return -1.0 + 2.0*fract( 16.0 * k*fract( x.x*x.y*(x.x+x.y)) ); - } - - float wrapAround(float value, float upperBound) { - return mod((value + upperBound - 1.0), upperBound); - } - - vec2 wrapAndHash(vec2 value, vec2 upperBounds) { - value.x = wrapAround(value.x, upperBounds.x); - value.y = wrapAround(value.y, upperBounds.y); - - return hash(value + vec2(_seed)); - } - - float noise( in vec2 p ) - { - vec2 bounds = vec2(float(prop_scaleX), float(prop_scaleY)) * float(prop_scale); - - const float K1 = 0.366025404; // (sqrt(3)-1)/2; - const float K2 = 0.211324865; // (3-sqrt(3))/6; - - vec2 i = floor( p + (p.x+p.y)*K1 ); - vec2 a = p - i + (i.x+i.y)*K2; - float m = step(a.y,a.x); - vec2 o = vec2(m,1.0-m); - vec2 b = a - o + K2; - vec2 c = a - 1.0 + 2.0*K2; - vec3 h = max( 0.5-vec3(dot(a,a), dot(b,b), dot(c,c) ), 0.0 ); - vec3 n = h*h*h*h*vec3( dot(a,wrapAndHash(i+0.0, bounds)), dot(b,wrapAndHash(i+o, bounds)), dot(c,wrapAndHash(i+1.0, bounds))); - return dot( n, vec3(70.0) ); - } - - vec4 process(vec2 uv) - { - float f = noise(uv * vec2(float(prop_scaleX), float(prop_scaleY)) * float(prop_scale)); - - // adjust range - f = 0.5 + 0.5 * f; - - vec3 color = vec3(f); - - return vec4(color,1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/skew.ts b/src/lib/library/v2/skew.ts deleted file mode 100644 index 354ba3b9..00000000 --- a/src/lib/library/v2/skew.ts +++ /dev/null @@ -1,68 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class Skew extends GpuDesignerNode { - public init() { - this.title = "Skew"; - - this.addInput("image"); - - this.addEnumProperty("axis", "Axis", ["Horizontal", "Vertical"]); - this.addFloatProperty("skew", "skew", 0.5, -1.0, 1.0, 0.01); - this.addFloatProperty("position", "Position", 0.5, 0.0, 1.0, 0.01); - - const source = ` - vec4 process(vec2 uv) - { - float xSkew = 0.0; - float ySkew = 0.0; - vec2 offset = vec2(0.0, 0.0); - if (prop_axis == 0) { - offset = vec2(0.0, prop_position); - xSkew = prop_skew; - } - else { - offset = vec2(prop_position, 0.0); - ySkew = prop_skew; - } - - mat3 skewMat = mat3(1.0, ySkew, 0.0, - xSkew, 1.0, 0.0, - 0.0, 0.0, 1.0); - - uv -= offset; - uv = (skewMat * vec3(uv, 1.0)).xy; - uv += offset; - - // Time varying pixel color - vec4 col = texture(image, uv); - return col; - } - `; - - this.buildShader(source); - } -} - -// SHADERTOY - -// void mainImage( out vec4 fragColor, in vec2 fragCoord ) -// { -// // Normalized pixel coordinates (from 0 to 1) -// vec2 uv = fragCoord/iResolution.xy; - -// float xSkew = mod(iTime, 2.0); -// float ySkew = 0.0;//mod(iTime, 2.0); -// mat3 skewMat = mat3(1.0, ySkew, 0.0, -// xSkew, 1.0, 0.0, -// 0.0, 0.0, 1.0); - -// uv -= vec2(0.0, 0.5); -// uv = (skewMat * vec3(uv, 1.0)).xy; -// uv += vec2(0.0, 0.5); - -// // Time varying pixel color -// vec3 col = texture(iChannel0, uv).rgb; - -// // Output to screen -// fragColor = vec4(col,1.0); -// } diff --git a/src/lib/library/v2/slopeblur.ts b/src/lib/library/v2/slopeblur.ts deleted file mode 100644 index 95c8071e..00000000 --- a/src/lib/library/v2/slopeblur.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// multiple pass warp -export class SlopeBlur extends GpuDesignerNode { - public init() { - this.title = "Slope Blur"; - - this.addInput("image"); - this.addInput("slope"); - - this.addFloatProperty("intensity", "Intensity", 1, 0, 5, 0.1); - this.addIntProperty("quality", "Quality", 5, 0, 10, 1); - - const source = ` - vec2 calcSlope(vec2 uv) - { - vec3 sl = vec3(0.0,0.0,0.0); - sl.x = texture(slope, uv + vec2(0.0, 1.0/_textureSize.y)).r; - sl.y = texture(slope, uv + vec2(-1.0/_textureSize.x, -0.5/_textureSize.y)).r; - sl.z = texture(slope, uv + vec2(1.0/_textureSize.x, -0.5/_textureSize.y)).r; - - vec2 result = vec2(0.0); - result.x = sl.z-sl.y; - result.y = dot(sl, vec3(1, -0.5, -0.5)); - - return result; - } - - vec4 process(vec2 uv) - { - if (!image_connected) - return vec4(0,0,0,1.0); - - float intensity = prop_intensity; - int iterations = int(ceil(float(prop_quality) * prop_intensity)); - - vec3 color = vec3(0.0); - for(int i = 0;i= b) return 1.0; - - return (t-a)/(b-a); - } - - // https://www.iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm - // https://www.shadertoy.com/view/3tSGDy - float sdStar(in vec2 p, in float r, in int n, in float m) // m=[2,n] - { - // these 4 lines can be precomputed for a given shape - float an = PI/float(n); - float en = PI/m; - vec2 acs = vec2(cos(an),sin(an)); - vec2 ecs = vec2(cos(en),sin(en)); - - // reduce to first sector - float bn = mod(atan(p.x,p.y),2.0*an) - an; - p = length(p)*vec2(cos(bn),abs(sin(bn))); - - // line sdf - p -= r*acs; - p += ecs*clamp( -dot(p,ecs), 0.0, r*acs.y/ecs.y); - return length(p)*sign(p.x); - } - - vec4 process(vec2 uv) - { - uv = uv - vec2(0.5); - float n = float(prop_sides); // n, number of sides - float a = prop_depth; // angle factor - float m = 2.0 + a*a*(n-2.0); // angle divisor, between 2 and n - - float d = sdStar(uv, prop_radius, prop_sides, m); - - vec3 color = vec3(1.0-linearstep(prop_radius-prop_gradient, prop_radius, d)); - //vec3 color = vec3(d); - - return vec4(color, 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/splat.ts b/src/lib/library/v2/splat.ts deleted file mode 100644 index 4bee9b3c..00000000 --- a/src/lib/library/v2/splat.ts +++ /dev/null @@ -1,134 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class SplatNodeV2 extends GpuDesignerNode { - public init() { - this.title = "Splat"; - - this.addInput("image"); - - this.addIntProperty("count", "Count", 50, 0, 1000, 1); - - this.addEnumProperty("blendType", "Blend Type", ["Max", "Add"]); - - const source = ` - // https://github.com/glslify/glsl-inverse/blob/master/index.glsl - // mat3 inverse(mat3 m) { - // float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2]; - // float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2]; - // float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2]; - - // float b01 = a22 * a11 - a12 * a21; - // float b11 = -a22 * a10 + a12 * a20; - // float b21 = a21 * a10 - a11 * a20; - - // float det = a00 * b01 + a01 * b11 + a02 * b21; - - // return mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11), - // b11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10), - // b21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det; - // } - - mat3 transMat(vec2 t) - { - return mat3(vec3(1.0,0.0,0.0), vec3(0.0,1.0,0.0), vec3(t, 1.0)); - } - - mat3 scaleMat(vec2 s) - { - return mat3(vec3(s.x,0.0,0.0), vec3(0.0,s.y,0.0), vec3(0.0, 0.0, 1.0)); - } - - mat3 rotMat(float rot) - { - float r = radians(rot); - return mat3(vec3(cos(r), -sin(r),0.0), vec3(sin(r), cos(r),0.0), vec3(0.0, 0.0, 1.0)); - } - - vec2 transformUV(vec2 uv, vec2 translate, float rot, vec2 scale) - { - mat3 trans = transMat(vec2(0.5, 0.5)) * - transMat(vec2(translate.x, translate.y)) * - rotMat(rot) * - scaleMat(vec2(scale.x, scale.y)) * - transMat(vec2(-0.5, -0.5)); - - vec3 res = inverse(trans) * vec3(uv, 1.0); - uv = res.xy; - - return clamp(uv,vec2(0.0), vec2(1.0)); - } - - float randomFloatRange(int index, float fmin, float fmax) - { - float r = _rand(vec2(_seed) + vec2(float(index) * 0.0001)); - - return fmin + (fmax - fmin) * r; - } - - // if uv is out of bounds then return vec4(0) - vec4 sampleImage(vec2 uv) - { - if (uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0) - return texture(image, uv); - return vec4(0.0); - } - - vec4 blend(vec4 colA, vec4 colB) - { - vec4 col = vec4(1.0); - if (prop_blendType==0) // max - col.rgb = max(colA.rgb, colB.rgb); - if (prop_blendType==1) // add - col.rgb = colA.rgb + colB.rgb; - - return col; - } - - const int MAX_ITER = 1000; - - // https://stackoverflow.com/questions/38986208/webgl-loop-index-cannot-be-compared-with-non-constant-expression - vec4 process(vec2 uv) - { - vec4 color = vec4(0.0); - for(int i = 0; i= prop_count) - break; - - float x = randomFloatRange(i*10 + 1, -0.5, 0.5); - float y = randomFloatRange(i*13 + 2, -0.5, 0.5); - float r = randomFloatRange(i*15 + 3, 0.0, 360.0); - - vec2 sampleUV = transformUV(uv, vec2(x,y), r, vec2(1.0)); - color = blend(color, sampleImage(sampleUV)); - - //sample 4 sides - sampleUV = transformUV(uv, vec2(x,y) + vec2(-1.0, 0.0), r, vec2(1.0)); - color = blend(color, sampleImage(sampleUV)); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 1.0, 0.0), r, vec2(1.0)); - color = blend(color, sampleImage(sampleUV)); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 0.0, 1.0), r, vec2(1.0)); - color = blend(color, sampleImage(sampleUV)); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 0.0, -1.0), r, vec2(1.0)); - color = blend(color, sampleImage(sampleUV)); - - // sample 4 diagonal sides - sampleUV = transformUV(uv, vec2(x,y) + vec2(-1.0, 1.0), r, vec2(1.0)); - color = blend(color, sampleImage(sampleUV)); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 1.0, 1.0), r, vec2(1.0)); - color = blend(color, sampleImage(sampleUV)); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 1.0, 1.0), r, vec2(1.0)); - color = blend(color, sampleImage(sampleUV)); - sampleUV = transformUV(uv, vec2(x,y) + vec2( 1.0, -1.0), r, vec2(1.0)); - color = blend(color, sampleImage(sampleUV)); - } - - //color = color / vec4(float(prop_count)); - - return color; - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/star.ts b/src/lib/library/v2/star.ts deleted file mode 100644 index 71983ae6..00000000 --- a/src/lib/library/v2/star.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -// https://thebookofshaders.com/07/ -export class Star extends GpuDesignerNode { - public init() { - this.title = "Star"; - - this.addFloatProperty("radius", "Radius", 0.2, 0, 0.5, 0.01); - this.addIntProperty("sides", "Sides", 5, 3, 20, 1); - this.addFloatProperty("depth", "Depth", 0.5, 0, 1.0, 0.01); - this.addBoolProperty("antialias", "Anti-Alias", true); - // this.addFloatProperty("gradient", "Gradient", 0.1, 0, 1.0, 0.01); - - const source = ` - #define PI 3.14159265359 - #define TWO_PI 6.28318530718 - - float linearstep(float a, float b, float t) - { - if (t <= a) return 0.0; - if (t >= b) return 1.0; - - return (t-a)/(b-a); - } - - // https://www.iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm - // https://www.shadertoy.com/view/3tSGDy - float sdStar(in vec2 p, in float r, in int n, in float m) // m=[2,n] - { - // these 4 lines can be precomputed for a given shape - float an = PI/float(n); - float en = PI/m; - vec2 acs = vec2(cos(an),sin(an)); - vec2 ecs = vec2(cos(en),sin(en)); - - // reduce to first sector - float bn = mod(atan(p.x,p.y),2.0*an) - an; - p = length(p)*vec2(cos(bn),abs(sin(bn))); - - // line sdf - p -= r*acs; - p += ecs*clamp( -dot(p,ecs), 0.0, r*acs.y/ecs.y); - return length(p)*sign(p.x); - } - - vec4 process(vec2 uv) - { - uv = uv - vec2(0.5); - float n = float(prop_sides); // n, number of sides - float a = prop_depth; // angle factor - float m = 2.0 + a*a*(n-2.0); // angle divisor, between 2 and n - - float d = sdStar(uv, prop_radius, prop_sides, m); - - // d at 0 is the star - //vec3 color = vec3(1.0-linearstep(1.0-prop_gradient, 1.0, d)); - vec3 color = vec3(1.0) - sign(d); - - // anti-alias - if(prop_antialias) { - - color = mix( color, vec3(1.0), 1.0-smoothstep(0.0,0.001,abs(d)) ); - } - - return vec4(color, 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/stripes.ts b/src/lib/library/v2/stripes.ts deleted file mode 100644 index 83f14ce1..00000000 --- a/src/lib/library/v2/stripes.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class StripesNode extends GpuDesignerNode { - public init() { - this.title = "Stripes"; - - this.addIntProperty("stripes", "Stripes", 10, 0, 30, 1); - this.addIntProperty("shift", "Shift", 0, 0, 30, 1); - this.addFloatProperty("width", "Width", 0.5, 0.0, 1.0, 0.01); - - // calculates normal, then warps uv by it - const source = ` - vec4 process(vec2 uv) - { - float fx = uv.x * 3.142 * 2.0 * float(prop_stripes); - float fy = uv.y * 3.142 * 2.0 * float(prop_shift); - float wave = sin(fx + fy); - - // bring wave to range 0...1 - wave = wave * 0.5 + 0.5; - wave = step(prop_width, wave); - - return vec4(vec3(wave), 1.0); - } - `; - - this.buildShader(source); - } -} diff --git a/src/lib/library/v2/tilesampler.ts b/src/lib/library/v2/tilesampler.ts deleted file mode 100644 index 59a7cc92..00000000 --- a/src/lib/library/v2/tilesampler.ts +++ /dev/null @@ -1,255 +0,0 @@ -import { GpuDesignerNode } from "../../designer/gpudesignernode"; - -export class TileSampler extends GpuDesignerNode { - public init() { - this.title = "Tile Sampler"; - - this.addInput("image"); - this.addInput("mask"); - this.addInput("size"); - this.addInput("intensity"); - this.addInput("vector"); - - this.addEnumProperty("blendType", "Blend Type", ["Max", "Add"]); - - this.addIntProperty("rows", "Row Count", 8, 0, 15, 1); - this.addIntProperty("columns", "Column Count", 8, 0, 15, 1); - - const posProps = this.createGroup("Position"); - posProps.add(this.addFloatProperty("offset", "Offset", 0.5, 0, 1, 0.1)); - posProps.add( - this.addEnumProperty("offset_axis", "Offset Axis", ["X Axis", "Y Axis"]) - ); - posProps.add( - this.addIntProperty("offset_interval", "Offset Interval", 1, 1, 5, 1) - ); - - const rotProps = this.createGroup("Rotation"); - rotProps.add(this.addFloatProperty("rot", "Rotation", 0, 0, 360, 0.1)); - rotProps.add( - this.addFloatProperty("rotRand", "Random Rotation", 0, 0, 1.0, 0.01) - ); - rotProps.add( - this.addFloatProperty("posRand", "Random Position", 0, 0, 1.0, 0.01) - ); - rotProps.add( - this.addFloatProperty( - "intensityRand", - "Random Intensity", - 0, - 0, - 1.0, - 0.01 - ) - ); - - rotProps.add( - this.addFloatProperty( - "vector_influence", - "Vector Rotation Influence", - 1, - 0, - 1, - 0.1 - ) - ); - - const scaleProps = this.createGroup("Scale"); - scaleProps.add( - this.addEnumProperty("sizeMode", "Size Mode", ["Normal", "Keep Aspect"]) - ); - scaleProps.add(this.addFloatProperty("scale", "Scale", 1, 0, 4, 0.1)); - scaleProps.add( - this.addFloatProperty("scaleRand", "Scale random", 0, 0, 1, 0.1) - ); - - const source = ` - - mat3 transMat(vec2 t) - { - return mat3(vec3(1.0,0.0,0.0), vec3(0.0,1.0,0.0), vec3(t, 1.0)); - } - - mat3 scaleMat(vec2 s) - { - return mat3(vec3(s.x,0.0,0.0), vec3(0.0,s.y,0.0), vec3(0.0, 0.0, 1.0)); - } - - mat3 rotMat(float rot) - { - float r = radians(rot); - return mat3(vec3(cos(r), -sin(r),0.0), vec3(sin(r), cos(r),0.0), vec3(0.0, 0.0, 1.0)); - } - - vec2 transformUV(vec2 uv, vec2 translate, float rot, vec2 scale) - { - mat3 trans = transMat(vec2(0.5, 0.5)) * - transMat(vec2(translate.x, translate.y)) * - rotMat(rot) * - scaleMat(vec2(scale.x, scale.y)) * - transMat(vec2(-0.5, -0.5)); - - vec3 res = inverse(trans) * vec3(uv, 1.0); - uv = res.xy; - - return clamp(uv,vec2(0.0), vec2(1.0)); - } - - float randomFloatRange(int index, float fmin, float fmax) - { - float r = _rand(vec2(_seed) + vec2(float(index) * 0.0001)); - - return fmin + (fmax - fmin) * r; - } - - // if uv is out of bounds then return vec4(0) - vec4 sampleImage(sampler2D image, vec2 uv) - { - if (uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0) - return texture(image, uv); - return vec4(0.0); - } - - vec4 blend(vec4 colA, vec4 colB) - { - vec4 col = vec4(1.0); - if (prop_blendType==0) // max - col.rgb = max(colA.rgb, colB.rgb); - if (prop_blendType==1) // add - col.rgb = colA.rgb + colB.rgb; - - return col; - } - - vec2 calcScale() - { - float rowSpacing = 1.0 / float(prop_rows); - float colSpacing = 1.0 / float(prop_columns); - - if (prop_sizeMode == 0) - { - return vec2(colSpacing, rowSpacing); - } - else if (prop_sizeMode == 1) - { - return vec2(min(rowSpacing, colSpacing)); - } - // else if (type == 2) - // { - // // todo: absolute - // // let user specify size - // } - - return vec2(1.0); - } - - // https://stackoverflow.com/questions/38986208/webgl-loop-index-cannot-be-compared-with-non-constant-expression - vec4 process(vec2 uv) - { - float rowSpacing = 1.0 / float(prop_rows); - float colSpacing = 1.0 / float(prop_columns); - - vec4 color = vec4(0.0, 0.0, 0.0, 1.0); - for(int r = 0; r void; - onconnectiondestroyed?: (item: ConnectionGraphicsItem) => void; - // passes null if no node is selected - onnodeselected?: (item: NodeGraphicsItem) => void; - oncommentselected?: (item: CommentGraphicsItem) => void; - onframeselected?: (item: FrameGraphicsItem) => void; - onnavigationselected?: (item: NavigationGraphicsItem) => void; - - onnodedeleted?: (item: NodeGraphicsItem) => void; - - // called right before items get deleted - // ideal for undo/redo - onitemsdeleting?: ( - frames: FrameGraphicsItem[], - comments: CommentGraphicsItem[], - navs: NavigationGraphicsItem[], - cons: ConnectionGraphicsItem[], - nodes: NodeGraphicsItem[] - ) => void; - - // called after items are deleted - onitemsdeleted?: ( - frames: FrameGraphicsItem[], - comments: CommentGraphicsItem[], - navs: NavigationGraphicsItem[], - cons: ConnectionGraphicsItem[], - nodes: NodeGraphicsItem[] - ) => void; - - oncopy?: (evt: ClipboardEvent) => void; - oncut?: (evt: ClipboardEvent) => void; - onpaste?: (evt: ClipboardEvent) => void; - - onlibrarymenu?: () => void; - - view: SceneView; - - // listeners for cleanup - _mouseMove: (evt: MouseEvent) => void; - _mouseDown: (evt: MouseEvent) => void; - _mouseUp: (evt: MouseEvent) => void; - _mouseClick: (evt: MouseEvent) => void; - _keyDown: (evt: KeyboardEvent) => void; - _contextMenu: (evt: MouseEvent) => void; - _copyEvent: (evt: ClipboardEvent) => void; - _cutEvent: (evt: ClipboardEvent) => void; - _pasteEvent: (evt: ClipboardEvent) => void; - copyElement: HTMLInputElement; - - constructor(canvas: HTMLCanvasElement) { - this.canvas = canvas; - this.context = this.canvas.getContext("2d"); - this.view = new SceneView(canvas); - this.hasFocus = false; - this.contextExtra = this.context; - this.frames = []; - this.comments = []; - this.nodes = []; - this.conns = []; - this.navigations = []; - this.dragMode = null; - this.selectionRect = new Rect(); - //this.selectedItem = null; - this.selectedItems = []; - this.hitItem = null; - - // add sample frames - // let frame = new FrameGraphicsItem(this.view); - // frame.setSize(500, 300); - // frame.scene = this; - // this.frames.push(frame); - - // let comment = new CommentGraphicsItem(this.view); - // comment.scene = this; - // //comment.setText("Hello World"); - // comment.setText("This\nis\na\nmultiline\nmessage"); - // comment.setCenter(200, 500); - // this.comments.push(comment); - - // let nav = new NavigationGraphicsItem(); - // nav.scene = this; - // nav.setLabel("Test Navigation"); - // this.navigations.push(nav); - - // bind event listeners - const self = this; - this._mouseMove = function(evt: MouseEvent) { - self.onMouseMove(evt); - }; - canvas.addEventListener("mousemove", this._mouseMove); - - self._mouseDown = function(evt: MouseEvent) { - self.onMouseDown(evt); - }; - canvas.addEventListener("mousedown", self._mouseDown); - - self._mouseUp = function(evt: MouseEvent) { - self.onMouseUp(evt); - - if (evt.target == canvas) { - self.hasFocus = true; - - // focus copy element - self.copyElement.focus(); - self.copyElement.select(); - } else { - self.hasFocus = false; - } - }; - canvas.addEventListener("mouseup", self._mouseUp); - - // self._mouseClick = function(evt: MouseEvent) { - // if (evt.target == canvas) { - // self.hasFocus = true; - // } else { - // self.hasFocus = false; - // } - // }; - // window.addEventListener("click", self._mouseClick); - - self._keyDown = function(evt: KeyboardEvent) { - if ( - evt.key == "Delete" && - self.hasFocus && - self.selectedItems.length != 0 - ) { - //self.deleteNode(self.selectedNode); - self.deleteItems(self.selectedItems); - } - - if ( - evt.key == " " && - // self.hasFocus && - self.view.isMouseOverCanvas() - ) { - if (self.onlibrarymenu != null && self.hitItem == null) { - self.onlibrarymenu(); - } - } - - //console.log(evt.key.length); - }; - window.addEventListener("keydown", self._keyDown, true); - // canvas.addEventListener("mousewheel", function(evt: WheelEvent) { - // self.onMouseScroll(evt); - // }); - self._contextMenu = function(evt: MouseEvent) { - evt.preventDefault(); - }; - canvas.addEventListener("contextmenu", self._contextMenu); - - this._copyEvent = evt => { - if (self.hasFocus && evt.target == self.copyElement) { - // alert("copying selection"); - evt.preventDefault(); - - self.onCopy(evt); - } - }; - document.addEventListener("copy", this._copyEvent); - - this._cutEvent = evt => { - if (self.hasFocus && evt.target == self.copyElement) { - // alert("cutting selection"); - evt.preventDefault(); - - self.onCut(evt); - self.deleteItems(this.selectedItems); - } - }; - document.addEventListener("cut", this._cutEvent); - - this._pasteEvent = evt => { - if (self.hasFocus && evt.target == self.copyElement) { - // alert("pasting selection"); - // console.log(evt.target); - // console.log(evt.clipboardData); - evt.preventDefault(); - self.copyElement.value = " "; - - self.onPaste(evt); - } - }; - document.addEventListener("paste", this._pasteEvent); - - this.copyElement = document.createElement("input"); - self.copyElement.value = " "; - //self.copyElement.style.display = "none"; - self.copyElement.style.opacity = "0"; - self.copyElement.style.width = "1px"; - self.copyElement.style.height = "1px"; - document.body.appendChild(this.copyElement); - //this.copyElement.addEventListener("copy", this._copyEvent); - // note: console.log(this.copyElement) to see in DOM - // golden layout conveniently hides it - } - - dispose() { - // alert("disposed!"); - this.canvas.removeEventListener("mousemove", this._mouseMove); - this.canvas.removeEventListener("mousedown", this._mouseDown); - this.canvas.removeEventListener("mouseup", this._mouseUp); - window.removeEventListener("click", this._mouseClick); - window.removeEventListener("keydown", this._keyDown, true); - this.canvas.removeEventListener("contextmenu", this._contextMenu); - document.removeEventListener("copy", this._copyEvent); - document.removeEventListener("paste", this._pasteEvent); - // this.copyElement.removeEventListener("copy", this._copyEvent); - // this.copyElement.removeEventListener("paste", this._copyEvent); - - this.canvas = null; - this.context = null; - this.view = null; - this.contextExtra = null; - this.frames = []; - this.comments = []; - this.nodes = []; - this.conns = []; - this.navigations = []; - this.selectionRect = null; - this.selectedItems = []; - this.hitItem = null; - } - - setSelectedItems(items: GraphicsItem[], createSelection = false) { - this.selectedItems = items; - - // create actual selection object to encapsulate items - if (createSelection == true) { - const sel: SelectionGraphicsItem = new SelectionGraphicsItem( - this, - this.view - ); - sel.setHitItems(items); - this.selection = sel; - } - } - - // no callbacks are made here - addNode(item: NodeGraphicsItem) { - this.nodes.push(item); - - // needed for sockets to get scene instance - item.setScene(this); - } - - addComment(item: CommentGraphicsItem) { - item.setScene(this); - this.comments.push(item); - } - - removeComment(item: CommentGraphicsItem) { - //todo: remove from selection - const i = this.comments.indexOf(item); - if (i !== -1) this.comments.splice(i, 1); - } - - addFrame(item: FrameGraphicsItem) { - item.setScene(this); - this.frames.push(item); - } - - removeFrame(item: FrameGraphicsItem) { - //todo: remove from selection - const i = this.frames.indexOf(item); - if (i !== -1) this.frames.splice(i, 1); - } - - addNavigation(nav: NavigationGraphicsItem) { - nav.setScene(this); - this.navigations.push(nav); - } - - removeNavigation(item: NavigationGraphicsItem) { - //todo: remove from selection - const i = this.navigations.indexOf(item); - if (i !== -1) this.navigations.splice(i, 1); - } - - deleteNode(item: NodeGraphicsItem) { - // delete connections - const conns = this.conns; - for (let i = this.conns.length - 1; i >= 0; i--) { - const con = this.conns[i]; - if ( - (con.socketA && con.socketA.node.id == item.id) || - (con.socketB && con.socketB.node.id == item.id) - ) { - this.removeConnection(con); - } - } - - // remove node from list - this.nodes.splice(this.nodes.indexOf(item), 1); - - // if node is selected (which it most likely is), clear it from selection - // this.selectedNode = null; - - // emit deselection - if (this.onnodeselected) this.onnodeselected(null); - - // emit remove event - if (this.onnodedeleted) this.onnodedeleted(item); - } - - // called by delete or cut event - deleteItems(items: GraphicsItem[]) { - // 1 - put items in buckets - const frames: FrameGraphicsItem[] = []; - const comments: CommentGraphicsItem[] = []; - const navs: NavigationGraphicsItem[] = []; - const cons: ConnectionGraphicsItem[] = []; - const nodes: NodeGraphicsItem[] = []; - - for (const item of items) { - if (item instanceof FrameGraphicsItem) { - frames.push(item); - } - if (item instanceof CommentGraphicsItem) { - comments.push(item); - } - if (item instanceof NavigationGraphicsItem) { - navs.push(item); - } - if (item instanceof NodeGraphicsItem) { - nodes.push(item); - } - } - - // if nothing was deleted then return - if ( - frames.length == 0 && - comments.length == 0 && - navs.length == 0 && - nodes.length == 0 - ) - return; - - // 2 - gather affected connections - const conDict = new Map(); - for (const node of nodes) { - // add all connections to map - for (const sock of node.sockets) { - for (const con of sock.conns) { - conDict.set(con.id, con); - } - } - } - for (const [key, con] of conDict) cons.push(con); - - // 3 - actual deletion - if (this.onitemsdeleting) { - this.onitemsdeleting(frames, comments, navs, cons, nodes); - } - - for (const frame of frames) this.removeFrame(frame); - for (const comment of comments) this.removeComment(comment); - for (const nav of navs) this.removeNavigation(nav); - for (const node of nodes) this.deleteNode(node); - - // 4 - callback - if (this.onitemsdeleted) { - this.onitemsdeleted(frames, comments, navs, cons, nodes); - } - } - - getNodeById(id: string): NodeGraphicsItem { - for (const node of this.nodes) { - if (node.id == id) return node; - } - return null; - } - - /** - * Checks if adding a hypothetical connection, the graph would remain to be a directed acyclic graph (DAG). - * - * @param leftNode input node of the new connection - * @param rightNode output node of the new connection - * @returns - */ - remainsDAG(leftNode: NodeGraphicsItem, rightNode: NodeGraphicsItem) { - let checked = new Set(); - checked.add(leftNode); - - let expanding = [rightNode]; - while (expanding.length > 0) { - let nodeA = expanding.pop(); - - for (let socket of nodeA.getOutSockets()) { - for (let conn of socket.conns) { - let nodeB = conn.socketB.node; - - // if (checked.has(nodeB)) { - // if left node is hit, this means making - // the connection will cause a cycle - if (nodeB === leftNode) { - return false; - } else { - expanding.push(nodeB); - checked.add(nodeA); - } - } - } - } - - return true; - } - - addConnection(con: ConnectionGraphicsItem) { - this.conns.push(con); - - // link the sockets - con.socketA.addConnection(con); - con.socketB.addConnection(con); - - // callback - if (this.onconnectioncreated) this.onconnectioncreated(con); - } - - createConnection(leftId: string, rightId: string, rightIndex = 0) { - const con = new ConnectionGraphicsItem(); - - // get nodes - const leftNode = this.getNodeById(leftId); - const rightNode = this.getNodeById(rightId); - - // get sockets - con.socketA = leftNode.sockets.find(x => x.socketType == SocketType.Out); - con.socketB = rightNode.sockets[rightIndex]; - - this.addConnection(con); - } - - removeConnection(con: ConnectionGraphicsItem) { - this.conns.splice(this.conns.indexOf(con), 1); - //con.socketA.con = null; - //con.socketB.con = null; - con.socketA.removeConnection(con); - con.socketB.removeConnection(con); - - // callback - if (this.onconnectiondestroyed) this.onconnectiondestroyed(con); - } - - // if the user click drags on a socket then it's making a connection - drawActiveConnection() { - const mouse = this.view.getMouseSceneSpace(); - const mouseX = mouse.x; - const mouseY = mouse.y; - - const ctx = this.context; - if (this.hitSocket) { - ctx.beginPath(); - ctx.strokeStyle = "rgb(200, 200, 200)"; - ctx.lineWidth = 4; - ctx.moveTo(this.hitSocket.centerX(), this.hitSocket.centerY()); - - if (this.hitSocket.socketType == SocketType.Out) { - ctx.bezierCurveTo( - this.hitSocket.centerX() + 60, - this.hitSocket.centerY(), // control point 1 - mouseX - 60, - mouseY, - mouseX, - mouseY - ); - } else { - ctx.bezierCurveTo( - this.hitSocket.centerX() - 60, - this.hitSocket.centerY(), // control point 1 - mouseX + 60, - mouseY, - mouseX, - mouseY - ); - } - - ctx.setLineDash([5, 3]); - ctx.stroke(); - ctx.setLineDash([]); - - ctx.beginPath(); - ctx.fillStyle = "rgb(200, 200, 200)"; - const radius = 6; - ctx.arc(mouseX, mouseY, radius, 0, 2 * Math.PI); - ctx.fill(); - } - } - - clearAndDrawGrid() { - //this.context.scale(2,2); - // this.context.fillStyle = "rgb(120, 120, 120)"; - // var topCorner = this.view.canvasToSceneXY(0, 0); - // var bottomCorner = this.view.canvasToSceneXY( - // this.canvas.clientWidth, - // this.canvas.clientHeight - // ); - // this.context.fillRect( - // topCorner.x, - // topCorner.y, - // bottomCorner.x - topCorner.x, - // bottomCorner.y - topCorner.y - // ); - //this.context.fillRect(0,0,this.canvas.width, this.canvas.height); - - // todo: draw grid - - this.view.clear(this.context, "#4A5050"); - this.view.setViewMatrix(this.context); - this.view.drawGrid(this.context, 33.33333, "#4E5454", 1); - this.view.drawGrid(this.context, 100, "#464C4C", 3); - } - - draw() { - this.clearAndDrawGrid(); - - // draw frames - for (const frame of this.frames) frame.draw(this.context); - - // draw comments - for (const comment of this.comments) comment.draw(this.context); - - // draw connections - for (const con of this.conns) { - if (con == this.hitConnection) continue; - con.draw(this.context); - } - - if (this.hitSocket) { - this.drawActiveConnection(); - } - - // draw nodes - const mouse = this.view.getMouseSceneSpace(); - const mouseX = mouse.x; - const mouseY = mouse.y; - const nodeState: NodeGraphicsItemRenderState = { - hovered: false, // mouse over - selected: false // selected node - }; - for (const item of this.nodes) { - // check for selection ( only do this when not dragging anything ) - //if (item == this.selectedNode) nodeState.selected = true; - //else nodeState.selected = false; - - // check for hover - if (item.isPointInside(mouseX, mouseY) && this.hitSocket == null) - nodeState.hovered = true; - else nodeState.hovered = false; - - item.draw(this.context, nodeState); - } - - for (const nav of this.navigations) nav.draw(this.context); - - if (this.selection) this.selection.draw(this.context); - - if (this.selectedItems.length > 0) { - this.drawSelectedItems(this.selectedItems, this.context); - } - } - - drawSelectedItems(items: GraphicsItem[], ctx: CanvasRenderingContext2D) { - for (const item of items) { - ctx.beginPath(); - ctx.lineWidth = 3; - ctx.strokeStyle = "rgba(255, 255, 255)"; - //this.roundRect(ctx, this.x, this.y, width, height, 1); - // ctx.rect(item.left, item.top, item.getWidth(), item.getHeight()); - const rect = item.getRect(); - rect.expand(15); - ctx.rect(rect.left, rect.top, rect.width, rect.height); - - ctx.stroke(); - - ctx.fillStyle = "rgba(255, 255, 255, 0.1)"; - ctx.rect(rect.left, rect.top, rect.width, rect.height); - ctx.fill(); - } - } - - onCopy(evt: ClipboardEvent) { - // todo: copy selected items to clipboard - //ItemClipboard.copyItems(this, evt.clipboardData); - if (this.oncopy) this.oncopy(evt); - } - - onCut(evt: ClipboardEvent) { - // todo: copy selected items to clipboard - //ItemClipboard.copyItems(this, evt.clipboardData); - if (this.oncut) this.oncut(evt); - } - - onPaste(evt: ClipboardEvent) { - // todo: paste items from clipboard - //ItemClipboard.pasteItems(this, evt.clipboardData); - if (this.onpaste) this.onpaste(evt); - } - - // mouse events - onMouseDown(evt: MouseEvent) { - // console.log("mouse dwn!"); - //todo: look at double event calling - const pos = this.getScenePos(evt); - const mouseX = pos.x; - const mouseY = pos.y; - - if (evt.button == 0) { - const hitItem = this.getHitItem(mouseX, mouseY); - const mouseEvent = new MouseDownEvent(); - mouseEvent.globalX = pos.x; - mouseEvent.globalY = pos.y; - mouseEvent.shiftKey = evt.shiftKey; - mouseEvent.altKey = evt.altKey; - mouseEvent.ctrlKey = evt.ctrlKey; - - if (hitItem != null) { - mouseEvent.localX = hitItem.left - pos.x; - mouseEvent.localY = hitItem.top - pos.y; - - hitItem.mouseDown(mouseEvent); - if (mouseEvent.isAccepted) { - this.hitItem = hitItem; - - //console.log(hitItem); - if (hitItem instanceof NodeGraphicsItem) { - const hitNode = hitItem; - //move node to stop of stack - this.moveNodeToTop(hitNode); - - if (this.onnodeselected) { - if (hitNode) this.onnodeselected(hitNode); - else this.onnodeselected(hitNode); - } - } - - //todo: look at double event calling for comments - if (hitItem instanceof CommentGraphicsItem) { - const hitComment = hitItem; - - if (this.oncommentselected) { - if (hitComment) this.oncommentselected(hitComment); - else this.oncommentselected(hitComment); - } - } - - if (hitItem instanceof FrameGraphicsItem) { - const hit = hitItem; - - if (this.onframeselected) { - if (hit) this.onframeselected(hit); - else this.onframeselected(hit); - } - } - - if (hitItem instanceof NavigationGraphicsItem) { - const hit = hitItem; - - if (this.onnavigationselected) { - if (hit) this.onnavigationselected(hit); - else this.onnavigationselected(hit); - } - } - - // selection graphics item can never be *selected* - if ( - !(hitItem instanceof SelectionGraphicsItem) && - !(hitItem instanceof SocketGraphicsItem) - ) - this.selectedItems = [hitItem]; - } - } else { - const hitItem = new SelectionGraphicsItem(this, this.view); - mouseEvent.localX = hitItem.left - pos.x; - mouseEvent.localY = hitItem.top - pos.y; - hitItem.mouseDown(mouseEvent); - - this.selection = hitItem; - this.hitItem = hitItem; - //console.log(hitItem); - } - - // check for a hit socket first - // let hitSock: SocketGraphicsItem = this.getHitSocket(mouseX, mouseY); - - // if (hitSock) { - // // if socket is an in socket with a connection, make hitsocket the connected out socket - // if ( - // hitSock.socketType == SocketType.In && - // hitSock.hasConnections() - // ) { - // this.hitSocket = hitSock.getConnection(0).socketA; // insockets should only have one connection - // // store connection for removal as well - // this.hitConnection = hitSock.getConnection(0); - // } else this.hitSocket = hitSock; - // } else { - // // if there isnt a hit socket then check for a hit node - // let hitNode: NodeGraphicsItem = this.getHitNode(mouseX, mouseY); - - // if (hitNode) { - // //move node to stop of stack - // this.moveNodeToTop(hitNode); - - // // todo: do this properly on mouse release - // this.selectedNode = hitNode; - // } else { - // this.selectedNode = null; - // } - - // this.draggedNode = hitNode; - // if (this.onnodeselected) { - // if (hitNode) this.onnodeselected(hitNode); - // else this.onnodeselected(hitNode); - // } - // } - } - } - - // https://stackoverflow.com/questions/5306680/move-an-array-element-from-one-array-position-to-another - moveNodeToTop(node: NodeGraphicsItem) { - const index = this.nodes.indexOf(node); - if (index === -1) { - console.log("Attempting to push node that doesnt exist in node list"); - } - this.nodes.splice(index, 1); - this.nodes.push(node); - } - - onMouseUp(evt: MouseEvent) { - const pos = this.getScenePos(evt); - const mouseX = pos.x; - const mouseY = pos.y; - - if (evt.button == 0) { - if (this.hitItem != null) { - const hitItem = this.hitItem; - - const mouseEvent = new MouseUpEvent(); - mouseEvent.globalX = pos.x; - mouseEvent.globalY = pos.y; - mouseEvent.localX = hitItem.left - pos.x; - mouseEvent.localY = hitItem.top - pos.y; - mouseEvent.shiftKey = evt.shiftKey; - mouseEvent.altKey = evt.altKey; - mouseEvent.ctrlKey = evt.ctrlKey; - - hitItem.mouseUp(mouseEvent); - - this.hitItem = null; - } - } - - // if (evt.button == 0) { - // if (this.hitSocket) { - // // remove previous connection - // // this block creates a new connection regardless of the outcome - // if (this.hitConnection) { - // this.removeConnection(this.hitConnection); - // this.hitConnection = null; - // } - - // let closeSock: SocketGraphicsItem = this.getHitSocket( - // mouseX, - // mouseY - // ); - - // if ( - // closeSock && - // closeSock != this.hitSocket && - // closeSock.socketType != this.hitSocket.socketType && - // closeSock.node != this.hitSocket.node - // ) { - // // close socket - // var con: ConnectionGraphicsItem = new ConnectionGraphicsItem(); - // // out socket should be on the left, socketA - // if (this.hitSocket.socketType == SocketType.Out) { - // // out socket - // con.socketA = this.hitSocket; - // con.socketB = closeSock; - - // // close sock is an inSocket which means it should only have one connection - // // remove current connection from inSocket - // if (closeSock.hasConnections()) - // this.removeConnection(closeSock.getConnection(0)); - // } else { - // // in socket - // con.socketA = closeSock; - // con.socketB = this.hitSocket; - // } - - // // link connection - // //con.socketA.con = con; - // //con.socketB.con = con; - - // this.addConnection(con); - // } else if (!closeSock) { - // // delete connection if hit node is an insock - // // if we're here it means one of 2 things: - // // 1: a new connection failed to form - // // 2: we're breaking a previously formed connection, which can only be done - // // by dragging from an insock that already has a connection - - // if (this.hitSocket.socketType == SocketType.Out) { - // /* - // if (this.hitSocket.hasConnections()) { - // // remove connection - // //let con = this.hitSocket.con; - // this.removeConnection(this.hitSocket.getConnectionFrom(this.hitSocket)); - // } - // */ - - // if (this.hitConnection) - // this.removeConnection(this.hitConnection); - // } - // } - // } - - // this.draggedNode = null; - // this.hitSocket = null; - // this.hitConnection = null; - // } - } - - onMouseMove(evt: MouseEvent) { - const pos = this.getScenePos(evt); - - if (this.hitItem) { - const mouseEvent = new MouseMoveEvent(); - mouseEvent.globalX = pos.x; - mouseEvent.globalY = pos.y; - - mouseEvent.localX = this.hitItem.left - pos.x; - mouseEvent.localY = this.hitItem.top - pos.y; - - mouseEvent.shiftKey = evt.shiftKey; - mouseEvent.altKey = evt.altKey; - mouseEvent.ctrlKey = evt.ctrlKey; - - const drag = this.view.getMouseDeltaSceneSpace(); - mouseEvent.deltaX = drag.x; - mouseEvent.deltaY = drag.y; - - this.hitItem.mouseMove(mouseEvent); - } else { - // do mouse over - const hitItem = this.getHitItem(pos.x, pos.y); - if (hitItem) { - const mouseEvent = new MouseOverEvent(); - mouseEvent.globalX = pos.x; - mouseEvent.globalY = pos.y; - - mouseEvent.localX = hitItem.left - pos.x; - mouseEvent.localY = hitItem.top - pos.y; - - mouseEvent.shiftKey = evt.shiftKey; - mouseEvent.altKey = evt.altKey; - mouseEvent.ctrlKey = evt.ctrlKey; - - hitItem.mouseOver(mouseEvent); - } else { - // reset pointer - this.view.canvas.style.cursor = "default"; - } - } - - // // handle dragged socket - // if (this.hitSocket) { - // } - - // // handle dragged node - // if (this.draggedNode != null) { - // //var diff = this.view.canvasToSceneXY(evt.movementX, evt.movementY); - // //console.log("move: ",evt.movementX,evt.movementY); - // //this.draggedNode.move(evt.movementX, evt.movementY); - - // // view keeps track of dragging - // let drag = this.view.getMouseDeltaSceneSpace(); - // this.draggedNode.move(drag.x, drag.y); - // } - } - - // hit detection - // x and y are scene space - getHitNode(x: number, y: number): NodeGraphicsItem { - // for (let node of this.nodes) { - for (let index = this.nodes.length - 1; index >= 0; index--) { - const node = this.nodes[index]; - if (node.isPointInside(x, y)) return node; - } - - return null; - } - - getHitSocket(x: number, y: number): SocketGraphicsItem { - for (const node of this.nodes) { - for (const sock of node.sockets) { - if (sock.isPointInside(x, y)) return sock; - } - } - - return null; - } - - // gets item over mouse x and y - // obeys precedence - getHitItem(x: number, y: number): GraphicsItem { - const hitItem = this._getHitItem(x, y); - - // if item is in selection then return whole selection - if ( - hitItem != null && - this.isItemSelected(hitItem) && - this.selection != null - ) { - if (this.selection.isPointInside(x, y)) return this.selection; - } - - return hitItem; - } - - _getHitItem(x: number, y: number): GraphicsItem { - // 1) navigation pins - for (let index = this.navigations.length - 1; index >= 0; index--) { - const nav = this.navigations[index]; - - if (nav.isPointInside(x, y)) return nav; - } - - // 2) nodes and their sockets - for (let index = this.nodes.length - 1; index >= 0; index--) { - const node = this.nodes[index]; - - for (const sock of node.sockets) { - if (sock.isPointInside(x, y)) return sock; - } - - if (node.isPointInside(x, y)) return node; - } - - // 3) comments - for (let index = this.comments.length - 1; index >= 0; index--) { - const comment = this.comments[index]; - - if (comment.isPointInside(x, y)) return comment; - } - - // 4) frame - for (let index = this.frames.length - 1; index >= 0; index--) { - const frame = this.frames[index]; - - if (frame.isPointInside(x, y)) return frame; - } - - return null; - } - - isItemSelected(hitItem): boolean { - // todo: use dictionary - for (const item of this.selectedItems) if (item == hitItem) return true; - return false; - } - - // UTILITY - - // returns the scene pos from the mouse event - getScenePos(evt: MouseEvent) { - const canvasPos = _getMousePos(this.canvas, evt); - return this.view.canvasToSceneXY(canvasPos.x, canvasPos.y); - } - - // SAVE/LOAD - - // only save position data to associative array - save(): any { - const data: any = {}; - - // NODES - const nodes = {}; - for (const node of this.nodes) { - const n: any = {}; - n["id"] = node.id; - n["x"] = node.centerX(); - n["y"] = node.centerY(); - - nodes[node.id] = n; - } - data["nodes"] = nodes; - - // FRAMES - const frames = []; - for (const frame of this.frames) { - const n: any = {}; - n["x"] = frame.left; - n["y"] = frame.top; - n["width"] = frame.getWidth(); - n["height"] = frame.getHeight(); - - n["title"] = frame.title; - n["showTitle"] = frame.showTitle; - n["description"] = frame.description; - n["color"] = frame.color.toHex(); - - frames.push(n); - } - data["frames"] = frames; - - // COMMENTS - const comments = []; - for (const comment of this.comments) { - const n: any = {}; - n["x"] = comment.left; - n["y"] = comment.top; - - n["text"] = comment.text; - n["color"] = comment.color.toHex(); - - comments.push(n); - } - data["comments"] = comments; - - // NAVIGATIONS - const navs = []; - for (const nav of this.navigations) { - const n: any = {}; - n["x"] = nav.left; - n["y"] = nav.top; - - navs.push(n); - } - data["navigations"] = navs; - - return data; - } - - static load( - designer: Designer, - data: any, - canvas: HTMLCanvasElement - ): NodeScene { - const s = new NodeScene(canvas); - - // add nodes one by one - for (const dNode of designer.nodes) { - // create node from designer - const node = new NodeGraphicsItem(dNode.title); - for (const input of dNode.getInputs()) { - node.addSocket(input, input, SocketType.In); - } - node.addSocket("output", "output", SocketType.Out); - s.addNode(node); - node.id = dNode.id; - - // get position - const x = data["nodes"][node.id].x; - const y = data["nodes"][node.id].y; - node.setCenter(x, y); - } - - // add connection one by one - for (const dcon of designer.conns) { - const con = new ConnectionGraphicsItem(); - con.id = dcon.id; - - // get nodes - const leftNode = s.getNodeById(dcon.leftNode.id); - const rightNode = s.getNodeById(dcon.rightNode.id); - - // get sockets - con.socketA = leftNode.getOutSocketByName(dcon.leftNodeOutput); - con.socketB = rightNode.getInSocketByName(dcon.rightNodeInput); - - s.addConnection(con); - } - - //todo: integrity checks - // FRAMES - if (data.frames) { - for (const d of data.frames) { - const frame = new FrameGraphicsItem(s.view); - frame.setPos(d.x, d.y); - frame.setSize(d.width, d.height); - - frame.setTitle(d.title); - frame.setShowTitle(d.showTitle); - frame.setDescription(d.description); - frame.color = Color.parse(d.color); - - s.addFrame(frame); - } - } - - // COMMENTS - if (data.comments) { - for (const d of data.comments) { - const comment = new CommentGraphicsItem(s.view); - comment.setPos(d.x, d.y); - comment.setText(d.text); - comment.color = Color.parse(d.color); - - s.addComment(comment); - } - } - - // NAVIGATION - if (data.navigations) { - for (const d of data.navigations) { - const nav = new NavigationGraphicsItem(); - nav.setPos(d.x, d.y); - s.addNavigation(nav); - } - } - - return s; - } -} - -// https://www.html5canvastutorials.com/advanced/html5-canvas-mouse-coordinates/ -// https://stackoverflow.com/questions/17130395/real-mouse-position-in-canvas -function _getMousePos(canvas, evt) { - const rect = canvas.getBoundingClientRect(); - return { - x: evt.clientX - rect.left, - y: evt.clientY - rect.top - }; -} diff --git a/src/lib/scene/commentgraphicsitem.ts b/src/lib/scene/commentgraphicsitem.ts deleted file mode 100644 index 116d1457..00000000 --- a/src/lib/scene/commentgraphicsitem.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { SocketGraphicsItem } from "./socketgraphicsitem"; -import { - GraphicsItem, - MouseDownEvent, - MouseMoveEvent, - MouseUpEvent -} from "./graphicsitem"; -import { SceneView, Vector2 } from "./view"; -import { Color } from "../designer/color"; -import { - IPropertyHolder, - Property, - PropertyGroup, - StringProperty -} from "../designer/properties"; -import { MoveItemsAction } from "../actions/moveItemsaction"; -import { UndoStack } from "../undostack"; - -// https://stackoverflow.com/questions/5026961/html5-canvas-ctx-filltext-wont-do-line-breaks -export class CommentGraphicsItem extends GraphicsItem - implements IPropertyHolder { - text: string; - textProp: StringProperty; - view: SceneView; - color: Color; - - padding: number; - fontHeight: number; - - hit: boolean; - dragged: boolean; - dragStartPos: Vector2; - - constructor(view: SceneView) { - super(); - this.text = ""; - this.view = view; - this.color = new Color(0.9, 0.9, 0.9); - - this.hit = false; - this.dragged = false; - - this.padding = 5; - this.fontHeight = 20; - - this.textProp = new StringProperty("comment", "Comment", "Comment.", true); - this.properties.push(this.textProp); - - this.setText("comment"); - } - propertyGroups: PropertyGroup[]; - - properties: Property[] = []; - setProperty(name: string, value: any) { - const prop = this.properties.find(x => { - return x.name == name; - }); - - // if (prop) { - // prop.setValue(value); - // } - - if (name == "comment") { - this.setText(value); - } - } - - setText(text: string) { - this.text = text; - this.textProp.setValue(text); - const fontHeight = this.fontHeight; - - const ctx = this.view.context; - - ctx.lineWidth = 1; - ctx.font = fontHeight + "px 'Open Sans'"; - const size = ctx.measureText(this.text); - - let maxWidth = 0; - const lines = this.text.split("\n"); - // console.log(lines); - // console.log(ctx); - // console.log(ctx.font); - for (let i = 0; i < lines.length; ++i) { - const size = ctx.measureText(lines[i]); - //console.log("INITIAL WITH: " + size.width); - maxWidth = Math.max(maxWidth, size.width); - } - - // somewhat inaccurate here for some reason - // maybe some bug in html5 canvas - // recalculate in draw function - this.width = maxWidth + this.padding * 2; - this.height = lines.length * fontHeight + this.padding * 2; - } - - private buildColor(color: Color, alpha: number) { - const col = - "rgba(" + - color.r * 255 + - "," + - color.g * 255 + - "," + - color.b * 255 + - "," + - alpha + - ")"; - - return col; - } - - draw(ctx: CanvasRenderingContext2D, renderData: any = null) { - const fontHeight = this.fontHeight; - ctx.font = fontHeight + "px 'Open Sans'"; - ctx.fillStyle = "rgb(240, 240, 240)"; - - // recalc rect - let maxWidth = 0; - //console.log(this.text); - const lines = this.text.split("\n"); - for (var i = 0; i < lines.length; ++i) { - const size = ctx.measureText(lines[i]); - maxWidth = Math.max(maxWidth, size.width); - } - - this.width = maxWidth + this.padding * 2; - this.height = lines.length * fontHeight + this.padding * 2; - - // -------------------------------------------------------- - - const width = this.width; - const height = this.height; - - // stroke bounding rect - ctx.beginPath(); - ctx.lineWidth = 1; - ctx.strokeStyle = this.buildColor(this.color, 0.5); - this.roundRect(ctx, this.x, this.y, width, height, 1); - ctx.stroke(); - - // inner area - ctx.beginPath(); - ctx.lineWidth = 1; - ctx.fillStyle = this.buildColor(this.color, 0.1); - this.roundRect(ctx, this.x, this.y, width, height, 1); - ctx.fill(); - - // multiline text - ctx.fillStyle = "rgb(240, 240, 240)"; - const textX = this.x + this.padding; - let textY = this.y + fontHeight; - - const lineHeight = fontHeight; - //var lines = this.text.split("\n"); - ctx.font = fontHeight + "px 'Open Sans'"; - ctx.textAlign = "left"; - ctx.lineWidth = 1; - - //console.log(ctx.font); - for (let i = 0; i < lines.length; ++i) { - ctx.fillText(lines[i], textX, textY); - textY += lineHeight; - const size = ctx.measureText(lines[i]); - //console.log("RENDER WITH: " + size.width); - } - } - - // MOUSE EVENTS - public mouseDown(evt: MouseDownEvent) { - this.hit = true; - this.dragged = false; - this.dragStartPos = new Vector2(this.x, this.y); - //console.log(this.text); - } - - public mouseMove(evt: MouseMoveEvent) { - if (this.hit) { - // movement - this.move(evt.deltaX, evt.deltaY); - this.dragged = true; - } - } - - public mouseUp(evt: MouseUpEvent) { - this.hit = false; - - // add undo/redo - const newPos = new Vector2(this.x, this.y); - - if (this.dragged) { - const action = new MoveItemsAction( - [this], - [this.dragStartPos.clone()], - [newPos] - ); - - UndoStack.current.push(action); - } - - this.dragged = false; - } -} diff --git a/src/lib/scene/connectiongraphicsitem.ts b/src/lib/scene/connectiongraphicsitem.ts deleted file mode 100644 index 3055c469..00000000 --- a/src/lib/scene/connectiongraphicsitem.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { SocketGraphicsItem } from "./socketgraphicsitem"; -import { GraphicsItem } from "./graphicsitem"; - -export class ConnectionGraphicsItem extends GraphicsItem { - id!: string; - public socketA!: SocketGraphicsItem; - public socketB!: SocketGraphicsItem; - - draw(ctx: CanvasRenderingContext2D, renderData: any = null) { - ctx.beginPath(); - ctx.strokeStyle = "rgb(200, 200, 200)"; - ctx.lineWidth = 4; - ctx.moveTo(this.socketA.centerX(), this.socketA.centerY()); - ctx.bezierCurveTo( - this.socketA.centerX() + 60, - this.socketA.centerY(), // control point 1 - this.socketB.centerX() - 60, - this.socketB.centerY(), - this.socketB.centerX(), - this.socketB.centerY() - ); - ctx.stroke(); - } -} diff --git a/src/lib/scene/framegraphicsitem.ts b/src/lib/scene/framegraphicsitem.ts deleted file mode 100644 index 2a86f9f4..00000000 --- a/src/lib/scene/framegraphicsitem.ts +++ /dev/null @@ -1,585 +0,0 @@ -import { SocketGraphicsItem } from "./socketgraphicsitem"; -import { - GraphicsItem, - MouseDownEvent, - MouseMoveEvent, - MouseUpEvent, - MouseOverEvent -} from "./graphicsitem"; -import { SceneView, Vector2, Rect } from "./view"; -import { Color } from "../designer/color"; -import { NodeGraphicsItem } from "./nodegraphicsitem"; -import { - IPropertyHolder, - Property, - StringProperty, - BoolProperty, - PropertyGroup -} from "../designer/properties"; -import { MoveItemsAction } from "../actions/moveItemsaction"; -import { UndoStack } from "../undostack"; -import { ResizeFrameAction } from "../actions/resizeframeaction"; - -enum XResizeDir { - None, - Left, - Right -} - -enum YResizeDir { - None, - Top, - Bottom -} - -enum DragMode { - None, - HandleTop, - Resize -} - -export class FrameRegion { - rect: Rect = null; - dragMode: DragMode = DragMode.None; - xResizeDir: XResizeDir = XResizeDir.None; - yResizeDir: YResizeDir = YResizeDir.None; - cursor: string = null; -} - -// https://developer.mozilla.org/en-US/docs/Web/CSS/cursor -export class FrameGraphicsItem extends GraphicsItem implements IPropertyHolder { - title: string; - description: string; - showTitle: boolean; - view: SceneView; - color: Color; - hit: boolean; - dragged: boolean; - dragStartPos: Vector2; - dragStartRect: Rect; - - xResize: XResizeDir; - yResize: YResizeDir; - dragMode: DragMode; - - // display properties - handleSize: number; - - // the radius of the resize handle - resizeHandleSize: number; - - nodes: NodeGraphicsItem[]; - - titleProp: StringProperty; - showTitleProp: BoolProperty; - descrProp: StringProperty; - - public constructor(view: SceneView) { - super(); - this.title = "Frame"; - this.description = ""; - this.showTitle = true; - this.view = view; - this.color = new Color(0.1, 0, 0.2); - this.hit = false; - this.dragged = true; - - this.xResize = XResizeDir.None; - this.yResize = YResizeDir.None; - this.dragMode = DragMode.None; - - this.handleSize = 30; - this.resizeHandleSize = 20; - - this.setSize(500, 300); - - this.nodes = []; - - this.titleProp = new StringProperty("title", "Title", "Frame"); - this.showTitleProp = new BoolProperty("showtitle", "Show Title", true); - this.descrProp = new StringProperty("description", "Description", "", true); - this.properties.push(this.titleProp); - this.properties.push(this.showTitleProp); - this.properties.push(this.descrProp); - } - propertyGroups: PropertyGroup[]; - properties: Property[] = []; - setProperty(name: string, value: any) { - if (name == "title") { - this.setTitle(value); - } else if (name == "showtitle") { - this.setShowTitle(value); - } else if (name == "description") { - this.setDescription(value); - } - } - - setSize(w: number, h: number) { - this.width = w; - this.height = h; - } - - setTitle(text: string) { - this.title = text; - this.titleProp.setValue(text); - } - - setShowTitle(shouldShow: boolean) { - this.showTitle = shouldShow; - this.showTitleProp.setValue(shouldShow); - } - - setDescription(text: string) { - this.description = text; - this.descrProp.setValue(text); - } - - private buildColor(color: Color, alpha: number) { - const col = - "rgba(" + - color.r * 255 + - "," + - color.g * 255 + - "," + - color.b * 255 + - "," + - alpha + - ")"; - //console.log(col); - return col; - } - - public setPos(x: number, y: number) { - // find diff - const diff = new Vector2(x - this.x, y - this.y); - super.setPos(x, y); - - // do a move - // for (let node of this.nodes) { - // node.move(diff.x, diff.y); - // } - } - - public setFrameRect(rect: Rect) { - this.x = rect.x; - this.y = rect.y; - this.width = rect.width; - this.height = rect.height; - } - - draw(ctx: CanvasRenderingContext2D, renderData: any = null) { - // outer frame - ctx.beginPath(); - ctx.lineWidth = 1; - //ctx.strokeStyle = "rgb(100, 0, 0)"; - ctx.strokeStyle = this.buildColor(this.color, 1); - this.roundRect(ctx, this.x, this.y, this.width, this.height, 1); - ctx.stroke(); - - // handle - const handleSize = this.handleSize; - ctx.beginPath(); - ctx.lineWidth = 1; - //ctx.fillStyle = "rgba(100, 0, 0, 0.5)"; - ctx.fillStyle = this.buildColor(this.color, 0.5); - this.roundRect(ctx, this.x, this.y, this.width, handleSize, 1); - ctx.fill(); - - ctx.beginPath(); - ctx.lineWidth = 1; - //ctx.strokeStyle = "rgb(100, 0, 0, 0.8)"; - ctx.strokeStyle = this.buildColor(this.color, 0.8); - this.roundRect(ctx, this.x, this.y, this.width, handleSize, 1); - ctx.stroke(); - - // body - ctx.beginPath(); - ctx.lineWidth = 2; - //ctx.fillStyle = "rgba(100, 0, 0, 0.2)"; - ctx.fillStyle = this.buildColor(this.color, 0.2); - this.roundRect( - ctx, - this.x, - this.y + handleSize, - this.width, - this.height - handleSize, - 1 - ); - ctx.fill(); - - // title - if (this.showTitle == true) { - ctx.beginPath(); - - const fontSize = 18; // * this.view.zoomFactor; - - ctx.save(); - //ctx.scale(1.0 / this.view.zoomFactor, 1.0 / this.view.zoomFactor); - ctx.setTransform(1, 0, 0, 1, this.view.offset.x, this.view.offset.y); - - //ctx.font = fontSize + "px 'Open Sans'"; - ctx.font = "30px 'Open Sans'"; - ctx.fillStyle = "rgb(240, 240, 240)"; - //let size = ctx.measureText(this.textureChannel.toUpperCase()); - const textX = this.x; - const textY = this.y; - //ctx.fillText("Hello World", textX, textY - 5); - ctx.fillText( - this.title, - textX * this.view.zoomFactor, - (textY - 5) * this.view.zoomFactor - ); - - ctx.restore(); - } - - // debug draw frames - // if (false) { - // const regions = this.getFrameRegions(); - // for (const region of regions) { - // const rect = region.rect; - // ctx.beginPath(); - // ctx.lineWidth = 1; - // ctx.strokeStyle = "rgb(100, 0, 0, 0.8)"; - // ctx.rect(rect.x, rect.y, rect.width, rect.height); - // ctx.stroke(); - // } - // } - } - - public isPointInside(px: number, py: number): boolean { - const regions = this.getFrameRegions(); - for (const region of regions) { - if (region.rect.isPointInside(px, py)) { - return true; - } - } - - // top handle - if ( - px >= this.x && - px <= this.x + this.width && - py >= this.y && - py <= this.y + this.handleSize - ) - return true; - return false; - } - - // MOUSE EVENTS - public mouseDown(evt: MouseDownEvent) { - this.hit = true; - this.dragged = false; - - const px = evt.globalX; - const py = evt.globalY; - - let hitRegion: FrameRegion = null; - const regions = this.getFrameRegions(); - for (const region of regions) { - if (region.rect.isPointInside(px, py)) { - this.dragMode = region.dragMode; - this.xResize = region.xResizeDir; - this.yResize = region.yResizeDir; - - this.dragStartRect = this.getRect(); - hitRegion = region; - break; - } - } - - // topbar - if (hitRegion == null) { - if ( - px >= this.x && - px <= this.x + this.width && - py >= this.y && - py <= this.y + this.handleSize - ) { - this.dragMode = DragMode.HandleTop; - this.xResize = XResizeDir.None; - this.yResize = YResizeDir.None; - - this.dragStartPos = new Vector2(this.x, this.y); - - // capture nodes if alt key isnt pressed - if (!evt.altKey) this.nodes = this.getHoveredNodes(); - - // set cursor - this.view.canvas.style.cursor = "grabbing"; - } - } - } - - public mouseOver(evt: MouseOverEvent) { - const px = evt.globalX; - const py = evt.globalY; - - const hitRegion: FrameRegion = null; - const regions = this.getFrameRegions(); - for (const region of regions) { - if (region.rect.isPointInside(px, py)) { - this.view.canvas.style.cursor = region.cursor; - return; - } - } - - // topbar - if (hitRegion == null) { - if ( - px >= this.x && - px <= this.x + this.width && - py >= this.y && - py <= this.y + this.handleSize - ) { - this.view.canvas.style.cursor = "grab"; - } - } - } - - // return all scene's nodes in this frame - getHoveredNodes(): NodeGraphicsItem[] { - const nodes: NodeGraphicsItem[] = []; - for (const node of this.scene.nodes) { - // node must be entirely inside frame - if ( - node.left >= this.left && - node.right <= this.right && - node.top >= this.top && - node.bottom <= this.bottom - ) { - nodes.push(node); - } - } - - return nodes; - } - - public mouseMove(evt: MouseMoveEvent) { - if (this.hit) { - // movement - if (this.dragMode == DragMode.HandleTop) { - this.move(evt.deltaX, evt.deltaY); - - // move nodes - for (const node of this.nodes) { - node.move(evt.deltaX, evt.deltaY); - } - } - - //todo: clamp size - if (this.dragMode == DragMode.Resize) { - if (this.xResize == XResizeDir.Left) { - this.left += evt.deltaX; - this.width -= evt.deltaX; - } - if (this.xResize == XResizeDir.Right) { - this.width += evt.deltaX; - } - if (this.yResize == YResizeDir.Top) { - this.top += evt.deltaY; - this.height -= evt.deltaY; - } - if (this.yResize == YResizeDir.Bottom) { - this.height += evt.deltaY; - } - - // clamp - this.height = Math.max( - this.height, - this.handleSize + this.resizeHandleSize - ); - - this.width = Math.max(this.width, this.resizeHandleSize * 2); - } - - this.dragged = true; - } - } - - public mouseUp(evt: MouseUpEvent) { - // add undo/redo action - if (this.dragged) { - if (this.dragMode == DragMode.HandleTop) { - const newPos = new Vector2(this.x, this.y); - const items: GraphicsItem[] = [this]; - const oldPosList: Vector2[] = [this.dragStartPos.clone()]; - const newPosList: Vector2[] = [newPos]; - - // reverse diff: new pos to old pos - const diff = new Vector2( - this.dragStartPos.x - newPos.x, - this.dragStartPos.y - newPos.y - ); - - // add all captured nodes - for (const node of this.nodes) { - items.push(node); - // new pos is the current pos - const itemNewPos = new Vector2(node.left, node.top); - // old pos is current pos plus reverse diff - const itemOldPos = Vector2.add(itemNewPos, diff); - - newPosList.push(itemNewPos); - oldPosList.push(itemOldPos); - } - - const action = new MoveItemsAction(items, oldPosList, newPosList); - UndoStack.current.push(action); - } else if (this.dragMode == DragMode.Resize) { - const action = new ResizeFrameAction( - this, - this.dragStartRect.clone(), - this.getRect().clone() - ); - UndoStack.current.push(action); - } - } - - this.hit = false; - this.dragMode = DragMode.None; - this.nodes = []; - - // reset cursor - this.view.canvas.style.cursor = "default"; - } - - getFrameRegions(): FrameRegion[] { - const regions: FrameRegion[] = []; - const frameRect = this.getRect(); - let rect: Rect = null; - let region: FrameRegion = null; - - // CORNERS - - // bottom-right - region = new FrameRegion(); - rect = new Rect(); - rect.x = frameRect.right - this.resizeHandleSize; - rect.y = frameRect.bottom - this.resizeHandleSize; - rect.width = this.resizeHandleSize; - rect.height = this.resizeHandleSize; - region.rect = rect; - region.dragMode = DragMode.Resize; - region.xResizeDir = XResizeDir.Right; - region.yResizeDir = YResizeDir.Bottom; - region.cursor = "nwse-resize"; - regions.push(region); - - // bottom-left - region = new FrameRegion(); - rect = new Rect(); - rect.x = frameRect.left; - rect.y = frameRect.bottom - this.resizeHandleSize; - rect.width = this.resizeHandleSize; - rect.height = this.resizeHandleSize; - region.rect = rect; - region.dragMode = DragMode.Resize; - region.xResizeDir = XResizeDir.Left; - region.yResizeDir = YResizeDir.Bottom; - region.cursor = "nesw-resize"; - regions.push(region); - - // top-left - region = new FrameRegion(); - rect = new Rect(); - rect.x = frameRect.left; - rect.y = frameRect.top; - rect.width = this.resizeHandleSize; - rect.height = this.resizeHandleSize; - region.rect = rect; - region.dragMode = DragMode.Resize; - region.xResizeDir = XResizeDir.Left; - region.yResizeDir = YResizeDir.Top; - region.cursor = "nw-resize"; - regions.push(region); - - // top-right - region = new FrameRegion(); - rect = new Rect(); - rect.x = frameRect.right - this.resizeHandleSize; - rect.y = frameRect.top; - rect.width = this.resizeHandleSize; - rect.height = this.resizeHandleSize; - region.rect = rect; - region.dragMode = DragMode.Resize; - region.xResizeDir = XResizeDir.Right; - region.yResizeDir = YResizeDir.Top; - region.cursor = "ne-resize"; - regions.push(region); - - // SIDES - - // left - region = new FrameRegion(); - rect = new Rect(); - rect.x = frameRect.left; - rect.y = frameRect.top; - rect.width = this.resizeHandleSize; - rect.height = frameRect.height; - region.rect = rect; - region.dragMode = DragMode.Resize; - region.xResizeDir = XResizeDir.Left; - region.yResizeDir = YResizeDir.None; - region.cursor = "w-resize"; - regions.push(region); - - // right - region = new FrameRegion(); - rect = new Rect(); - rect.x = frameRect.right - this.resizeHandleSize; - rect.y = frameRect.top; - rect.width = this.resizeHandleSize; - rect.height = frameRect.height; - region.rect = rect; - region.dragMode = DragMode.Resize; - region.xResizeDir = XResizeDir.Right; - region.yResizeDir = YResizeDir.None; - region.cursor = "e-resize"; - regions.push(region); - - // top - region = new FrameRegion(); - rect = new Rect(); - rect.x = frameRect.left; - rect.y = frameRect.top; - rect.width = frameRect.width; - rect.height = this.resizeHandleSize * 0.5; // top is thinner - region.rect = rect; - region.dragMode = DragMode.Resize; - region.xResizeDir = XResizeDir.None; - region.yResizeDir = YResizeDir.Top; - region.cursor = "n-resize"; - regions.push(region); - - // bottom - region = new FrameRegion(); - rect = new Rect(); - rect.x = frameRect.left; - rect.y = frameRect.bottom - this.resizeHandleSize; - rect.width = frameRect.width; - rect.height = this.resizeHandleSize; - region.rect = rect; - region.dragMode = DragMode.Resize; - region.xResizeDir = XResizeDir.None; - region.yResizeDir = YResizeDir.Bottom; - region.cursor = "s-resize"; - regions.push(region); - - // this is handles separately - // TOPBAR - // region = new FrameRegion(); - // rect = new Rect(); - // rect.x = frameRect.right - this.resizeHandleSize; - // rect.y = frameRect.bottom - this.resizeHandleSize; - // rect.width = this.resizeHandleSize; - // rect.height = this.resizeHandleSize; - // region.rect = rect; - // region.dragMode = DragMode.HandleTop; - // region.xResizeDir = XResizeDir.None; - // region.yResizeDir = YResizeDir.None; - // regions.push(region); - - return regions; - } -} diff --git a/src/lib/scene/graphicsitem.ts b/src/lib/scene/graphicsitem.ts deleted file mode 100644 index 5f7fd0b9..00000000 --- a/src/lib/scene/graphicsitem.ts +++ /dev/null @@ -1,199 +0,0 @@ -import { NodeScene } from "../scene"; -import { Rect, Vector2 } from "./view"; - -export class MouseEvent { - // scene space - globalX: number; - globalY: number; - - localX: number; - localY: number; - - mouseButton: number; - - // modifiers - shiftKey = false; - altKey = false; - ctrlKey = false; - - // default is accepted - private accepted = true; - public accept() { - this.accepted = true; - } - - public reject() { - this.accepted = false; - } - - public get isAccepted() { - return this.accepted; - } - - public get isRejected() { - return !this.accepted; - } -} - -export class MouseDownEvent extends MouseEvent {} -export class MouseMoveEvent extends MouseEvent { - deltaX: number; - deltaY: number; -} -export class MouseUpEvent extends MouseEvent {} -export class MouseOverEvent extends MouseEvent {} - -export class HoverEvent extends MouseEvent {} - -export class GraphicsItem { - scene!: NodeScene; - protected visible = true; - - protected x = 0; - protected y = 0; - protected width: number; - protected height: number; - - public constructor() { - //this.scene = scene; - //scene.addItem(this); - this.width = 1; - this.height = 1; - } - - // sets top-left - public setPos(x: number, y: number) { - this.x = x; - this.y = y; - } - - public getPos() { - return new Vector2(this.x, this.y); - } - - public setSize(w: number, h: number) { - this.width = w; - this.height = h; - } - - public setScene(scene: NodeScene) { - this.scene = scene; - } - - public isPointInside(px: number, py: number): boolean { - if ( - px >= this.x && - px <= this.x + this.width && - py >= this.y && - py <= this.y + this.height - ) - return true; - return false; - } - - public get left() { - return this.x; - } - - public set left(value) { - this.x = value; - } - - public get top() { - return this.y; - } - - public set top(value) { - this.y = value; - } - - public get right() { - return this.x + this.width; - } - - public get bottom() { - return this.y + this.height; - } - - public intersectsRect(other: Rect) { - if (this.left > other.right) return false; - if (this.right < other.left) return false; - if (this.bottom < other.top) return false; - if (this.top > other.bottom) return false; - - return true; - } - - public intersects(other: GraphicsItem) { - if (this.left > other.right) return false; - if (this.right < other.left) return false; - if (this.bottom < other.top) return false; - if (this.top > other.bottom) return false; - - return true; - } - - public getRect(): Rect { - const rect = new Rect(); - rect.x = this.x; - rect.y = this.y; - rect.width = this.width; - rect.height = this.height; - - return rect; - } - - public setCenter(x: number, y: number) { - this.x = x - this.width / 2; - this.y = y - this.height / 2; - } - - public centerX(): number { - return this.x + this.width / 2; - } - - public centerY(): number { - return this.y + this.height / 2; - } - - public getWidth(): number { - return this.width; - } - - public getHeight(): number { - return this.height; - } - - public move(dx: number, dy: number) { - this.x += dx; - this.y += dy; - } - - // UTILITIES - // https://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas - roundRect(ctx: CanvasRenderingContext2D, x, y, w, h, r) { - if (w < 2 * r) r = w / 2; - if (h < 2 * r) r = h / 2; - ctx.beginPath(); - ctx.moveTo(x + r, y); - ctx.arcTo(x + w, y, x + w, y + h, r); - ctx.arcTo(x + w, y + h, x, y + h, r); - ctx.arcTo(x, y + h, x, y, r); - ctx.arcTo(x, y, x + w, y, r); - ctx.closePath(); - //ctx.stroke(); - } - - // to be overriden - public draw(ctx: CanvasRenderingContext2D, renderData: any = null) {} - - // MOUSE EVENTS - - // STANDARD MOUSE EVENTS - public mouseDown(evt: MouseDownEvent) {} - public mouseMove(evt: MouseMoveEvent) {} - public mouseUp(evt: MouseUpEvent) {} - - // called every frame the mouse is over this object - public mouseOver(evt: MouseOverEvent) {} -} diff --git a/src/lib/scene/navigationgraphicsitem.ts b/src/lib/scene/navigationgraphicsitem.ts deleted file mode 100644 index 1c9e2129..00000000 --- a/src/lib/scene/navigationgraphicsitem.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { SocketGraphicsItem } from "./socketgraphicsitem"; -import { - GraphicsItem, - MouseDownEvent, - MouseMoveEvent, - MouseUpEvent -} from "./graphicsitem"; -import { Vector2 } from "./view"; -import { MoveItemsAction } from "../actions/moveItemsaction"; -import { UndoStack } from "../undostack"; - -export class NavigationGraphicsItem extends GraphicsItem { - id!: string; - public socketA!: SocketGraphicsItem; - public socketB!: SocketGraphicsItem; - - label: string; - hit: boolean; - dragged: boolean; - dragStartPos: Vector2; - - constructor() { - super(); - this.label = ""; - - this.hit = false; - this.dragged = false; - - this.width = 10; - this.height = 10; - } - - setLabel(label: string) { - this.label = label; - } - - draw(ctx: CanvasRenderingContext2D, renderData: any = null) { - ctx.beginPath(); - ctx.strokeStyle = "rgb(200, 200, 200)"; - ctx.lineWidth = 4; - ctx.arc(this.centerX(), this.centerY(), this.width, 0, Math.PI * 2); - ctx.fill(); - ctx.strokeStyle = "rgb(200, 0, 0)"; - ctx.stroke(); - - ctx.fillText(this.label, this.x + 5, this.y); - } - - // MOUSE EVENTS - public mouseDown(evt: MouseDownEvent) { - this.hit = true; - this.dragged = false; - this.dragStartPos = new Vector2(this.x, this.y); - } - - public mouseMove(evt: MouseMoveEvent) { - if (this.hit) { - // movement - this.move(evt.deltaX, evt.deltaY); - this.dragged = true; - } - } - - public mouseUp(evt: MouseUpEvent) { - this.hit = false; - - // add undo/redo - const newPos = new Vector2(this.x, this.y); - - if (this.dragged) { - const action = new MoveItemsAction( - [this], - [this.dragStartPos.clone()], - [newPos] - ); - - UndoStack.current.push(action); - } - - this.dragged = false; - } -} diff --git a/src/lib/scene/nodegraphicsitem.ts b/src/lib/scene/nodegraphicsitem.ts deleted file mode 100644 index 5b308241..00000000 --- a/src/lib/scene/nodegraphicsitem.ts +++ /dev/null @@ -1,294 +0,0 @@ -import { SocketGraphicsItem, SocketType } from "./socketgraphicsitem"; -import { ImageCanvas } from "../designer/imagecanvas"; -import { - GraphicsItem, - MouseDownEvent, - MouseMoveEvent, - MouseUpEvent -} from "./graphicsitem"; -import { NodeScene } from "../scene"; -import { Vector2 } from "./view"; -import { MoveItemsAction } from "../actions/moveItemsaction"; -import { UndoStack } from "../undostack"; - -export class NodeGraphicsItemRenderState { - hovered = false; - selected = false; -} - -export class NodeGraphicsItem extends GraphicsItem { - id!: string; - sockets: SocketGraphicsItem[] = []; - public title: string; - thumbnail!: HTMLImageElement; - imageCanvas: ImageCanvas; - - processingTime: number; - - hit: boolean; - - // albedo, normal, height, etc... - textureChannel: string; - - dragStartPos: Vector2; - - constructor(title: string) { - super(); - this.width = 100; - this.height = 100; - this.title = title; - this.imageCanvas = new ImageCanvas(); - this.processingTime = 0; - this.hit = false; - } - - public setScene(scene: NodeScene) { - this.scene = scene; - - for (const sock of this.sockets) sock.setScene(scene); - } - - public setTextureChannel(name: string) { - this.textureChannel = name; - } - - public clearTextureChannel() { - this.textureChannel = null; - } - - public setThumbnail(thumbnail: HTMLImageElement) { - this.thumbnail = thumbnail; - } - - public move(dx: number, dy: number) { - this.x += dx; - this.y += dy; - for (const sock of this.sockets) { - sock.move(dx, dy); - } - } - - draw(ctx: CanvasRenderingContext2D, renderData: any) { - const renderState = renderData; - - // border - if (renderState.selected) { - ctx.strokeStyle = "rgb(255, 255, 255)"; - ctx.beginPath(); - ctx.lineWidth = 8; - //ctx.rect(this.x, this.y, this.width, this.height); - this.roundRect(ctx, this.x, this.y, this.width, this.height, 2); - ctx.stroke(); - } - - // background - ctx.beginPath(); - ctx.fillStyle = "rgb(0, 0, 0)"; - ctx.rect(this.x, this.y, this.width, this.height); - ctx.fill(); - - // thumbnail if any - if (this.thumbnail) { - //ctx.drawImage(this.thumbnail,this.x, this.y, this.width, this.height); - } - - ctx.drawImage( - this.imageCanvas.canvas, - this.x, - this.y, - this.width, - this.height - ); - - // title - if (!renderState.hovered) { - ctx.beginPath(); - ctx.fillStyle = "rgb(0,0,0)"; - ctx.rect(this.x, this.y, this.width, 20); - ctx.fill(); - - ctx.beginPath(); - //ctx.font = "14px monospace"; - ctx.font = "bold 9px 'Open Sans'"; - ctx.fillStyle = "rgb(255,255,255)"; - const size = ctx.measureText(this.title); - const textX = this.centerX() - size.width / 2; - const textY = this.y + 14; - ctx.fillText(this.title, textX, textY); - } - - // DRAW SHAPE - ctx.beginPath(); - ctx.lineWidth = 4; - // if (renderState.selected) ctx.strokeStyle = "rgb(255, 255, 255)"; - // else ctx.strokeStyle = "rgb(0, 0, 0)"; - ctx.strokeStyle = "rgb(0, 0, 0)"; - //ctx.rect(this.x, this.y, this.width, this.height); - this.roundRect(ctx, this.x, this.y, this.width, this.height, 2); - ctx.stroke(); - - for (const sock of this.sockets) { - sock.draw(ctx, renderState); - } - - // processing time - ctx.beginPath(); - let procTime = "calculating.."; - if (this.processingTime >= 0) procTime = this.processingTime + "ms"; - - ctx.font = "bold 9px 'Open Sans'"; - ctx.fillStyle = "rgb(255,255,255)"; - const size = ctx.measureText(procTime); - const textX = this.centerX() - size.width / 2; - const textY = this.y + this.height + 14; - ctx.fillText(procTime, textX, textY); - - // texture channel - if (this.textureChannel) { - ctx.beginPath(); - //ctx.font = "14px monospace"; - ctx.font = "12px 'Open Sans'"; - ctx.fillStyle = "rgb(200, 255, 200)"; - const size = ctx.measureText(this.textureChannel.toUpperCase()); - const textX = this.centerX() - size.width / 2; - //const textY = this.y + this.height + 14; - - const textY = this.y - 12; - ctx.fillText(this.textureChannel.toUpperCase(), textX, textY); - } - } - - public setPos(x: number, y: number) { - super.setPos(x, y); - this.sortSockets(); - } - - public setCenter(x: number, y: number) { - super.setCenter(x, y); - this.sortSockets(); - } - - public sortSockets() { - let socks = this.getInSockets(); - - // top and bottom padding for sockets - const pad = socks.length < 5 ? 10 : 0; - - // sort in sockets - let incr = (this.height - pad * 2) / socks.length; - let mid = incr / 2.0; - let i = 0; - for (const sock of socks) { - const y = pad + i * incr + mid; - const x = this.x; - sock.setCenter(x, this.y + y); - i++; - } - - // sort out sockets - socks = this.getOutSockets(); - incr = (this.height - pad * 2) / socks.length; - mid = incr / 2.0; - i = 0; - for (const sock of socks) { - const y = pad + i * incr + mid; - const x = this.x + this.width; - sock.setCenter(x, this.y + y); - i++; - } - } - - getInSockets() { - const array: SocketGraphicsItem[] = []; - for (const sock of this.sockets) { - if (sock.socketType == SocketType.In) array.push(sock); - } - - return array; - } - - getInSocketByName(name: string): SocketGraphicsItem { - for (const sock of this.sockets) { - if (sock.socketType == SocketType.In) - if (sock.title == name) - //todo: separate title from name - return sock; - } - - return null; - } - - getOutSockets() { - const array: SocketGraphicsItem[] = []; - for (const sock of this.sockets) { - if (sock.socketType == SocketType.Out) array.push(sock); - } - - return array; - } - - getOutSocketByName(name: string): SocketGraphicsItem { - // blank or empty name means first out socket - if (!name) { - const socks = this.getOutSockets(); - if (socks.length > 0) return socks[0]; - else { - console.log( - "[warning] attempting to get output socket from node with no output sockets" - ); - return null; - } - } - - for (const sock of this.sockets) { - if (sock.socketType == SocketType.Out) - if (sock.title == name) - //todo: separate title from name - return sock; - } - - return null; - } - - // adds socket to node - public addSocket(name: string, id: string, type: SocketType) { - const sock = new SocketGraphicsItem(); - sock.id = id; - sock.title = name; - sock.node = this; - sock.socketType = type; - this.sockets.push(sock); - - this.sortSockets(); - } - - // MOUSE EVENTS - public mouseDown(evt: MouseDownEvent) { - this.hit = true; - this.dragStartPos = new Vector2(this.x, this.y); - } - - public mouseMove(evt: MouseMoveEvent) { - if (this.hit) { - // movement - this.move(evt.deltaX, evt.deltaY); - } - } - - public mouseUp(evt: MouseUpEvent) { - this.hit = false; - - // add undo/redo - const newPos = new Vector2(this.x, this.y); - - if (newPos.x != this.dragStartPos.x || newPos.y != this.dragStartPos.y) { - const action = new MoveItemsAction( - [this], - [this.dragStartPos.clone()], - [newPos] - ); - - UndoStack.current.push(action); - } - } -} diff --git a/src/lib/scene/selectiongraphicsitem.ts b/src/lib/scene/selectiongraphicsitem.ts deleted file mode 100644 index 88a74abf..00000000 --- a/src/lib/scene/selectiongraphicsitem.ts +++ /dev/null @@ -1,279 +0,0 @@ -import { SocketGraphicsItem } from "./socketgraphicsitem"; -import { - GraphicsItem, - MouseDownEvent, - MouseMoveEvent, - MouseUpEvent -} from "./graphicsitem"; -import { SceneView, Vector2, Rect } from "./view"; -import { Color } from "../designer/color"; -import { - IPropertyHolder, - Property, - StringProperty -} from "../designer/properties"; -import { NodeScene } from "../scene"; -import { MoveItemsAction } from "../actions/moveItemsaction"; -import { UndoStack } from "../undostack"; -import { FrameGraphicsItem } from "./framegraphicsitem"; - -// https://stackoverflow.com/questions/5026961/html5-canvas-ctx-filltext-wont-do-line-breaks -export class SelectionGraphicsItem extends GraphicsItem { - view: SceneView; - color: Color; - - padding: number; - fontHeight: number; - - tooSmallSize: number; - - hit: boolean; - dragged: boolean; - items: GraphicsItem[]; - draggableItems: GraphicsItem[]; // list with items and frame's items for dragging - itemsDragStartPos: Vector2[]; - - constructor(scene: NodeScene, view: SceneView) { - super(); - this.scene = scene; - this.view = view; - this.color = new Color(0.9, 0.9, 0.9); - this.items = []; - this.itemsDragStartPos = []; - - this.hit = false; - this.dragged = false; - - this.padding = 5; - this.fontHeight = 20; - - this.tooSmallSize = 5; - } - - public isPointInside(px: number, py: number): boolean { - //todo: loop through child items rect to see if a hit is made - for (const item of this.items) { - if ( - px >= item.left && - px <= item.left + item.getWidth() && - py >= item.top && - py <= item.top + item.getHeight() - ) - return true; - } - - return false; - } - - draw(ctx: CanvasRenderingContext2D, renderData: any = null) { - // should only display if hit or has items - if (this.hit == false && this.items.length == 0) return; - - const width = this.width; - const height = this.height; - - if (this.items.length == 0) { - if (!this.isTooSmall()) { - // stroke bounding rect - ctx.beginPath(); - ctx.lineWidth = 3; - ctx.strokeStyle = "rgb(250, 250, 250)"; - //this.roundRect(ctx, this.x, this.y, width, height, 1); - ctx.rect(this.x, this.y, width, height); - - ctx.setLineDash([5, 3]); - ctx.stroke(); - ctx.setLineDash([]); - - // if hit, then mouse is being dragged, these items are temporary - const items = this.getHitItems(); - this.drawSelectedItems(items, ctx); - } - } else { - //this.drawSelectedItems(this.items, ctx); - } - } - - drawSelectedItems(items: GraphicsItem[], ctx: CanvasRenderingContext2D) { - for (const item of items) { - ctx.beginPath(); - ctx.lineWidth = 2; - ctx.strokeStyle = "rgba(250, 250, 250)"; - //this.roundRect(ctx, this.x, this.y, width, height, 1); - // ctx.rect(item.left, item.top, item.getWidth(), item.getHeight()); - const rect = item.getRect(); - rect.expand(15); - ctx.rect(rect.left, rect.top, rect.width, rect.height); - - ctx.stroke(); - - ctx.fillStyle = "rgba(255, 255, 255, 0.1)"; - ctx.rect(rect.left, rect.top, rect.width, rect.height); - ctx.fill(); - } - ctx.setLineDash([]); - } - - /** - * If user drags left of up, the width or height becomes negative - * This returns a rect with positive dimensions - */ - getPositiveRect(): Rect { - const rect = new Rect(); - rect.x = this.x; - rect.y = this.y; - - rect.width = Math.abs(this.width); - rect.height = Math.abs(this.height); - - if (this.width < 0) rect.x += this.width; - if (this.height < 0) rect.y += this.height; - - return rect; - } - - // for manually setting the hit items - setHitItems(items: GraphicsItem[]) { - this.items = items; - this.draggableItems = this.getDraggableHitItems(this.items); - } - - getHitItems(): GraphicsItem[] { - const items: GraphicsItem[] = []; - const rect = this.getPositiveRect(); - - for (const node of this.scene.nodes) { - if (node.intersectsRect(rect)) { - items.push(node); - } - } - - for (const item of this.scene.comments) { - if (item.intersectsRect(rect)) { - items.push(item); - } - } - - // Frames are treated differently - // check if any of the sides were hit - // by the selection box for a valid selection - for (const item of this.scene.frames) { - const frame = item; - const regions = frame.getFrameRegions(); - for (const region of regions) { - if (region.rect.intersects(rect)) { - items.push(item); - break; - } - } - } - - for (const item of this.scene.navigations) { - if (item.intersectsRect(rect)) { - items.push(item); - } - } - - return items; - } - - // todo: ultra slow! - // does frame * scenenodes check per frame - getDraggableHitItems(hitItems: GraphicsItem[]): GraphicsItem[] { - const items: Set = new Set(); - - hitItems.forEach((i: GraphicsItem) => { - items.add(i); - - if (i instanceof FrameGraphicsItem) { - const captured = (i).getHoveredNodes(); - captured.forEach(c => items.add(c)); - } - }); - - const results: GraphicsItem[] = []; - items.forEach((i: GraphicsItem) => results.push(i)); - - return results; - } - - // MOUSE EVENTS - - // This graphics item has two phases - // the first phase is about selecting items - // the second phase is about dragging - // after the first phase, items will not be empty - // if there is a mouse event and items is not empty - // then its in drag mode - public mouseDown(evt: MouseDownEvent) { - this.hit = true; - this.dragged = false; - - if (this.items.length > 0) { - this.captureDragStarts(); - } else { - this.x = evt.globalX; - this.y = evt.globalY; - this.scene.setSelectedItems([]); - } - } - - public mouseMove(evt: MouseMoveEvent) { - if (this.items.length > 0) { - for (const item of this.draggableItems) { - item.move(evt.deltaX, evt.deltaY); - } - this.dragged = true; - } else if (this.hit) { - // movement - this.width += evt.deltaX; - this.height += evt.deltaY; - } - } - - public mouseUp(evt: MouseUpEvent) { - this.hit = false; - if (this.items.length == 0 && !this.isTooSmall()) { - this.items = this.getHitItems(); - this.scene.setSelectedItems(this.items); - this.draggableItems = this.getDraggableHitItems(this.items); - } else { - //todo: check for movement - if (this.dragged) this.createUndoAction(); - } - - this.dragged = false; - } - - // UNDO-REDO - captureDragStarts() { - this.itemsDragStartPos = []; - for (const item of this.draggableItems) { - const pos = new Vector2(item.left, item.top); - this.itemsDragStartPos.push(pos); - } - } - - isTooSmall(): boolean { - return ( - Math.abs(this.width) < this.tooSmallSize || - Math.abs(this.height) < this.tooSmallSize - ); - } - - createUndoAction() { - const newPosList = []; - for (const item of this.draggableItems) { - const pos = new Vector2(item.left, item.top); - newPosList.push(pos); - } - - const action = new MoveItemsAction( - this.draggableItems, - this.itemsDragStartPos, - newPosList - ); - - UndoStack.current.push(action); - } -} diff --git a/src/lib/scene/socketgraphicsitem.ts b/src/lib/scene/socketgraphicsitem.ts deleted file mode 100644 index 56fe288b..00000000 --- a/src/lib/scene/socketgraphicsitem.ts +++ /dev/null @@ -1,337 +0,0 @@ -import { - GraphicsItem, - MouseDownEvent, - MouseMoveEvent, - MouseUpEvent -} from "./graphicsitem"; -import { - NodeGraphicsItem, - NodeGraphicsItemRenderState -} from "./nodegraphicsitem"; -import { ConnectionGraphicsItem } from "./connectiongraphicsitem"; -import { AddConnectionAction } from "../actions/addconnectionaction"; -import { UndoStack } from "../undostack"; -import { RemoveConnectionAction } from "../actions/removeconnectionaction"; -import { - ConnectionSwitchAction, - SwitchConnectionAction -} from "../actions/switchconnectionaction"; - -export enum SocketType { - In, - Out -} - -export class SocketGraphicsItem extends GraphicsItem { - public id!: string; - public title!: string; - public node!: NodeGraphicsItem; - public socketType!: SocketType; - radius = 8; - - // only in sockets store the connection - // since outsockets can have multiple connections - //public con:ConnectionGraphicsItem; - conns: ConnectionGraphicsItem[] = []; - - hit: boolean; - hitSocket: SocketGraphicsItem; - hitConnection: ConnectionGraphicsItem; // for removal - mouseDragX: number; - mouseDragY: number; - - addConnection(con: ConnectionGraphicsItem) { - this.conns.push(con); - } - removeConnection(con: ConnectionGraphicsItem) { - this.conns.splice(this.conns.indexOf(con), 1); - } - getConnection(index: number): ConnectionGraphicsItem { - return this.conns[index]; - } - - // retruns a connection where the outSocket == socketA - // returns null if no result is found - getConnectionFrom(socketA: SocketGraphicsItem) { - for (const con of this.conns) { - if (con.socketA == socketA) return con; - } - - return null; - } - - // retruns a connection where the inSocket == socketB - // returns null if no result is found - getConnectionTo(socketB: SocketGraphicsItem) { - for (const con of this.conns) { - if (con.socketB == socketB) return con; - } - - return null; - } - - hasConnections() { - return this.conns.length > 0; - } - - constructor() { - super(); - this.width = this.radius * 2; - this.height = this.radius * 2; - - this.hit = false; - this.hitSocket = null; - } - - draw(ctx: CanvasRenderingContext2D, renderData: any = null) { - const renderState = renderData; - - //console.log(this.width); - ctx.lineWidth = 3; - //ctx.rect(this.x, this.y, this.width, this.height); - ctx.beginPath(); - ctx.fillStyle = "rgb(150,150,150)"; - ctx.arc(this.centerX(), this.centerY(), this.radius, 0, 2 * Math.PI); - ctx.fill(); - - // border - ctx.beginPath(); - ctx.arc(this.centerX(), this.centerY(), this.radius, 0, 2 * Math.PI); - ctx.strokeStyle = "rgb(0, 0, 0)"; - ctx.stroke(); - - // draw inner dot if connected - if (this.hasConnections()) { - //console.log("con"); - ctx.beginPath(); - ctx.fillStyle = "rgb(100,100,100)"; - ctx.arc(this.centerX(), this.centerY(), this.radius / 3, 0, 2 * Math.PI); - ctx.fill(); - } - - this.drawActiveConnection(ctx); - - // draw text - if (renderState.hovered) { - ctx.fillStyle = "rgb(150,150,150)"; - ctx.font = "9px 'Open Sans'"; - if (this.socketType == SocketType.Out) { - const w = ctx.measureText(this.title).width; - ctx.fillText(this.title, this.x + this.width + 4, this.y + 12); - } else { - const w = ctx.measureText(this.title).width; - ctx.fillText(this.title, this.x - 4 - w, this.y + 12); - } - } - } - - drawActiveConnection(ctx: CanvasRenderingContext2D) { - if (this.hitSocket) { - const mouseX = this.mouseDragX; - const mouseY = this.mouseDragY; - - ctx.beginPath(); - ctx.strokeStyle = "rgb(200, 200, 200)"; - ctx.lineWidth = 4; - ctx.moveTo(this.hitSocket.centerX(), this.hitSocket.centerY()); - - if (this.hitSocket.socketType == SocketType.Out) { - ctx.bezierCurveTo( - this.hitSocket.centerX() + 60, - this.hitSocket.centerY(), // control point 1 - mouseX - 60, - mouseY, - mouseX, - mouseY - ); - } else { - ctx.bezierCurveTo( - this.hitSocket.centerX() - 60, - this.hitSocket.centerY(), // control point 1 - mouseX + 60, - mouseY, - mouseX, - mouseY - ); - } - - ctx.setLineDash([5, 3]); - ctx.stroke(); - ctx.setLineDash([]); - } - } - - // MOUSE EVENTS - public mouseDown(evt: MouseDownEvent) { - this.hit = true; - this.hitSocket = null; - this.mouseDragX = evt.globalX; - this.mouseDragY = evt.globalY; - - // if socket is an in socket with a connection, make hitsocket the connected out socket - if (this.socketType == SocketType.In && this.hasConnections()) { - this.hitSocket = this.getConnection(0).socketA; // insockets should only have one connection - // store connection for removal as well - this.hitConnection = this.getConnection(0); - // console.log("hit connection"); - // console.log(this.hitConnection); - } else this.hitSocket = this; - } - - public mouseMove(evt: MouseMoveEvent) { - if (this.hit) { - // movement - //this.move(evt.deltaX, evt.deltaY); - this.mouseDragX = evt.globalX; - this.mouseDragY = evt.globalY; - } - } - - public mouseUp(evt: MouseUpEvent) { - const mouseX = evt.globalX; - const mouseY = evt.globalY; - - // for undo-redo - const movedCons: ConnectionGraphicsItem[] = []; - const actions: ConnectionSwitchAction[] = []; - - if (this.hitSocket) { - // if potential cycle in graph is found, cancel connection action quietly - const closeSock: SocketGraphicsItem = this.scene.getHitSocket( - mouseX, - mouseY - ); - - // check if a cyclical connection is about to be added, - // this can only happen when forming a new connection so no need to check - // for other conditions (existing connection being removed, etc...) - // - // this means one socket has to be SocketType.Out and the other should be SocketType.In - let remainsDAG = false; - - if (closeSock) { - if ( - this.hitSocket.socketType == SocketType.Out && - closeSock.socketType == SocketType.In - ) - remainsDAG = - this.scene.remainsDAG(this.hitSocket.node, closeSock.node) || - remainsDAG; - else if ( - this.hitSocket.socketType == SocketType.In && - closeSock.socketType == SocketType.Out - ) - remainsDAG = - this.scene.remainsDAG(closeSock.node, this.hitSocket.node) || - remainsDAG; - - if (!remainsDAG) { - this.hit = false; - this.hitSocket = null; - this.hitConnection = null; - - return; - } - } - - // remove previous connection - // this block creates a new connection regardless of the outcome - if (this.hitConnection) { - this.scene.removeConnection(this.hitConnection); - - // let action = new RemoveConnectionAction( - // this.scene, - // this.hitConnection - // ); - // UndoStack.current.push(action); - - movedCons.push(this.hitConnection); - actions.push(ConnectionSwitchAction.Remove); - - this.hitConnection = null; - } - - if ( - closeSock && - closeSock != this.hitSocket && - closeSock.socketType != this.hitSocket.socketType && - closeSock.node != this.hitSocket.node - ) { - // close socket - const con: ConnectionGraphicsItem = new ConnectionGraphicsItem(); - // out socket should be on the left, socketA - if (this.hitSocket.socketType == SocketType.Out) { - // out socket - con.socketA = this.hitSocket; - con.socketB = closeSock; - - // close sock is an inSocket which means it should only have one connection - // remove current connection from inSocket - if (closeSock.hasConnections()) { - const removeCon = closeSock.getConnection(0); - this.scene.removeConnection(removeCon); - movedCons.push(removeCon); - actions.push(ConnectionSwitchAction.Remove); - - // let action = new RemoveConnectionAction( - // this.scene, - // removeCon - // ); - // UndoStack.current.push(action); - } - } else { - // in socket - con.socketA = closeSock; - con.socketB = this.hitSocket; - } - - // link connection - //con.socketA.con = con; - //con.socketB.con = con; - - this.scene.addConnection(con); - movedCons.push(con); - actions.push(ConnectionSwitchAction.Add); - - // let action = new AddConnectionAction(this.scene, con); - // UndoStack.current.push(action); - } else if (!closeSock) { - // delete connection if hit node is an insock - // if we're here it means one of 2 things: - // 1: a new connection failed to form - // 2: we're breaking a previously formed connection, which can only be done - // by dragging from an insock that already has a connection - - if (this.hitSocket.socketType == SocketType.Out) { - /* - if (this.hitSocket.hasConnections()) { - // remove connection - //let con = this.hitSocket.con; - this.removeConnection(this.hitSocket.getConnectionFrom(this.hitSocket)); - } - */ - - if (this.hitConnection) { - this.scene.removeConnection(this.hitConnection); - - movedCons.push(this.hitConnection); - actions.push(ConnectionSwitchAction.Remove); - // let action = new RemoveConnectionAction( - // this.scene, - // this.hitConnection - // ); - // UndoStack.current.push(action); - } - } - } - } - - this.hit = false; - this.hitSocket = null; - this.hitConnection = null; - - // undo-redo - const action = new SwitchConnectionAction(this.scene, movedCons, actions); - UndoStack.current.push(action); - } -} diff --git a/src/lib/scene/view.ts b/src/lib/scene/view.ts deleted file mode 100644 index 7211d589..00000000 --- a/src/lib/scene/view.ts +++ /dev/null @@ -1,385 +0,0 @@ -// https://github.com/freegroup/draw2d/blob/master/src/Canvas.js - -//https://github.com/jgraph/mxgraph/blob/master/javascript/src/js/view/mxGraph.js#L7810 - -// https://bitbucket.org/nclsbrwn/texturedesigner/src/master/src/Designer/scene.ts?mode=edit&spa=0&at=master&fileviewer=file-view-default - -// https://bitbucket.org/nclsbrwn/texturedesigner/src/master/ - -// https://stackoverflow.com/questions/45528111/javascript-canvas-map-style-point-zooming/45528455#45528455 - -// get local mouse position -function _getMousePos(canvas, evt) { - const rect = canvas.getBoundingClientRect(); - return new Vector2(evt.clientX - rect.left, evt.clientY - rect.top); -} - -export class Vector2 { - x: number; - y: number; - - constructor(x: number, y: number) { - this.x = x; - this.y = y; - } - - clone(): Vector2 { - return new Vector2(this.x, this.y); - } - - static add(a: Vector2, b: Vector2): Vector2 { - return new Vector2(a.x + b.x, a.y + b.y); - } - - static subtract(a: Vector2, b: Vector2): Vector2 { - return new Vector2(a.x - b.x, a.y - b.y); - } -} - -export class Rect { - public x = 0; - public y = 0; - public width: number; - public height: number; - - color: string; - - public constructor() { - //this.scene = scene; - //scene.addItem(this); - this.width = 1; - this.height = 1; - this.color = "rgb(255, 50, 50)"; - } - - public setSize(w: number, h: number) { - this.width = w; - this.height = h; - } - - public isPointInside(px: number, py: number): boolean { - if ( - px >= this.x && - px <= this.x + this.width && - py >= this.y && - py <= this.y + this.height - ) - return true; - return false; - } - - public setCenter(x: number, y: number) { - this.x = x - this.width / 2; - this.y = y - this.height / 2; - } - - public centerX(): number { - return this.x + this.width / 2; - } - - public centerY(): number { - return this.y + this.height / 2; - } - - public move(dx: number, dy: number) { - this.x += dx; - this.y += dy; - } - - public get left() { - return this.x; - } - - public get top() { - return this.y; - } - - public get right() { - return this.x + this.width; - } - - public get bottom() { - return this.y + this.height; - } - - public get center() { - return new Vector2(this.centerX(), this.centerY()); - } - - public intersects(other: Rect) { - if (this.left > other.right) return false; - if (this.right < other.left) return false; - if (this.bottom < other.top) return false; - if (this.top > other.bottom) return false; - - return true; - } - - public expand(uniformSize: number) { - const halfSize = uniformSize * 0.5; - - // assume it's a rect with a positive area - this.x -= halfSize; - this.y -= halfSize; - this.width += halfSize * 2; - this.height += halfSize * 2; - } - - public expandByRect(rect: Rect) { - // assume it's a rect with a positive area - this.x = Math.min(this.x, rect.x); - this.y = Math.min(this.y, rect.y); - this.width = Math.max(this.width, rect.width); - this.height = Math.max(this.height, rect.height); - } - - clone(): Rect { - const rect = new Rect(); - rect.x = this.x; - rect.y = this.y; - rect.width = this.width; - rect.height = this.height; - - return rect; - } -} - -/* - This class handles panning and zooming of scene - Tracks mouse movement, position and clicks - Also converts from scene space to screen space and - vice versa. -*/ -export class SceneView { - canvas: HTMLCanvasElement; - context: CanvasRenderingContext2D; - - // screen/canvas space - globalMousePos: Vector2; - - mousePos: Vector2; - prevMousePos: Vector2; - mouseDownPos: Vector2; // pos of last mouse down - mouseDragDiff: Vector2; // mouse drag diff - - zoomFactor: number; - offset: Vector2; - - panning: boolean; - panStart: SVGPoint; - - constructor(canvas: HTMLCanvasElement) { - this.canvas = canvas; - this.context = this.canvas.getContext("2d"); - - const self = this; - canvas.addEventListener("mousemove", function(evt: MouseEvent) { - self.onMouseMove(evt); - }); - canvas.addEventListener("mousedown", function(evt: MouseEvent) { - self.onMouseDown(evt); - }); - canvas.addEventListener("mouseup", function(evt: MouseEvent) { - self.onMouseUp(evt); - }); - canvas.addEventListener("mouseout", function(evt: MouseEvent) { - self.onMouseOut(evt); - }); - canvas.addEventListener("mousewheel", function(evt: WheelEvent) { - self.onMouseScroll(evt); - }); - canvas.addEventListener("contextmenu", function(evt: MouseEvent) { - evt.preventDefault(); - }); - - // todo: do document mouse move event callback too - document.addEventListener("mousemove", function(evt: MouseEvent) { - self.onGlobalMouseMove(evt); - }); - - this.zoomFactor = 1; - this.offset = new Vector2(0, 0); - - this.mousePos = new Vector2(0, 0); - this.globalMousePos = new Vector2(0, 0); - } - - getAbsPos() { - return new Vector2(this.canvas.offsetLeft, this.canvas.offsetTop); - } - - isMouseOverCanvas() { - const rect = this.canvas.getBoundingClientRect(); - //console.log(rect); - if (this.globalMousePos.x < rect.left) return false; - if (this.globalMousePos.y < rect.top) return false; - if (this.globalMousePos.x > rect.right) return false; - if (this.globalMousePos.y > rect.bottom) return false; - - return true; - } - - onMouseDown(evt: MouseEvent) { - if (evt.button == 1 || evt.button == 2) { - this.panning = true; - - this.mouseDownPos = _getMousePos(this.canvas, evt); - } - - this.mousePos = _getMousePos(this.canvas, evt); - } - - onMouseUp(evt: MouseEvent) { - if (evt.button == 1 || evt.button == 2) { - this.panning = false; - } - } - - onMouseMove(evt: MouseEvent) { - this.prevMousePos = this.mousePos; - this.mousePos = _getMousePos(this.canvas, evt); - - if (this.panning) { - const prev = this.canvasToScene(this.prevMousePos); - const cur = this.canvasToScene(this.mousePos); - const diff = new Vector2(prev.x - cur.x, prev.y - cur.y); - this.mouseDragDiff = diff; - - const factor = this.zoomFactor; - this.offset.x -= diff.x * factor; - this.offset.y -= diff.y * factor; - } - } - - onGlobalMouseMove(evt: MouseEvent) { - this.globalMousePos = new Vector2(evt.pageX, evt.pageY); - } - - onMouseScroll(evt: WheelEvent) { - // no panning while zooming - if (this.panning) return; - - const pos = _getMousePos(this.canvas, evt); - const delta = (evt).wheelDelta > 0 ? 1.1 : 1.0 / 1.1; - - // offset from mouse pos - // find offset from previous zoom then move offset by that value - - this.zoomFactor *= delta; - this.offset.x = pos.x - (pos.x - this.offset.x) * delta; // * (factor); - this.offset.y = pos.y - (pos.y - this.offset.y) * delta; // * (factor); - - //this.zoom(pos.x, pos.y, delta); - - evt.preventDefault(); - return false; - } - - onMouseOut(evt: MouseEvent) { - // cancel panning - this.panning = false; - } - - get sceneCenter(): Vector2 { - return this.canvasToSceneXY(this.canvas.width / 2, this.canvas.height / 2); - } - - zoom(x: number, y: number, level: number) {} - - clear(context: CanvasRenderingContext2D, style = "rgb(50,50,50)") { - const ctx = context; - - ctx.setTransform(1, 0, 0, 1, 0, 0); - //ctx.fillStyle = "rgb(50,50,50)"; - ctx.fillStyle = style; - ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); - } - - setViewMatrix(context: CanvasRenderingContext2D) { - context.setTransform( - this.zoomFactor, - 0, - 0, - this.zoomFactor, - this.offset.x, - this.offset.y - ); - } - - drawGrid( - ctx: CanvasRenderingContext2D, - GRID_SIZE: number, - strokeStyle: string, - lineWidth: number - ) { - // todo: convert line points to canvas space, reset context and draw them there to preserve line width - - //const GRID_SIZE = 100; - const tl = this.canvasToSceneXY(0, 0); - const br = this.canvasToSceneXY(this.canvas.width, this.canvas.height); - - //ctx.strokeStyle = "#4A5050"; - //ctx.strokeStyle = "#464C4C"; - ctx.strokeStyle = strokeStyle; - ctx.lineWidth = lineWidth; - - // vertical - const vCount = (br.x - tl.x) / GRID_SIZE + 1.0; - const xStart = tl.x - (tl.x % GRID_SIZE); - for (let i = 0; i < vCount; i++) { - ctx.beginPath(); - ctx.moveTo(xStart + i * GRID_SIZE, tl.y); - ctx.lineTo(xStart + i * GRID_SIZE, br.y); - ctx.stroke(); - } - - // horizontal - const hCount = (br.y - tl.y) / GRID_SIZE + 1.0; - const yStart = tl.y - (tl.y % GRID_SIZE); - for (let i = 0; i < hCount; i++) { - ctx.beginPath(); - ctx.moveTo(tl.x, yStart + i * GRID_SIZE); - ctx.lineTo(br.x, yStart + i * GRID_SIZE); - ctx.stroke(); - } - } - - canvasToScene(pos: Vector2): Vector2 { - return new Vector2( - (pos.x - this.offset.x) * (1.0 / this.zoomFactor), - (pos.y - this.offset.y) * (1.0 / this.zoomFactor) - ); - } - - canvasToSceneXY(x: number, y: number): Vector2 { - return new Vector2( - (x - this.offset.x) * (1.0 / this.zoomFactor), - (y - this.offset.y) * (1.0 / this.zoomFactor) - ); - } - - globalToCanvasXY(x: number, y: number): Vector2 { - const rect = this.canvas.getBoundingClientRect(); - return new Vector2(x - rect.left, y - rect.top); - } - - getMouseSceneSpace(): Vector2 { - return this.canvasToScene(this.mousePos); - } - - getMouseDeltaCanvasSpace(): Vector2 { - const prev = this.prevMousePos; - const cur = this.mousePos; - const diff = new Vector2(cur.x - prev.x, cur.y - prev.y); - - return diff; - } - - getMouseDeltaSceneSpace(): Vector2 { - const prev = this.canvasToScene(this.prevMousePos); - const cur = this.canvasToScene(this.mousePos); - const diff = new Vector2(cur.x - prev.x, cur.y - prev.y); - - return diff; - } -} diff --git a/src/lib/undostack.ts b/src/lib/undostack.ts deleted file mode 100644 index 4ae9fbc7..00000000 --- a/src/lib/undostack.ts +++ /dev/null @@ -1,88 +0,0 @@ -export class Action { - redo() {} - - undo() {} -} - -// https://gist.github.com/dsamarin/3050311 -// https://github.com/agrinko/js-undo-manager -// https://doc.qt.io/qt-5/qundostack.html#:~:text=An%20undo%20stack%20maintains%20a,createUndoAction()%20and%20createRedoAction(). -export class UndoStack { - static current: UndoStack; - - stack: Action[]; - pointer: number; - - // this tracks the last clean state - savedState: number = -1; - cleanStatusChanged: (isClean: boolean) => void = null; - - constructor() { - this.pointer = -1; - this.stack = []; - } - - push(action: Action) { - let isClean = this.isClean(); - - this.pointer += 1; - this.stack.splice(this.pointer); - - this.stack.push(action); - - if (isClean != this.isClean() && this.cleanStatusChanged) { - this.cleanStatusChanged(this.isClean()); - } - } - - undo() { - if (this.pointer < 0) return; - - let isClean = this.isClean(); - - const action = this.stack[this.pointer]; - action.undo(); - - this.pointer -= 1; - - if (isClean != this.isClean() && this.cleanStatusChanged) { - this.cleanStatusChanged(this.isClean()); - } - } - - redo() { - if (this.pointer >= this.stack.length - 1) return; - - let isClean = this.isClean(); - - this.pointer += 1; - - const action = this.stack[this.pointer]; - action.redo(); - - if (isClean != this.isClean() && this.cleanStatusChanged) { - this.cleanStatusChanged(this.isClean()); - } - } - - clear() { - let isClean = this.isClean(); - - this.pointer = -1; - this.savedState = -1; - this.stack = []; - - if (!isClean) { - this.cleanStatusChanged(true); - } - } - - setClean() { - this.savedState = this.pointer; - this.cleanStatusChanged(true); - } - - isClean() { - return this.savedState == this.pointer; - } -} diff --git a/src/lib/utils.ts b/src/lib/utils.ts deleted file mode 100644 index 0b7899f9..00000000 --- a/src/lib/utils.ts +++ /dev/null @@ -1,9 +0,0 @@ -export class Guid { - static newGuid() { - return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) { - const r = (Math.random() * 16) | 0, - v = c == "x" ? r : (r & 0x3) | 0x8; - return v.toString(16); - }); - } -} diff --git a/src/lib/view3d.ts b/src/lib/view3d.ts deleted file mode 100644 index bee4522d..00000000 --- a/src/lib/view3d.ts +++ /dev/null @@ -1,513 +0,0 @@ -import * as THREE from "three"; -import { OBJLoader } from "three/examples/jsm/loaders/OBJLoader"; -import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader"; -import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js"; -import { FBXLoader } from "three/examples/jsm/loaders/FBXLoader.js"; -import { OrbitControls } from "three-orbitcontrols-ts"; -import { DesignerNode } from "./designer/designernode"; -import { ImageCanvas } from "./designer/imagecanvas"; -import { SphereGeometry } from "./geometry/sphere"; -import { CylinderGeometry } from "./geometry/cylinder"; -import { PlaneGeometry } from "./geometry/plane"; -import path from "path"; -import { DataTexture } from "three"; - -// https://www.bostonbiomotion.com/ -// https://blog.subvertallmedia.com/2018/06/25/three-js-imports.html -// https://areknawo.com/building-3d-2048-game-with-vue-and-three-js-setup/ -// https://github.com/nicolaspanel/three-orbitcontrols-ts/issues/1 -// https://github.com/nicolaspanel/three-orbitcontrols-ts/issues/7 -// "three-orbitcontrols-ts": "git+https://git@github.com/nicolaspanel/three-orbitcontrols-ts.git", -// https://stackoverflow.com/questions/16334505/how-to-load-obj-model-with-three-js-in-typescript?rq=1 - -// PMREM Generation -// https://github.com/mrdoob/three.js/pull/7902 -// https://discourse.threejs.org/t/are-there-any-guides-for-hdr-setups-for-novices/3932/2 -// examples: -// https://threejs.org/examples/?q=hdr#webgl_materials_envmaps_hdr -// https://github.com/mrdoob/three.js/blob/master/examples/webgl_materials_envmaps_hdr.html - -export class View3D { - private camera!: THREE.PerspectiveCamera; - private renderer!: THREE.WebGLRenderer; - private scene: THREE.Scene = new THREE.Scene(); - private material: THREE.MeshStandardMaterial = new THREE.MeshStandardMaterial( - { - //color: 0x3F51B5, - color: 0xffffff, - roughness: 0.5, - metalness: 0.0, - transparent: true, - // alphaTest: 0, - // depthFunc: THREE.AlwaysDepth, - side: THREE.FrontSide, - blending: THREE.NormalBlending - } - ); - private cubeMap: THREE.CubeTexture; - private skyPath: string = "assets/env/wide_street_01_1k.hdr"; - - private model: THREE.Object3D; - private controls: OrbitControls; - // texture repeat - private repeat = 1; - - // geometry - private sphereGeom = new SphereGeometry(0.7, 128, 128); - private cubeGeom = new THREE.BoxGeometry(); - private planeGeom = new PlaneGeometry(2, 2, 100, 100); - private cylinderGeom = new CylinderGeometry(0.5, 0.5, 1, 64, 64, true); - - setSkyPath(path: string) { - this.skyPath = path; - this.loadEnvEquirect(); - } - - setCanvas(el: HTMLCanvasElement) { - this.setupRenderer(el); - this.camera = new THREE.PerspectiveCamera( - 45, - el.width / el.height, - 0.1, - 1000 - ); - this.camera.position.z = 2.6; - this.camera.position.y = 1; - this.camera.position.x = 1; - - this.setupOrbitControls(el); - this.setupLighting(); - // this.cubeMap = this.loadEnv(); - // this.material.envMap = this.cubeMap; - this.loadEnvEquirect(); - - //const geometry = new THREE.SphereGeometry(1, 64, 64); - this.model = new THREE.Mesh(this.sphereGeom, this.material); - - // let loader = new THREE.ObjectLoader(); - // loader.load("app://./") - - this.scene.add(this.model); - - const animate = () => { - requestAnimationFrame(animate); - this.controls.update(); - this.renderer.render(this.scene, this.camera); - }; - - animate(); - } - - setupRenderer(el: HTMLCanvasElement) { - const renderer = new THREE.WebGLRenderer({ - alpha: true, - canvas: el, - preserveDrawingBuffer: true, - antialias: true - }); - renderer.setClearColor(0x000000, 0); - renderer.physicallyCorrectLights = true; - // renderer.gammaInput = false; - // renderer.gammaOutput = true; - renderer.gammaFactor = 2.2; - renderer.outputEncoding = THREE.GammaEncoding; - renderer.shadowMap.enabled = true; - renderer.shadowMap.type = THREE.PCFSoftShadowMap; - renderer.setSize(el.width, el.height); - - renderer.toneMapping = THREE.ACESFilmicToneMapping; - - this.renderer = renderer; - } - - setupLighting() { - const container = new THREE.Object3D(); - - const brightness = 2; - - let object3d = new THREE.DirectionalLight("white", 0.225 * brightness); - object3d.position.set(2.6, 1, 3); - object3d.name = "Back light"; - container.add(object3d); - - object3d = new THREE.DirectionalLight("white", 0.375 * brightness); - object3d.position.set(-2, -1, 0); - object3d.name = "Key light"; - container.add(object3d); - - object3d = new THREE.DirectionalLight("white", 0.75 * brightness); - object3d.position.set(3, 3, 2); - object3d.name = "Fill light"; - container.add(object3d); - - // this.scene.add(container); - } - - setupOrbitControls(el: HTMLElement) { - const controls = new OrbitControls(this.camera, el); - - controls.enableZoom = true; - controls.enableRotate = true; - - //controls.autoRotate = true; - controls.enablePan = true; - controls.keyPanSpeed = 7.0; - controls.enableKeys = true; - controls.target = new THREE.Vector3(0, 0, 0); - controls.mouseButtons.PAN = null; - controls.keys = { - LEFT: 0, - UP: 0, - RIGHT: 0, - BOTTOM: 0 - }; - - this.controls = controls; - } - - loadEnvironment(basePath: string) {} - - resize(width: number, height: number) { - this.camera.aspect = width / height; - this.camera.updateProjectionMatrix(); - this.renderer.setSize(width, height); - } - private _init() {} - - setTexture(imageCanvas: ImageCanvas, channelName: string) { - if (channelName == "albedo") - this.setAlbedoTexture(imageCanvas, channelName); - if (channelName == "normal") - this.setNormalTexture(imageCanvas, channelName); - if (channelName == "metalness") - this.setMetalnessTexture(imageCanvas, channelName); - if (channelName == "roughness") - this.setRoughnessTexture(imageCanvas, channelName); - if (channelName == "height") - this.setHeightTexture(imageCanvas, channelName); - if (channelName == "emission") - this.setEmissionTexture(imageCanvas, channelName); - if (channelName == "ao") this.setAoTexture(imageCanvas, channelName); - if (channelName == "alpha") this.setAlphaTexture(imageCanvas, channelName); - } - - clearTexture(channelName: string) { - if (channelName == "albedo") { - this.material.map = null; - } - if (channelName == "normal") { - this.material.normalMap = null; - } - if (channelName == "metalness") { - this.material.metalnessMap = null; - this.material.metalness = 0; - } - if (channelName == "roughness") { - this.material.roughnessMap = null; - this.material.roughness = 0.5; - } - if (channelName == "height") { - this.material.displacementMap = null; - } - if (channelName == "emission") { - this.material.emissiveMap = null; - } - if (channelName == "ao") { - this.material.aoMap = null; - } - if (channelName == "alpha") { - this.material.alphaMap = null; - } - this.material.needsUpdate = true; - } - - updateTexture(channelName: string) { - if (channelName == "albedo" && this.material.map != null) { - this.material.map.needsUpdate = true; - } - if (channelName == "normal" && this.material.normalMap != null) { - this.material.normalMap.needsUpdate = true; - } - if (channelName == "metalness" && this.material.metalnessMap != null) { - this.material.metalnessMap.needsUpdate = true; - } - if (channelName == "roughness" && this.material.roughnessMap != null) { - this.material.roughnessMap.needsUpdate = true; - } - if (channelName == "height" && this.material.displacementMap != null) { - this.material.displacementMap.needsUpdate = true; - } - if (channelName == "emission" && this.material.emissiveMap != null) { - this.material.emissiveMap.needsUpdate = true; - } - if (channelName == "ao" && this.material.aoMap != null) { - this.material.aoMap.needsUpdate = true; - } - if (channelName == "alpha" && this.material.alphaMap != null) { - this.material.alphaMap.needsUpdate = true; - } - this.material.needsUpdate = true; - } - - setAlbedoTexture(imageCanvas: ImageCanvas, channelName: string) { - const tex = new THREE.CanvasTexture(imageCanvas.canvas); - tex.wrapS = tex.wrapT = THREE.RepeatWrapping; - tex.repeat.set(this.repeat, this.repeat); - tex.anisotropy = this.renderer.capabilities.getMaxAnisotropy(); - tex.encoding = THREE.GammaEncoding; - - tex.needsUpdate = true; - this.material.map = tex; - this.material.needsUpdate = true; - } - - setNormalTexture(imageCanvas: ImageCanvas, channelName: string) { - const tex = new THREE.CanvasTexture(imageCanvas.canvas); - tex.wrapS = tex.wrapT = THREE.RepeatWrapping; - tex.repeat.set(this.repeat, this.repeat); - tex.anisotropy = this.renderer.capabilities.getMaxAnisotropy(); - - tex.needsUpdate = true; - this.material.normalMap = tex; - this.material.needsUpdate = true; - } - - setMetalnessTexture(imageCanvas: ImageCanvas, channelName: string) { - const tex = new THREE.CanvasTexture(imageCanvas.canvas); - tex.wrapS = tex.wrapT = THREE.RepeatWrapping; - tex.repeat.set(this.repeat, this.repeat); - tex.anisotropy = this.renderer.capabilities.getMaxAnisotropy(); - - tex.needsUpdate = true; - this.material.metalnessMap = tex; - this.material.metalness = 1.0; - this.material.needsUpdate = true; - } - - setRoughnessTexture(imageCanvas: ImageCanvas, channelName: string) { - const tex = new THREE.CanvasTexture(imageCanvas.canvas); - tex.wrapS = tex.wrapT = THREE.RepeatWrapping; - tex.repeat.set(this.repeat, this.repeat); - tex.anisotropy = this.renderer.capabilities.getMaxAnisotropy(); - - tex.needsUpdate = true; - this.material.roughnessMap = tex; - this.material.roughness = 1.0; - this.material.needsUpdate = true; - } - - setHeightTexture(imageCanvas: ImageCanvas, channelName: string) { - const tex = new THREE.CanvasTexture(imageCanvas.canvas); - tex.wrapS = tex.wrapT = THREE.RepeatWrapping; - tex.repeat.set(this.repeat, this.repeat); - tex.anisotropy = this.renderer.capabilities.getMaxAnisotropy(); - - tex.needsUpdate = true; - this.material.displacementMap = tex; - this.material.displacementScale = 0.1; - this.material.needsUpdate = true; - } - - setEmissionTexture(imageCanvas: ImageCanvas, channelName: string) { - console.log("setting emission texture"); - const tex = new THREE.CanvasTexture(imageCanvas.canvas); - tex.wrapS = tex.wrapT = THREE.RepeatWrapping; - tex.repeat.set(this.repeat, this.repeat); - tex.anisotropy = this.renderer.capabilities.getMaxAnisotropy(); - tex.encoding = THREE.GammaEncoding; - - tex.needsUpdate = true; - this.material.emissiveMap = tex; - this.material.emissive = new THREE.Color(1, 1, 1); - this.material.needsUpdate = true; - } - - setAoTexture(imageCanvas: ImageCanvas, channelName: string) { - const tex = new THREE.CanvasTexture(imageCanvas.canvas); - tex.wrapS = tex.wrapT = THREE.RepeatWrapping; - tex.repeat.set(this.repeat, this.repeat); - tex.anisotropy = this.renderer.capabilities.getMaxAnisotropy(); - - tex.needsUpdate = true; - this.material.aoMap = tex; - this.material.needsUpdate = true; - } - - setAlphaTexture(imageCanvas: ImageCanvas, channelName: string) { - const tex = new THREE.CanvasTexture(imageCanvas.canvas); - tex.wrapS = tex.wrapT = THREE.RepeatWrapping; - tex.repeat.set(this.repeat, this.repeat); - tex.anisotropy = this.renderer.capabilities.getMaxAnisotropy(); - - tex.needsUpdate = true; - this.material.alphaMap = tex; - this.material.needsUpdate = true; - } - - setRepeat(repeat: number) { - this.repeat = repeat; - - const mat = this.material; - if (mat.map) { - mat.map.repeat.set(repeat, repeat); - mat.map.needsUpdate = true; - } - - if (mat.normalMap) { - mat.normalMap.repeat.set(repeat, repeat); - mat.normalMap.needsUpdate = true; - } - - if (mat.metalnessMap) { - mat.metalnessMap.repeat.set(repeat, repeat); - mat.metalnessMap.needsUpdate = true; - } - - if (mat.roughnessMap) { - mat.roughnessMap.repeat.set(repeat, repeat); - mat.roughnessMap.needsUpdate = true; - } - - if (mat.displacementMap) { - mat.displacementMap.repeat.set(repeat, repeat); - mat.displacementMap.needsUpdate = true; - } - - if (mat.alphaMap) { - mat.alphaMap.repeat.set(repeat, repeat); - mat.alphaMap.needsUpdate = true; - } - - if (mat.emissiveMap) { - mat.emissiveMap.repeat.set(repeat, repeat); - mat.emissiveMap.needsUpdate = true; - } - - if (mat.aoMap) { - mat.aoMap.repeat.set(repeat, repeat); - mat.aoMap.needsUpdate = true; - } - } - - setModel(modelName: string) { - if (this.model) this.scene.remove(this.model); - - let geom: THREE.Geometry; - if (modelName == "sphere") geom = this.sphereGeom; - if (modelName == "cube") geom = this.cubeGeom; - if (modelName == "plane") geom = this.planeGeom; - if (modelName == "cylinder") geom = this.cylinderGeom; - // crash if none is valid - - this.model = new THREE.Mesh(geom, this.material); - this.scene.add(this.model); - } - - loadModel(modelPath: string) { - const ext = modelPath - .split(".") - .pop() - .toLocaleLowerCase(); - - let loader = null; - if (ext === "obj") loader = new OBJLoader(); - else if (ext === "fbx") loader = new FBXLoader(); - else return; - - loader.load(modelPath, group => { - if (this.model) this.scene.remove(this.model); - - // assign material to all children - // for (let child of group.children) - // if (child instanceof THREE.Mesh) - // (child as THREE.Mesh).material = this.material; - - group.traverse(obj => { - if (obj instanceof THREE.Mesh) - (obj as THREE.Mesh).material = this.material; - }); - - this.model = group; - this.scene.add(this.model); - }); - } - - reset() { - // clear all textures - // reset camera position - this.material = new THREE.MeshStandardMaterial({ - color: 0xffffff, - roughness: 0.5, - metalness: 0.0, - transparent: true, - // alphaTest: 0, - // depthFunc: THREE.AlwaysDepth, - side: THREE.FrontSide, - blending: THREE.NormalBlending - }); - - // this.material.envMap = this.cubeMap; - this.loadEnvEquirect(); - - (this.model as THREE.Mesh).material = this.material; - } - - setToneMappingExposure(exposure: number) { - this.renderer.toneMappingExposure = exposure; - } - - loadEnv() { - //var path = '/images/cube/Bridge2/'; - const basePath = - (process.env.NODE_ENV == "production" ? "file://" : "") + - path.join(process.env.BASE_URL, "assets/env/SwedishRoyalCastle/"); - const format = ".jpg"; - const envMap = new THREE.CubeTextureLoader().load([ - basePath + "posx" + format, - basePath + "negx" + format, - basePath + "posy" + format, - basePath + "negy" + format, - basePath + "posz" + format, - basePath + "negz" + format - ]); - - return envMap; - } - - // load equirect - - loadEnvEquirect() { - const skyPath = this.skyPath; - - const hdrPath = - (process.env.NODE_ENV == "production" ? "file://" : "") + - path.join( - process.env.BASE_URL, - // "assets/env/wide_street_01_1k.hdr" - // "assets/env/christmas/christmas_photo_studio_01_1k.hdr" - skyPath - ); - - new RGBELoader() - .setDataType(THREE.UnsignedByteType) - .load(hdrPath, (texture: DataTexture) => { - // skyPath could have changed between setting the texture and it - // actually loading, this check is there for that - if (skyPath !== this.skyPath) return; - - const pmremGenerator = new THREE.PMREMGenerator(this.renderer); - pmremGenerator.compileEquirectangularShader(); - - const evtRT = pmremGenerator.fromEquirectangular(texture); - const tex = evtRT.texture; - tex.minFilter = THREE.LinearFilter; - tex.magFilter = THREE.LinearFilter; - // tex.needsUpdate = true; - - this.material.envMap = evtRT.texture; - this.material.needsUpdate = true; - - this.scene.background = evtRT.texture; - }); - } -} diff --git a/src/main.ts b/src/main.ts deleted file mode 100644 index e59833ac..00000000 --- a/src/main.ts +++ /dev/null @@ -1,55 +0,0 @@ -import Vue from "vue"; -import vgl from "vue-golden-layout"; -//import vgl from "vue-golden-layout/src"; -import "golden-layout/src/css/goldenlayout-dark-theme.css"; -import "../public/css/scrollbar.css"; -import "./utils/inspectelement"; -import "boxicons/css/boxicons.css"; -require("typeface-open-sans"); -import * as Sentry from "@sentry/electron"; - -// toast -import VueToast from "vue-toast-notification"; -//import 'vue-toast-notification/dist/theme-default.css'; -import "vue-toast-notification/dist/theme-sugar.css"; - -// https://github.com/EmbeddedEnterprises/ng6-golden-layout/blob/master/README.md -import * as $ from "jquery"; -(window).$ = $; -(window).JQuery = $; - -// todo: fix later -// https://docs.sentry.io/platforms/javascript/guides/electron/ -// if (process.env.VUE_APP_SENTRY_DNS) { -// Sentry.init({ dsn: process.env.VUE_APP_SENTRY_DNS }); -// } - -import App from "./App.vue"; -import router from "./router"; -import store from "./store"; -import VfmPlugin from "vue-final-modal"; - -Vue.config.productionTip = false; -Vue.use(vgl); -Vue.use(VueToast); -Vue.use(VfmPlugin); - -import { Titlebar, Color } from "custom-electron-titlebar"; -const titleBar = new Titlebar({ - backgroundColor: Color.fromHex("#333333"), - icon: "./icon.png", - shadow: true -}); - -let app = new Vue({ - router, - store, - render: h => - h(App, { - props: { - titleBar: titleBar - } - }) -}); - -app.$mount("#app"); diff --git a/src/menu.ts b/src/menu.ts deleted file mode 100644 index 21a65d92..00000000 --- a/src/menu.ts +++ /dev/null @@ -1,297 +0,0 @@ -// https://www.tutorialspoint.com/electron/electron_menus.htm -// https://programmer.help/blogs/use-electron-to-customize-menus.html -// https://electronjs.org/docs/api/menu -// https://alan.fyi/renderer-menu-functions-in-electron-vue/ - -const { app, Menu, BrowserWindow } = require("electron"); -import settings from "electron-settings"; -import { Settings } from "./settings"; - -export enum MenuCommands { - FileNew = "file_new", - FileOpen = "file_open", - FileOpenRecent = "file_open_recent", - FileSave = "file_save", - FileSaveAs = "file_saveas", - FileExit = "file_exit", - - EditUndo = "edit_undo", - EditRedo = "edit_redo", - EditCut = "edit_cut", - EditCopy = "edit_copy", - EditPaste = "edit_paste", - - ExportZip = "export_zip", - ExportUnity = "export_unity", - ExportUnityZip = "export_unity_zip", - - ExamplesGoldLinesMarbleTiles = "samples_1", - ExamplesGrenade = "samples_2", - ExamplesScrews = "samples_3", - ExamplesWoodenPlanks = "samples_4", - StoneGrass = "samples_5", - Copper = "samples_6", - FoilGasket = "samples_7", - StylizedGrass = "samples_8", - Sand = "samples_9", - YellowTiles = "samples_10", - - HelpTutorials = "help_tutorials", - HelpAbout = "help_about", - HelpSubmitBug = "help_submitbug", - HelpDocumentation = "help_docs" -} - -export function setupMenu() { - //get recent files - let recentFiles = settings.getSync(Settings.RecentFiles); - if (!Array.isArray(recentFiles)) { - recentFiles = []; - } - - let recentFilesMenu = []; - recentFiles.forEach(file => { - if (typeof file !== "string") return; - - recentFilesMenu.push({ - label: file, - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.FileOpenRecent, file); - } - }); - }); - - const template = [ - { - label: "File", - submenu: [ - { - label: "New", - accelerator: "CmdOrCtrl+N", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.FileNew); - } - }, - { - label: "Open", - accelerator: "CmdOrCtrl+O", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.FileOpen); - } - }, - { - label: "Open Recent", - submenu: recentFilesMenu - }, - { - label: "Save", - accelerator: "CmdOrCtrl+S", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.FileSave); - } - }, - { - label: "Save As..", - accelerator: "CmdOrCtrl+Shift+S", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.FileSaveAs); - } - }, - { - label: "Exit", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.FileExit); - } - } - ] - }, - { - label: "Edit", - submenu: [ - { - label: "Undo", - accelerator: "CmdOrCtrl+Z", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.EditUndo); - } - }, - { - label: "Redo", - accelerator: "CmdOrCtrl+Shift+Z", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.EditRedo); - } - }, - { - label: "Cut", - accelerator: "CmdOrCtrl+X", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.EditCut); - } - }, - { - label: "Copy", - accelerator: "CmdOrCtrl+C", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.EditCopy); - } - }, - { - label: "Paste", - accelerator: "CmdOrCtrl+V", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.EditPaste); - } - } - ] - }, - // { - // label: "Export", - // submenu: [ - // { - // label: "Zip", - // click: (item, focusedWindow) => { - // focusedWindow.webContents.send(MenuCommands.ExportZip); - // } - // }, - // { - // label: "Unity Material", - // click: (item, focusedWindow) => { - // focusedWindow.webContents.send(MenuCommands.ExportUnity); - // } - // }, - // { - // label: "Unity (Zip)", - // click: (item, focusedWindow) => { - // focusedWindow.webContents.send(MenuCommands.ExportUnityZip); - // } - // } - // ] - // }, - { - label: "Examples", - submenu: [ - { - label: "GoldLinedMarbleTiles", - click: (item, focusedWindow) => { - focusedWindow.webContents.send( - MenuCommands.ExamplesGoldLinesMarbleTiles - ); - } - }, - { - label: "Stylized Grass", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.StylizedGrass); - } - }, - { - label: "StoneGrass", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.StoneGrass); - } - }, - { - label: "Sand", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.Sand); - } - }, - { - label: "Foil Gasket", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.FoilGasket); - } - }, - { - label: "Copper", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.Copper); - } - }, - { - label: "Yellow Tiles", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.YellowTiles); - } - }, - { - label: "Grenade", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.ExamplesGrenade); - } - }, - { - label: "Screws", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.ExamplesScrews); - } - }, - { - label: "WoodenPlanks", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.ExamplesWoodenPlanks); - } - } - ] - }, - { - label: "Help", - submenu: [ - { - label: "Documentation", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.HelpDocumentation); - } - }, - { - label: "About", - click: (item, focusedWindow) => { - focusedWindow.webContents.send(MenuCommands.HelpAbout); - } - } - // { - // label: "Submit Bug" - // } - ] - }, - ...(process.env.NODE_ENV !== "production" - ? [ - { - label: "Dev", - submenu: [ - { role: "reload" }, - { - role: "forcereload", - click: function(item, focusedWindow) { - if (focusedWindow) { - // After overloading, refresh and close all secondary forms - if (focusedWindow.id === 1) { - BrowserWindow.getAllWindows().forEach(function(win) { - if (win.id > 1) { - win.close(); - } - }); - } - focusedWindow.reload(); - } - } - }, - { role: "toggledevtools" }, - { type: "separator" }, - { role: "resetzoom" }, - { role: "zoomin" }, - { role: "zoomout" }, - { type: "separator" }, - { role: "togglefullscreen" } - ] - } - ] - : []) - ]; - - //console.log(template); - - const menu = Menu.buildFromTemplate(template as any); - Menu.setApplicationMenu(menu); -} diff --git a/src/router.ts b/src/router.ts deleted file mode 100644 index 2c15b699..00000000 --- a/src/router.ts +++ /dev/null @@ -1,24 +0,0 @@ -import Vue from "vue"; -import Router from "vue-router"; -import Home from "./views/Home.vue"; - -Vue.use(Router); - -export default new Router({ - routes: [ - { - path: "/", - name: "home", - component: Home - }, - { - path: "/about", - name: "about", - // route level code-splitting - // this generates a separate chunk (about.[hash].js) for this route - // which is lazy-loaded when the route is visited. - component: () => - import(/* webpackChunkName: "about" */ "./views/About.vue") - } - ] -}); diff --git a/src/settings.ts b/src/settings.ts deleted file mode 100644 index ffd0c0b0..00000000 --- a/src/settings.ts +++ /dev/null @@ -1,3 +0,0 @@ -export enum Settings { - RecentFiles = "recent_files" -} diff --git a/src/shims-tsx.d.ts b/src/shims-tsx.d.ts deleted file mode 100644 index 151d2983..00000000 --- a/src/shims-tsx.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -import Vue, { VNode } from "vue"; - -declare global { - namespace JSX { - // tslint:disable no-empty-interface - type Element = VNode; - // tslint:disable no-empty-interface - type ElementClass = Vue; - interface IntrinsicElements { - [elem: string]: any; - } - } -} diff --git a/src/shims-vue.d.ts b/src/shims-vue.d.ts deleted file mode 100644 index 9ab7f9cd..00000000 --- a/src/shims-vue.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -declare module "*.vue" { - import Vue from "vue"; - export default Vue; -} - -declare module "*.json" { - const value: { [key: string]: any }; - export default value; -} diff --git a/src/store.ts b/src/store.ts deleted file mode 100644 index 0a6a3f7e..00000000 --- a/src/store.ts +++ /dev/null @@ -1,10 +0,0 @@ -import Vue from "vue"; -import Vuex from "vuex"; - -Vue.use(Vuex); - -export default new Vuex.Store({ - state: {}, - mutations: {}, - actions: {} -}); diff --git a/src/unobserve.ts b/src/unobserve.ts deleted file mode 100644 index 6b4a4858..00000000 --- a/src/unobserve.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Vue } from "vue-property-decorator"; - -const Observer = new Vue().$data.__ob__.constructor; - -// prevent Vue from auto-binding to large objects -// causes app to crash when cpu-based nodes with large -// arrays get observed -// https://github.com/rpkilby/vue-nonreactive/blob/master/vue-nonreactive.js -export function unobserve(obj): any { - // unobserve pr - if (obj) obj.__ob__ = new Observer({}); - - return obj; -} diff --git a/src/utils/inspectelement.ts b/src/utils/inspectelement.ts deleted file mode 100644 index 138b307f..00000000 --- a/src/utils/inspectelement.ts +++ /dev/null @@ -1,27 +0,0 @@ -const remote = require("@electron/remote"); -const Menu = remote.Menu; -const MenuItem = remote.MenuItem; - -let rightClickPosition = null; -if (process.env.NODE_ENV != "production") { - const menu = new remote.Menu(); - const menuItem = new MenuItem({ - label: "Inspect Element", - click: () => { - remote - .getCurrentWindow() - .webContents.inspectElement(rightClickPosition.x, rightClickPosition.y); - } - }); - menu.append(menuItem); - - window.addEventListener( - "contextmenu", - e => { - e.preventDefault(); - rightClickPosition = { x: e.x, y: e.y }; - menu.popup(); - }, - false - ); -} diff --git a/src/utils/propgroupcache.ts b/src/utils/propgroupcache.ts deleted file mode 100644 index 01a73c44..00000000 --- a/src/utils/propgroupcache.ts +++ /dev/null @@ -1,58 +0,0 @@ -export class PropGroupCache { - // private static _instance; - // public static get instance() { - // if (PropCache._instance == null) PropCache._instance = new PropCache(); - - // return PropCache._instance; - // } - - static states: Map> = new Map< - string, - Map - >(); - - static scrollLevels: Map = new Map(); - - static getCollapseState( - nodeType: string, - groupName: string, - defaultValue: boolean - ): boolean { - const states = PropGroupCache.states; - - if (!states.has(nodeType)) return defaultValue; - - const nodeStates = states.get(nodeType); - - if (!nodeStates.has(groupName)) return defaultValue; - - return nodeStates.get(groupName); - } - - static setCollapseState( - nodeType: string, - groupName: string, - val: boolean - ): void { - const states = PropGroupCache.states; - - let nodeStates: Map = null; - if (states.has(nodeType)) nodeStates = states.get(nodeType); - else nodeStates = new Map(); - - nodeStates.set(groupName, val); - - states.set(nodeType, nodeStates); - } - - static setScrollLevel(nodeName: string, level: number) { - PropGroupCache.scrollLevels.set(nodeName, level); - } - - static getScrollLevel(nodeName: string, defaultLevel: number): number { - if (PropGroupCache.scrollLevels.has(nodeName)) - return PropGroupCache.scrollLevels.get(nodeName); - - return defaultLevel; - } -} diff --git a/src/views/About.vue b/src/views/About.vue deleted file mode 100644 index 7054f596..00000000 --- a/src/views/About.vue +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/src/views/Editor.vue b/src/views/Editor.vue deleted file mode 100644 index e94a69c7..00000000 --- a/src/views/Editor.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/src/views/Home.vue b/src/views/Home.vue deleted file mode 100644 index f3b51a27..00000000 --- a/src/views/Home.vue +++ /dev/null @@ -1,18 +0,0 @@ - - - diff --git a/src/views/Library.vue b/src/views/Library.vue deleted file mode 100644 index e7c66d37..00000000 --- a/src/views/Library.vue +++ /dev/null @@ -1,296 +0,0 @@ - - - - - diff --git a/src/views/NodeProperties.vue b/src/views/NodeProperties.vue deleted file mode 100644 index fc3919cd..00000000 --- a/src/views/NodeProperties.vue +++ /dev/null @@ -1,275 +0,0 @@ - - - - - diff --git a/src/views/Preview2D.vue b/src/views/Preview2D.vue deleted file mode 100644 index e2ceaf7f..00000000 --- a/src/views/Preview2D.vue +++ /dev/null @@ -1,186 +0,0 @@ - - - - - diff --git a/src/views/Preview3D.vue b/src/views/Preview3D.vue deleted file mode 100644 index 94368b3c..00000000 --- a/src/views/Preview3D.vue +++ /dev/null @@ -1,403 +0,0 @@ - - - - - diff --git a/src/views/TextureVariables.vue b/src/views/TextureVariables.vue deleted file mode 100644 index 60cadb41..00000000 --- a/src/views/TextureVariables.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - diff --git a/src/views/dialogs/ExportDialog.vue b/src/views/dialogs/ExportDialog.vue deleted file mode 100644 index 8ffd19cb..00000000 --- a/src/views/dialogs/ExportDialog.vue +++ /dev/null @@ -1,212 +0,0 @@ - - - - - diff --git a/src/views/preview2d/previewcanvas2d.ts b/src/views/preview2d/previewcanvas2d.ts deleted file mode 100644 index 71295e80..00000000 --- a/src/views/preview2d/previewcanvas2d.ts +++ /dev/null @@ -1,338 +0,0 @@ -const IMAGE_RENDER_SIZE = 1000; - -function _getMousePos(canvas, evt) { - const rect = canvas.getBoundingClientRect(); - return new Vector2(evt.clientX - rect.left, evt.clientY - rect.top); -} - -class Vector2 { - x: number; - y: number; - - constructor(x: number, y: number) { - this.x = x; - this.y = y; - } -} - -export enum DrawMode { - Single, - Nine -} - -class Rect { - protected visible = true; - - protected x = 0; - protected y = 0; - protected width: number; - protected height: number; - - color: string; - - public constructor() { - //this.scene = scene; - //scene.addItem(this); - this.width = 1; - this.height = 1; - this.color = "rgb(255, 50, 50)"; - } - - public setSize(w: number, h: number) { - this.width = w; - this.height = h; - } - - public isPointInside(px: number, py: number): boolean { - if ( - px >= this.x && - px <= this.x + this.width && - py >= this.y && - py <= this.y + this.height - ) - return true; - return false; - } - - public setCenter(x: number, y: number) { - this.x = x - this.width / 2; - this.y = y - this.height / 2; - } - - public centerX(): number { - return this.x + this.width / 2; - } - - public centerY(): number { - return this.y + this.height / 2; - } - - public move(dx: number, dy: number) { - this.x += dx; - this.y += dy; - } - - // to be overriden - draw(ctx: CanvasRenderingContext2D) { - // background - ctx.beginPath(); - ctx.fillStyle = this.color; - ctx.rect(this.x, this.y, this.width, this.height); - ctx.fill(); - - // border - ctx.beginPath(); - ctx.lineWidth = 4; - ctx.strokeStyle = "rgb(0, 0, 0)"; - ctx.rect(this.x, this.y, this.width, this.height); - ctx.stroke(); - } -} - -export class DragZoom { - canvas: HTMLCanvasElement; - context: CanvasRenderingContext2D; - - mousePos: Vector2; - prevMousePos: Vector2; - mouseDownPos: Vector2; // pos of last mouse down - mouseDragDiff: Vector2; // mouse drag diff - - zoomFactor: number; - offset: Vector2; - - panning: boolean; - panStart: SVGPoint; - - rect: Rect; - image: HTMLCanvasElement; - - public drawMode: DrawMode; - - constructor(canvas: HTMLCanvasElement) { - this.canvas = canvas; - this.context = this.canvas.getContext("2d"); - this.image = null; - - const self = this; - canvas.addEventListener("mousemove", function(evt: MouseEvent) { - self.onMouseMove(evt); - }); - canvas.addEventListener("mousedown", function(evt: MouseEvent) { - self.onMouseDown(evt); - }); - canvas.addEventListener("mouseup", function(evt: MouseEvent) { - self.onMouseUp(evt); - }); - canvas.addEventListener("mouseout", function(evt: MouseEvent) { - self.onMouseOut(evt); - }); - canvas.addEventListener("mousewheel", function(evt: WheelEvent) { - self.onMouseScroll(evt); - }); - canvas.addEventListener("contextmenu", function(evt: MouseEvent) { - evt.preventDefault(); - }); - canvas.addEventListener("resize", function(evt: MouseEvent) {}); - - this.drawMode = DrawMode.Single; - - // this.zoomFactor = 1; - this.zoomFactor = 0.4; - this.offset = new Vector2(0, 0); - - this.mousePos = new Vector2(0, 0); - - this.rect = new Rect(); - this.rect.setSize(50, 50); - - // offset to put center(0,0) in middle of view - this.offset = new Vector2(canvas.width * 0.5, canvas.height * 0.5); - } - - onResize(width: number, height: number) { - this.offset = new Vector2(width * 0.5, height * 0.5); - } - - // puts image in center and set appropriate zoom level - centerImage() { - this.offset = new Vector2( - this.canvas.width * 0.5, - this.canvas.height * 0.5 - ); - this.zoomFactor = 0.4; - } - - setImage(image: HTMLCanvasElement) { - this.image = image; - - // center image in view - } - - getAbsPos() { - return new Vector2(this.canvas.offsetLeft, this.canvas.offsetTop); - } - - onMouseDown(evt: MouseEvent) { - if (evt.button == 1 || evt.button == 2) { - this.panning = true; - - this.mouseDownPos = _getMousePos(this.canvas, evt); - } - - this.mousePos = _getMousePos(this.canvas, evt); - } - - onMouseUp(evt: MouseEvent) { - // this.mouseX = pos.x; - // this.mouseY = pos.y; - if (evt.button == 1 || evt.button == 2) { - this.panning = false; - } - } - - onMouseMove(evt: MouseEvent) { - this.prevMousePos = this.mousePos; - this.mousePos = _getMousePos(this.canvas, evt); - - if (this.panning) { - const prev = this.canvasToScene(this.prevMousePos); - const cur = this.canvasToScene(this.mousePos); - const diff = new Vector2(prev.x - cur.x, prev.y - cur.y); - // const diff = new Vector2(this.prevMousePos.x - this.mousePos.x, this.prevMousePos.y - this.mousePos.y); - - const factor = this.zoomFactor; - this.offset.x -= diff.x * factor; - this.offset.y -= diff.y * factor; - } - - // var lastX = this.mouseX; - // var lastY = this.mouseY; - // var pos = this.getScenePos(evt); - // this.mouseX = pos.x; - // this.mouseY = pos.y; - - // if (this.panning) { - // // convert to scene space first - // //var lastPt = this.contextExtra.transformedPoint(lastX, lastY); - // //var pt = this.contextExtra.transformedPoint(this.mouseX, this.mouseY); - // //this.context.translate(pt.x - lastPt.x, pt.y - lastPt.y); - // //console.log(pt.x - this.panStart.x, pt.y - this.panStart.y); - // console.log(this.mouseX - this.panStart.x, this.mouseY - this.panStart.y); - // this.context.translate(this.mouseX - this.panStart.x, this.mouseY - this.panStart.y); - // //this.panStart = pos; - // } - } - - onMouseScroll(evt: WheelEvent) { - // no panning while zooming - if (this.panning) return; - - const pos = _getMousePos(this.canvas, evt); - const delta = (evt).wheelDelta > 0 ? 1.1 : 1.0 / 1.1; - - // offset from mouse pos - // find offset from previous zoom then move offset by that value - - this.zoomFactor *= delta; - this.offset.x = pos.x - (pos.x - this.offset.x) * delta; // * (factor); - this.offset.y = pos.y - (pos.y - this.offset.y) * delta; // * (factor); - - //this.zoom(pos.x, pos.y, delta); - - evt.preventDefault(); - return false; - } - - onMouseOut(evt: MouseEvent) { - // cancel panning - this.panning = false; - } - - zoom(x: number, y: number, level: number) { - // var scaleFactor = 1.01; - // var pt = this.contextExtra.transformedPoint(x,y); - // var factor = Math.pow(scaleFactor, level); - } - - draw() { - const ctx = this.context; - - ctx.setTransform(1, 0, 0, 1, 0, 0); - ctx.fillStyle = "rgb(50,50,50)"; - ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); - - //ctx.scale(this.zoomFactor, this.zoomFactor); - //ctx.translate(this.offset.x, this.offset.y); - - ctx.setTransform( - this.zoomFactor, - 0, - 0, - this.zoomFactor, - this.offset.x, - this.offset.y - ); - - // ctx.translate(this.offset.x, this.offset.y); - // ctx.scale(this.zoomFactor, this.zoomFactor); - - // highlight rect if mouse over - const scenePos = this.canvasToScene(this.mousePos); - //console.log(scenePos); - if (this.rect.isPointInside(scenePos.x, scenePos.y)) { - this.rect.color = "rgb(0, 255, 255)"; - } else { - this.rect.color = "rgb(255, 50, 50)"; - } - - if (this.image) { - if (this.drawMode == DrawMode.Single) { - this.drawImage(0, 0); - } else { - // top - this.drawImage(-1, -1); - this.drawImage(0, -1); - this.drawImage(1, -1); - - // middle - this.drawImage(-1, 0); - this.drawImage(0, 0); - this.drawImage(1, 0); - - // bottom - this.drawImage(-1, 1); - this.drawImage(0, 1); - this.drawImage(1, 1); - } - - // this.context.lineWidth = 5; - // this.context.strokeRect( - // -IMAGE_RENDER_SIZE * 0.5, - // -IMAGE_RENDER_SIZE * 0.5, - // IMAGE_RENDER_SIZE, - // IMAGE_RENDER_SIZE - // ); - } - } - - drawImage(offsetX: number, offsetY: number) { - this.context.drawImage( - this.image, - -IMAGE_RENDER_SIZE * 0.5 + offsetX * IMAGE_RENDER_SIZE, - -IMAGE_RENDER_SIZE * 0.5 + offsetY * IMAGE_RENDER_SIZE, - IMAGE_RENDER_SIZE, - IMAGE_RENDER_SIZE - ); - } - - // converts from canvas(screen) coords to the scene(world) coords - canvasToScene(pos: Vector2): Vector2 { - //return new Vector2(pos.x * (1.0 / this.zoomFactor) - this.offset.x, pos.y * (1.0 / this.zoomFactor) - this.offset.y); - return new Vector2( - (pos.x - this.offset.x) * (1.0 / this.zoomFactor), - (pos.y - this.offset.y) * (1.0 / this.zoomFactor) - ); - //return new Vector2(pos.x * this.zoomFactor - this.offset.x, pos.y * this.zoomFactor - this.offset.y); - } -} diff --git a/tests/unit/.eslintrc.js b/tests/unit/.eslintrc.js deleted file mode 100644 index 84d2cc9d..00000000 --- a/tests/unit/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - env: { - jest: true - } -}; diff --git a/tests/unit/example.spec.ts b/tests/unit/example.spec.ts deleted file mode 100644 index 33601366..00000000 --- a/tests/unit/example.spec.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { shallowMount } from "@vue/test-utils"; -import HelloWorld from "@/components/HelloWorld.vue"; - -describe("HelloWorld.vue", () => { - it("renders props.msg when passed", () => { - const msg = "new message"; - const wrapper = shallowMount(HelloWorld, { - propsData: { msg } - }); - expect(wrapper.text()).toMatch(msg); - }); -}); diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index b42c6cd6..00000000 --- a/tsconfig.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "target": "es6", - "module": "esnext", - "strict": false, - "jsx": "preserve", - "importHelpers": true, - "moduleResolution": "node", - "experimentalDecorators": true, - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "sourceMap": true, - "baseUrl": ".", - "types": ["webpack-env", "jest"], - "paths": { - "@/*": ["src/*"] - }, - "lib": ["esnext", "dom", "dom.iterable", "scripthost", "es5", "es6"] - }, - "include": [ - "src/**/*.ts", - "src/**/*.tsx", - "src/**/*.vue", - "tests/**/*.ts", - "tests/**/*.tsx" - ], - "exclude": ["node_modules"] -} diff --git a/vue.config.js b/vue.config.js deleted file mode 100644 index 08b10752..00000000 --- a/vue.config.js +++ /dev/null @@ -1,25 +0,0 @@ -// vue.config.js - -module.exports = { - pluginOptions: { - electronBuilder: { - chainWebpackMainProcess: config => { - config.plugins.delete("uglify"); - }, - chainWebpackRendererProcess: config => { - config.plugins.delete("uglify"); - }, - builderOptions: { - win: { - icon: "build/icons/win/icon.ico" - }, - linux: { - icon: "build/icons/png/512x512.png" - }, - mac: { - icon: "build/icons/mac/icon.icns" - } - } - } - } -}; diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 1d67598e..00000000 --- a/yarn.lock +++ /dev/null @@ -1,13477 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"7zip-bin@~5.0.3": - version "5.0.3" - resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.0.3.tgz#bc5b5532ecafd923a61f2fb097e3b108c0106a3f" - integrity sha512-GLyWIFBbGvpKPGo55JyRZAo4lVbnBiD52cKlw/0Vt+wnmKvWJkpZvsjVoaIolyBXDeAQKSicRtqFNPem9w0WYA== - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35", "@babel/code-frame@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" - integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/core@^7.0.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.5.tgz#1f15e2cca8ad9a1d78a38ddba612f5e7cdbbd330" - integrity sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.10.5" - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helpers" "^7.10.4" - "@babel/parser" "^7.10.5" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.5" - "@babel/types" "^7.10.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.19" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz#1b903554bc8c583ee8d25f1e8969732e6b829a69" - integrity sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig== - dependencies: - "@babel/types" "^7.10.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" - integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" - integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" - integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-member-expression-to-functions" "^7.10.5" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - -"@babel/helper-create-regexp-features-plugin@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" - integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - regexpu-core "^4.7.0" - -"@babel/helper-define-map@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" - integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/types" "^7.10.5" - lodash "^4.17.19" - -"@babel/helper-explode-assignable-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" - integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== - dependencies: - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-function-name@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" - integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-get-function-arity@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" - integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-hoist-variables@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" - integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.5.tgz#172f56e7a63e78112f3a04055f24365af702e7ee" - integrity sha512-HiqJpYD5+WopCXIAbQDG0zye5XYVvcO9w/DHp5GsaGkRUaamLj2bEtu6i8rnGGprAhHM3qidCMgp71HF4endhA== - dependencies: - "@babel/types" "^7.10.5" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" - integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz#120c271c0b3353673fcdfd8c053db3c544a260d6" - integrity sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.5" - lodash "^4.17.19" - -"@babel/helper-optimise-call-expression@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" - integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" - integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== - -"@babel/helper-regex@^7.10.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" - integrity sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg== - dependencies: - lodash "^4.17.19" - -"@babel/helper-remap-async-to-generator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" - integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-wrap-function" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-replace-supers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" - integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-simple-access@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" - integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== - dependencies: - "@babel/template" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helper-split-export-declaration@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" - integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== - dependencies: - "@babel/types" "^7.10.4" - -"@babel/helper-validator-identifier@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" - integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== - -"@babel/helper-wrap-function@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" - integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/helpers@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" - integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== - dependencies: - "@babel/template" "^7.10.4" - "@babel/traverse" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/highlight@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" - integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.10.4", "@babel/parser@^7.10.5", "@babel/parser@^7.7.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz#e7c6bf5a7deff957cec9f04b551e2762909d826b" - integrity sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ== - -"@babel/plugin-proposal-async-generator-functions@^7.2.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" - integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-class-properties@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" - integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-proposal-decorators@^7.1.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" - integrity sha512-Sc5TAQSZuLzgY0664mMDn24Vw2P8g/VhyLyGPaWiHahhgLqeZvcGeyBZOrJW0oSKIK2mvQ22a1ENXBIQLhrEiQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-decorators" "^7.10.4" - -"@babel/plugin-proposal-json-strings@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" - integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-object-rest-spread@^7.3.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0" - integrity sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-transform-parameters" "^7.10.4" - -"@babel/plugin-proposal-optional-catch-binding@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" - integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" - integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-async-generators@^7.2.0", "@babel/plugin-syntax-async-generators@^7.8.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-decorators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" - integrity sha512-2NaoC6fAk2VMdhY1eerkfHV+lVYC1u8b+jmRJISqANCJlTxYy19HGdIkkQtix2UtkcPuPu+IlDgrVseZnU03bw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-dynamic-import@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-json-strings@^7.2.0", "@babel/plugin-syntax-json-strings@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.0.0", "@babel/plugin-syntax-jsx@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" - integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.2.0", "@babel/plugin-syntax-optional-catch-binding@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-transform-arrow-functions@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" - integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-async-to-generator@^7.3.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" - integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-remap-async-to-generator" "^7.10.4" - -"@babel/plugin-transform-block-scoped-functions@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" - integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-block-scoping@^7.3.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.5.tgz#b81b8aafefbfe68f0f65f7ef397b9ece68a6037d" - integrity sha512-6Ycw3hjpQti0qssQcA6AMSFDHeNJ++R6dIMnpRqUjFeBBTmTDPa8zgF90OVfTvAo11mXZTlVUViY1g8ffrURLg== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-classes@^7.3.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" - integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-define-map" "^7.10.4" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-optimise-call-expression" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" - integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-destructuring@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" - integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-dotall-regex@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" - integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-duplicate-keys@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" - integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-exponentiation-operator@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" - integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-for-of@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" - integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-function-name@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" - integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== - dependencies: - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-literals@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" - integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-modules-amd@^7.2.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" - integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== - dependencies: - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" - integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== - dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-simple-access" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.3.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" - integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== - dependencies: - "@babel/helper-hoist-variables" "^7.10.4" - "@babel/helper-module-transforms" "^7.10.5" - "@babel/helper-plugin-utils" "^7.10.4" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" - integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== - dependencies: - "@babel/helper-module-transforms" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.3.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" - integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - -"@babel/plugin-transform-new-target@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" - integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-object-super@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" - integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-replace-supers" "^7.10.4" - -"@babel/plugin-transform-parameters@^7.10.4", "@babel/plugin-transform-parameters@^7.2.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" - integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== - dependencies: - "@babel/helper-get-function-arity" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-regenerator@^7.3.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" - integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-runtime@^7.4.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.5.tgz#3b39b7b24830e0c2d8ff7a4489fe5cf99fbace86" - integrity sha512-tV4V/FjElJ9lQtyjr5xD2IFFbgY46r7EeVu5a8CpEKT5laheHKSlFeHjpkPppW3PqzGLAuv5k2qZX5LgVZIX5w== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - resolve "^1.8.1" - semver "^5.5.1" - -"@babel/plugin-transform-shorthand-properties@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" - integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-spread@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz#4e2c85ea0d6abaee1b24dcfbbae426fe8d674cff" - integrity sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-sticky-regex@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" - integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/helper-regex" "^7.10.4" - -"@babel/plugin-transform-template-literals@^7.2.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" - integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-typeof-symbol@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" - integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-transform-unicode-regex@^7.2.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" - integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/preset-env@^7.0.0 < 7.4.0": - version "7.3.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.3.4.tgz#887cf38b6d23c82f19b5135298bdb160062e33e1" - integrity sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-async-generator-functions" "^7.2.0" - "@babel/plugin-proposal-json-strings" "^7.2.0" - "@babel/plugin-proposal-object-rest-spread" "^7.3.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.2.0" - "@babel/plugin-syntax-async-generators" "^7.2.0" - "@babel/plugin-syntax-json-strings" "^7.2.0" - "@babel/plugin-syntax-object-rest-spread" "^7.2.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" - "@babel/plugin-transform-arrow-functions" "^7.2.0" - "@babel/plugin-transform-async-to-generator" "^7.3.4" - "@babel/plugin-transform-block-scoped-functions" "^7.2.0" - "@babel/plugin-transform-block-scoping" "^7.3.4" - "@babel/plugin-transform-classes" "^7.3.4" - "@babel/plugin-transform-computed-properties" "^7.2.0" - "@babel/plugin-transform-destructuring" "^7.2.0" - "@babel/plugin-transform-dotall-regex" "^7.2.0" - "@babel/plugin-transform-duplicate-keys" "^7.2.0" - "@babel/plugin-transform-exponentiation-operator" "^7.2.0" - "@babel/plugin-transform-for-of" "^7.2.0" - "@babel/plugin-transform-function-name" "^7.2.0" - "@babel/plugin-transform-literals" "^7.2.0" - "@babel/plugin-transform-modules-amd" "^7.2.0" - "@babel/plugin-transform-modules-commonjs" "^7.2.0" - "@babel/plugin-transform-modules-systemjs" "^7.3.4" - "@babel/plugin-transform-modules-umd" "^7.2.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.3.0" - "@babel/plugin-transform-new-target" "^7.0.0" - "@babel/plugin-transform-object-super" "^7.2.0" - "@babel/plugin-transform-parameters" "^7.2.0" - "@babel/plugin-transform-regenerator" "^7.3.4" - "@babel/plugin-transform-shorthand-properties" "^7.2.0" - "@babel/plugin-transform-spread" "^7.2.0" - "@babel/plugin-transform-sticky-regex" "^7.2.0" - "@babel/plugin-transform-template-literals" "^7.2.0" - "@babel/plugin-transform-typeof-symbol" "^7.2.0" - "@babel/plugin-transform-unicode-regex" "^7.2.0" - browserslist "^4.3.4" - invariant "^2.2.2" - js-levenshtein "^1.1.3" - semver "^5.3.0" - -"@babel/runtime-corejs2@^7.2.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs2/-/runtime-corejs2-7.10.5.tgz#8daa1ceccc0468e5c2e15f124e3f51c2b3033b49" - integrity sha512-LJwyb1ac//Jr2zrGTTaNJhrP1wYCgVw9rzHbQPogKXCTLQ60EEWgeNtuqs6cLsq64O557SYzziCrOxNp0rRi8w== - dependencies: - core-js "^2.6.5" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.8.4": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.5.tgz#303d8bd440ecd5a491eae6117fd3367698674c5c" - integrity sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.7.2": - version "7.12.18" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.18.tgz#af137bd7e7d9705a412b3caaf991fe6aaa97831b" - integrity sha512-BogPQ7ciE6SYAUPtlm9tWbgI9+2AgqSam6QivMgXgAT+fKbgppaj4ZX15MHeLC1PVF5sNk70huBu20XxWOs8Cg== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" - integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/parser" "^7.10.4" - "@babel/types" "^7.10.4" - -"@babel/traverse@^7.10.4", "@babel/traverse@^7.10.5", "@babel/traverse@^7.7.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz#77ce464f5b258be265af618d8fddf0536f20b564" - integrity sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/generator" "^7.10.5" - "@babel/helper-function-name" "^7.10.4" - "@babel/helper-split-export-declaration" "^7.10.4" - "@babel/parser" "^7.10.5" - "@babel/types" "^7.10.5" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.19" - -"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.7.0": - version "7.10.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz#d88ae7e2fde86bfbfe851d4d81afa70a997b5d15" - integrity sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q== - dependencies: - "@babel/helper-validator-identifier" "^7.10.4" - lodash "^4.17.19" - to-fast-properties "^2.0.0" - -"@develar/schema-utils@~2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.1.0.tgz#eceb1695bfbed6f6bb84666d5d3abe5e1fd54e17" - integrity sha512-qjCqB4ctMig9Gz5bd6lkdFr3bO6arOdQqptdBSpF1ZpCnjofieCciEzkoS9ujY9cMGyllYSCSmBJ3x9OKHXzoA== - dependencies: - ajv "^6.1.0" - ajv-keywords "^3.1.0" - -"@electron/get@^1.0.1": - version "1.12.4" - resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.4.tgz#a5971113fc1bf8fa12a8789dc20152a7359f06ab" - integrity sha512-6nr9DbJPUR9Xujw6zD3y+rS95TyItEVM0NVjt1EehY2vUWfIgPiIPVHxCvaTS0xr2B+DRxovYVKbuOWqC35kjg== - dependencies: - debug "^4.1.1" - env-paths "^2.2.0" - fs-extra "^8.1.0" - got "^9.6.0" - progress "^2.0.3" - semver "^6.2.0" - sumchecker "^3.0.1" - optionalDependencies: - global-agent "^2.0.2" - global-tunnel-ng "^2.7.1" - -"@electron/remote@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@electron/remote/-/remote-1.2.0.tgz#772eb4c3ac17aaba5a9cf05a09092f6277f5671f" - integrity sha512-C774t2DFVJsa+dxU9Gc2nYzylRZoJ79I0Sxrh8T9cN69fBkntfGbyBEQiD9UfZopqL0CYLzk1anY2Ywhql6h1w== - -"@hapi/address@2.x.x": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5" - integrity sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ== - -"@hapi/bourne@1.x.x": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" - integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== - -"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.5.1.tgz#fde96064ca446dec8c55a8c2f130957b070c6e06" - integrity sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow== - -"@hapi/joi@^15.0.1": - version "15.1.1" - resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" - integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== - dependencies: - "@hapi/address" "2.x.x" - "@hapi/bourne" "1.x.x" - "@hapi/hoek" "8.x.x" - "@hapi/topo" "3.x.x" - -"@hapi/topo@3.x.x": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.6.tgz#68d935fa3eae7fdd5ab0d7f953f3205d8b2bfc29" - integrity sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ== - dependencies: - "@hapi/hoek" "^8.3.0" - -"@intervolga/optimize-cssnano-plugin@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz#be7c7846128b88f6a9b1d1261a0ad06eb5c0fdf8" - integrity sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA== - dependencies: - cssnano "^4.0.0" - cssnano-preset-default "^4.0.0" - postcss "^7.0.0" - -"@jimp/bmp@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.16.1.tgz#6e2da655b2ba22e721df0795423f34e92ef13768" - integrity sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - bmp-js "^0.1.0" - -"@jimp/core@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/core/-/core-0.16.1.tgz#68c4288f6ef7f31a0f6b859ba3fb28dae930d39d" - integrity sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - any-base "^1.1.0" - buffer "^5.2.0" - exif-parser "^0.1.12" - file-type "^9.0.0" - load-bmfont "^1.3.1" - mkdirp "^0.5.1" - phin "^2.9.1" - pixelmatch "^4.0.2" - tinycolor2 "^1.4.1" - -"@jimp/custom@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.16.1.tgz#28b659c59e20a1d75a0c46067bd3f4bd302cf9c5" - integrity sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/core" "^0.16.1" - -"@jimp/gif@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.16.1.tgz#d1f7c3a58f4666482750933af8b8f4666414f3ca" - integrity sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - gifwrap "^0.9.2" - omggif "^1.0.9" - -"@jimp/jpeg@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.16.1.tgz#3b7bb08a4173f2f6d81f3049b251df3ee2ac8175" - integrity sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - jpeg-js "0.4.2" - -"@jimp/plugin-blit@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz#09ea919f9d326de3b9c2826fe4155da37dde8edb" - integrity sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-blur@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz#e614fa002797dcd662e705d4cea376e7db968bf5" - integrity sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-circle@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz#20e3194a67ca29740aba2630fd4d0a89afa27491" - integrity sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-color@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.16.1.tgz#0f298ba74dee818b663834cd80d53e56f3755233" - integrity sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - tinycolor2 "^1.4.1" - -"@jimp/plugin-contain@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz#3c5f5c495fd9bb08a970739d83694934f58123f2" - integrity sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-cover@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz#0e8caec16a40abe15b1b32e5383a603a3306dc41" - integrity sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-crop@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz#b362497c873043fe47ba881ab08604bf7226f50f" - integrity sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-displace@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz#4dd9db518c3e78de9d723f86a234bf98922afe8d" - integrity sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-dither@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz#b47de2c0bb09608bed228b41c3cd01a85ec2d45b" - integrity sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-fisheye@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz#f625047b6cdbe1b83b89e9030fd025ab19cdb1a4" - integrity sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-flip@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz#7a99ea22bde802641017ed0f2615870c144329bb" - integrity sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-gaussian@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz#0845e314085ccd52e34fad9a83949bc0d81a68e8" - integrity sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-invert@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz#7e6f5a15707256f3778d06921675bbcf18545c97" - integrity sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-mask@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz#e7f2460e05c3cda7af5e76f33ccb0579f66f90df" - integrity sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-normalize@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz#032dfd88eefbc4dedc8b1b2d243832e4f3af30c8" - integrity sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-print@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.16.1.tgz#66b803563f9d109825970714466e6ab9ae639ff6" - integrity sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - load-bmfont "^1.4.0" - -"@jimp/plugin-resize@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz#65e39d848ed13ba2d6c6faf81d5d590396571d10" - integrity sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-rotate@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz#53fb5d51a4b3d05af9c91c2a8fffe5d7a1a47c8c" - integrity sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-scale@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz#89f6ba59feed3429847ed226aebda33a240cc647" - integrity sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-shadow@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz#a7af892a740febf41211e10a5467c3c5c521a04c" - integrity sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugin-threshold@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz#34f3078f9965145b7ae26c53a32ad74b1195bbf5" - integrity sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - -"@jimp/plugins@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.16.1.tgz#9f08544c97226d6460a16ced79f57e85bec3257b" - integrity sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/plugin-blit" "^0.16.1" - "@jimp/plugin-blur" "^0.16.1" - "@jimp/plugin-circle" "^0.16.1" - "@jimp/plugin-color" "^0.16.1" - "@jimp/plugin-contain" "^0.16.1" - "@jimp/plugin-cover" "^0.16.1" - "@jimp/plugin-crop" "^0.16.1" - "@jimp/plugin-displace" "^0.16.1" - "@jimp/plugin-dither" "^0.16.1" - "@jimp/plugin-fisheye" "^0.16.1" - "@jimp/plugin-flip" "^0.16.1" - "@jimp/plugin-gaussian" "^0.16.1" - "@jimp/plugin-invert" "^0.16.1" - "@jimp/plugin-mask" "^0.16.1" - "@jimp/plugin-normalize" "^0.16.1" - "@jimp/plugin-print" "^0.16.1" - "@jimp/plugin-resize" "^0.16.1" - "@jimp/plugin-rotate" "^0.16.1" - "@jimp/plugin-scale" "^0.16.1" - "@jimp/plugin-shadow" "^0.16.1" - "@jimp/plugin-threshold" "^0.16.1" - timm "^1.6.1" - -"@jimp/png@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/png/-/png-0.16.1.tgz#f24cfc31529900b13a2dd9d4fdb4460c1e4d814e" - integrity sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/utils" "^0.16.1" - pngjs "^3.3.3" - -"@jimp/tiff@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.16.1.tgz#0e8756695687d7574b6bc73efab0acd4260b7a12" - integrity sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ== - dependencies: - "@babel/runtime" "^7.7.2" - utif "^2.0.1" - -"@jimp/types@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/types/-/types-0.16.1.tgz#0dbab37b3202315c91010f16c31766d35a2322cc" - integrity sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/bmp" "^0.16.1" - "@jimp/gif" "^0.16.1" - "@jimp/jpeg" "^0.16.1" - "@jimp/png" "^0.16.1" - "@jimp/tiff" "^0.16.1" - timm "^1.6.1" - -"@jimp/utils@^0.16.1": - version "0.16.1" - resolved "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.16.1.tgz#2f51e6f14ff8307c4aa83d5e1a277da14a9fe3f7" - integrity sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw== - dependencies: - "@babel/runtime" "^7.7.2" - regenerator-runtime "^0.13.3" - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== - dependencies: - "@nodelib/fs.stat" "2.0.4" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== - dependencies: - "@nodelib/fs.scandir" "2.1.4" - fastq "^1.6.0" - -"@petamoriken/float16@^3.4.7": - version "3.4.7" - resolved "https://registry.yarnpkg.com/@petamoriken/float16/-/float16-3.4.7.tgz#63ce6cb698881bca0fc272807196d497615c95ea" - integrity sha512-Mir0MAKxg5v6BUIg9SI5VAyrIa/3uptf7aPyvPhHNh0RMYMevrWbaLrsVSZ1f92C39hWd8v7GrjvvOT+WG5VUQ== - -"@sentry/browser@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-6.17.2.tgz#8e794b846f43a341068c83420918d896683d903e" - integrity sha512-4Ow5z9GxK5dG9+stBNKb7s6NoxE4wgEcHRmO66QTK4gH2NNmzV4R/aaZ7iDoS/lD86sH0M86jm76dpg9uiJPmw== - dependencies: - "@sentry/core" "6.17.2" - "@sentry/types" "6.17.2" - "@sentry/utils" "6.17.2" - tslib "^1.9.3" - -"@sentry/cli@^1.67.1": - version "1.67.2" - resolved "https://registry.yarnpkg.com/@sentry/cli/-/cli-1.67.2.tgz#dbb5631cb3637e10298f67915013592cb22f04ff" - integrity sha512-lPn0Sffbjg2UmCkHl2iw8pKlqpPhy85mW0za5kz3LEqC9JGUXHo9eSyyCkiRktlemMXKk+DeS/nyFy/LTRUG2Q== - dependencies: - https-proxy-agent "^5.0.0" - mkdirp "^0.5.5" - node-fetch "^2.6.0" - npmlog "^4.1.2" - progress "^2.0.3" - proxy-from-env "^1.1.0" - -"@sentry/core@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88" - integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA== - dependencies: - "@sentry/hub" "6.17.2" - "@sentry/minimal" "6.17.2" - "@sentry/types" "6.17.2" - "@sentry/utils" "6.17.2" - tslib "^1.9.3" - -"@sentry/electron@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@sentry/electron/-/electron-3.0.2.tgz#3edac1130e30b7090a1b5dbf89b446d0f3ca8914" - integrity sha512-Mg2Tl/AK+ukrAMIrEhij+pMs24HQtRz7f446kTAOYUANIkpkdoEsetXenk2NIP7mE+okbjhGD6kdr0Jm/h2b5g== - dependencies: - "@sentry/browser" "6.17.2" - "@sentry/core" "6.17.2" - "@sentry/node" "6.17.2" - "@sentry/types" "6.17.2" - "@sentry/utils" "6.17.2" - deepmerge "^4.2.2" - tslib "^2.3.1" - -"@sentry/hub@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b" - integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g== - dependencies: - "@sentry/types" "6.17.2" - "@sentry/utils" "6.17.2" - tslib "^1.9.3" - -"@sentry/minimal@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120" - integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg== - dependencies: - "@sentry/hub" "6.17.2" - "@sentry/types" "6.17.2" - tslib "^1.9.3" - -"@sentry/node@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1" - integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ== - dependencies: - "@sentry/core" "6.17.2" - "@sentry/hub" "6.17.2" - "@sentry/tracing" "6.17.2" - "@sentry/types" "6.17.2" - "@sentry/utils" "6.17.2" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/tracing@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b" - integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw== - dependencies: - "@sentry/hub" "6.17.2" - "@sentry/minimal" "6.17.2" - "@sentry/types" "6.17.2" - "@sentry/utils" "6.17.2" - tslib "^1.9.3" - -"@sentry/types@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30" - integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ== - -"@sentry/utils@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732" - integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA== - dependencies: - "@sentry/types" "6.17.2" - tslib "^1.9.3" - -"@sentry/webpack-plugin@^1.16.0": - version "1.16.0" - resolved "https://registry.yarnpkg.com/@sentry/webpack-plugin/-/webpack-plugin-1.16.0.tgz#f9b15b5bb485995e776729b71bcf2d9fad7dca7a" - integrity sha512-Ax0QZ3a+LFYU876Si2HElPYSj+mX3vinvzH+o9F1g/5T2Z3HqITnX6gg+zVfLFsE819PN9KeLpmoHtO352dlmQ== - dependencies: - "@sentry/cli" "^1.67.1" - -"@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== - -"@soda/friendly-errors-webpack-plugin@^1.7.1": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.1.tgz#706f64bcb4a8b9642b48ae3ace444c70334d615d" - integrity sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ== - dependencies: - chalk "^1.1.3" - error-stack-parser "^2.0.0" - string-width "^2.0.0" - -"@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== - dependencies: - defer-to-connect "^1.0.1" - -"@types/adm-zip@^0.4.34": - version "0.4.34" - resolved "https://registry.yarnpkg.com/@types/adm-zip/-/adm-zip-0.4.34.tgz#62ac859eb2af6024362a1b3e43527ab79e0c624e" - integrity sha512-8ToYLLAYhkRfcmmljrKi22gT2pqu7hGMDtORP1emwIEGmgUTZOsaDjzWFzW5N2frcFRz/50CWt4zA1CxJ73pmQ== - dependencies: - "@types/node" "*" - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/debug@^4.1.4": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd" - integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ== - -"@types/eslint-visitor-keys@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" - integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== - -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/jest@^23.1.4": - version "23.3.14" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-23.3.14.tgz#37daaf78069e7948520474c87b80092ea912520a" - integrity sha512-Q5hTcfdudEL2yOmluA1zaSyPbzWPmJ3XfSWeP3RyoYvS9hnje1ZyagrZOuQ6+1nQC1Gw+7gap3pLNL3xL6UBug== - -"@types/jquery@^3.3.30": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.0.tgz#ccb7dfd317d02d4227dd3803c75297d0c10dad68" - integrity sha512-C7qQUjpMWDUNYQRTXsP5nbYYwCwwgy84yPgoTT7fPN69NH92wLeCtFaMsWeolJD1AF/6uQw3pYt62rzv83sMmw== - dependencies: - "@types/sizzle" "*" - -"@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" - integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/node@*": - version "14.0.24" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.24.tgz#b0f86f58564fa02a28b68f8b55d4cdec42e3b9d6" - integrity sha512-btt/oNOiDWcSuI721MdL8VQGnjsKjlTMdrKyTcLCKeQp/n4AAMFJ961wMbp+09y8WuGPClDEv07RIItdXKIXAA== - -"@types/node@^14.6.2": - version "14.17.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.17.4.tgz#218712242446fc868d0e007af29a4408c7765bc0" - integrity sha512-8kQ3+wKGRNN0ghtEn7EGps/B8CzuBz1nXZEIGGLP2GnwbqYn4dbTs7k+VKLTq1HvZLRCIDtN3Snx1Ege8B7L5A== - -"@types/node@^16.9.2": - version "16.9.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.2.tgz#81f5a039d6ed1941f8cc57506c74e7c2b8fc64b9" - integrity sha512-ZHty/hKoOLZvSz6BtP1g7tc7nUeJhoCf3flLjh8ZEv1vFKBWHXcnMbJMyN/pftSljNyy0kNW/UqI3DccnBnZ8w== - -"@types/normalize-package-data@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" - integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== - -"@types/pako@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@types/pako/-/pako-1.0.2.tgz#17c9b136877f33d9ecc8e73cd26944f1f6dd39a1" - integrity sha512-8UJl2MjkqqS6ncpLZqRZ5LmGiFBkbYxocD4e4jmBqGvfRG1RS23gKsBQbdtV9O9GvRyjFTiRHRByjSlKCLlmZw== - -"@types/pngjs@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@types/pngjs/-/pngjs-6.0.1.tgz#c711ec3fbbf077fed274ecccaf85dd4673130072" - integrity sha512-J39njbdW1U/6YyVXvC9+1iflZghP8jgRf2ndYghdJb5xL49LYDB+1EuAxfbuJ2IBbWIL3AjHPQhgaTxT3YaYeg== - dependencies: - "@types/node" "*" - -"@types/q@^1.5.1": - version "1.5.4" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24" - integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug== - -"@types/sharp@^0.29.2": - version "0.29.2" - resolved "https://registry.yarnpkg.com/@types/sharp/-/sharp-0.29.2.tgz#b4e932e982e258d1013236c8b4bcc14f9883c9a3" - integrity sha512-tIbMvtPa8kMyFMKNhpsPT1HO3CgXLuiCAA8bxHAGAZLyALpYvYc4hUu3pu0+3oExQA5LwvHrWp+OilgXCYVQgg== - dependencies: - "@types/node" "*" - -"@types/sizzle@*": - version "2.3.2" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" - integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== - -"@types/strip-bom@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" - integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= - -"@types/strip-json-comments@0.0.30": - version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" - integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== - -"@types/three@^0.103.2": - version "0.103.2" - resolved "https://registry.yarnpkg.com/@types/three/-/three-0.103.2.tgz#f7d49130001c551941a0ded757def810579aafc4" - integrity sha512-zhtf0Qs5wLJpIn1+VWCpzSgpKayj/GSWZ6woiuz09FW59KEDeLpnBkYz6lbblVpRmGdlnG8nd0unaASshOvcXw== - dependencies: - three "*" - -"@types/webpack-env@^1.13.9": - version "1.15.2" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.2.tgz#927997342bb9f4a5185a86e6579a0a18afc33b0a" - integrity sha512-67ZgZpAlhIICIdfQrB5fnDvaKFcDxpKibxznfYRVAT4mQE41Dido/3Ty+E3xGBmTogc5+0Qb8tWhna+5B8z1iQ== - -"@typescript-eslint/eslint-plugin@^1.1.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.13.0.tgz#22fed9b16ddfeb402fd7bcde56307820f6ebc49f" - integrity sha512-WQHCozMnuNADiqMtsNzp96FNox5sOVpU8Xt4meaT4em8lOG1SrOv92/mUbEHQVh90sldKSfcOc/I0FOb/14G1g== - dependencies: - "@typescript-eslint/experimental-utils" "1.13.0" - eslint-utils "^1.3.1" - functional-red-black-tree "^1.0.1" - regexpp "^2.0.1" - tsutils "^3.7.0" - -"@typescript-eslint/eslint-plugin@^2.33.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz#6f8ce8a46c7dea4a6f1d171d2bb8fbae6dac2be9" - integrity sha512-4zY3Z88rEE99+CNvTbXSyovv2z9PNOVffTWD2W8QF5s2prBQtwN2zadqERcrHpcR7O/+KMI3fcTAmUUhK/iQcQ== - dependencies: - "@typescript-eslint/experimental-utils" "2.34.0" - functional-red-black-tree "^1.0.1" - regexpp "^3.0.0" - tsutils "^3.17.1" - -"@typescript-eslint/experimental-utils@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" - integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-scope "^4.0.0" - -"@typescript-eslint/experimental-utils@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz#d3524b644cdb40eebceca67f8cf3e4cc9c8f980f" - integrity sha512-eS6FTkq+wuMJ+sgtuNTtcqavWXqsflWcfBnlYhg/nS4aZ1leewkXGbvBhaapn1q6qf4M71bsR1tez5JTRMuqwA== - dependencies: - "@types/json-schema" "^7.0.3" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-scope "^5.0.0" - eslint-utils "^2.0.0" - -"@typescript-eslint/parser@^1.1.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-1.13.0.tgz#61ac7811ea52791c47dc9fd4dd4a184fae9ac355" - integrity sha512-ITMBs52PCPgLb2nGPoeT4iU3HdQZHcPaZVw+7CsFagRJHUhyeTgorEwHXhFf3e7Evzi8oujKNpHc8TONth8AdQ== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "1.13.0" - "@typescript-eslint/typescript-estree" "1.13.0" - eslint-visitor-keys "^1.0.0" - -"@typescript-eslint/parser@^2.33.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.34.0.tgz#50252630ca319685420e9a39ca05fe185a256bc8" - integrity sha512-03ilO0ucSD0EPTw2X4PntSIRFtDPWjrVq7C3/Z3VQHRC7+13YB55rcJI3Jt+YgeHbjUdJPcPa7b23rXCBokuyA== - dependencies: - "@types/eslint-visitor-keys" "^1.0.0" - "@typescript-eslint/experimental-utils" "2.34.0" - "@typescript-eslint/typescript-estree" "2.34.0" - eslint-visitor-keys "^1.1.0" - -"@typescript-eslint/typescript-estree@1.13.0": - version "1.13.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" - integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== - dependencies: - lodash.unescape "4.0.1" - semver "5.5.0" - -"@typescript-eslint/typescript-estree@2.34.0": - version "2.34.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz#14aeb6353b39ef0732cc7f1b8285294937cf37d5" - integrity sha512-OMAr+nJWKdlVM9LOqCqh3pQQPwxHAN7Du8DR6dmwCrAmxtiXQnhHJ6tBNtf+cggqfo51SG/FCwnKhXCIM7hnVg== - dependencies: - debug "^4.1.1" - eslint-visitor-keys "^1.1.0" - glob "^7.1.6" - is-glob "^4.0.1" - lodash "^4.17.15" - semver "^7.3.2" - tsutils "^3.17.1" - -"@vue/babel-helper-vue-jsx-merge-props@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz#048fe579958da408fb7a8b2a3ec050b50a661040" - integrity sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw== - -"@vue/babel-plugin-transform-vue-jsx@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.1.2.tgz#c0a3e6efc022e75e4247b448a8fc6b86f03e91c0" - integrity sha512-YfdaoSMvD1nj7+DsrwfTvTnhDXI7bsuh+Y5qWwvQXlD24uLgnsoww3qbiZvWf/EoviZMrvqkqN4CBw0W3BWUTQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" - html-tags "^2.0.0" - lodash.kebabcase "^4.1.1" - svg-tags "^1.0.0" - -"@vue/babel-preset-app@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz#24c477052f078f30fdb7735103b14dd1fa2cbfe1" - integrity sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@babel/plugin-proposal-class-properties" "^7.0.0" - "@babel/plugin-proposal-decorators" "^7.1.0" - "@babel/plugin-syntax-dynamic-import" "^7.0.0" - "@babel/plugin-syntax-jsx" "^7.0.0" - "@babel/plugin-transform-runtime" "^7.4.0" - "@babel/preset-env" "^7.0.0 < 7.4.0" - "@babel/runtime" "^7.0.0" - "@babel/runtime-corejs2" "^7.2.0" - "@vue/babel-preset-jsx" "^1.0.0" - babel-plugin-dynamic-import-node "^2.2.0" - babel-plugin-module-resolver "3.2.0" - core-js "^2.6.5" - -"@vue/babel-preset-jsx@^1.0.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.1.2.tgz#2e169eb4c204ea37ca66c2ea85a880bfc99d4f20" - integrity sha512-zDpVnFpeC9YXmvGIDSsKNdL7qCG2rA3gjywLYHPCKDT10erjxF4U+6ay9X6TW5fl4GsDlJp9bVfAVQAAVzxxvQ== - dependencies: - "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" - "@vue/babel-sugar-functional-vue" "^1.1.2" - "@vue/babel-sugar-inject-h" "^1.1.2" - "@vue/babel-sugar-v-model" "^1.1.2" - "@vue/babel-sugar-v-on" "^1.1.2" - -"@vue/babel-sugar-functional-vue@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.1.2.tgz#f7e24fba09e6f1ee70104560a8808057555f1a9a" - integrity sha512-YhmdJQSVEFF5ETJXzrMpj0nkCXEa39TvVxJTuVjzvP2rgKhdMmQzlJuMv/HpadhZaRVMCCF3AEjjJcK5q/cYzQ== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-inject-h@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.1.2.tgz#8a5276b6d8e2ed16ffc8078aad94236274e6edf0" - integrity sha512-VRSENdTvD5htpnVp7i7DNuChR5rVMcORdXjvv5HVvpdKHzDZAYiLSD+GhnhxLm3/dMuk8pSzV+k28ECkiN5m8w== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - -"@vue/babel-sugar-v-model@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.1.2.tgz#1ff6fd1b800223fc9cb1e84dceb5e52d737a8192" - integrity sha512-vLXPvNq8vDtt0u9LqFdpGM9W9IWDmCmCyJXuozlq4F4UYVleXJ2Fa+3JsnTZNJcG+pLjjfnEGHci2339Kj5sGg== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-helper-vue-jsx-merge-props" "^1.0.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" - camelcase "^5.0.0" - html-tags "^2.0.0" - svg-tags "^1.0.0" - -"@vue/babel-sugar-v-on@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.1.2.tgz#b2ef99b8f2fab09fbead25aad70ef42e1cf5b13b" - integrity sha512-T8ZCwC8Jp2uRtcZ88YwZtZXe7eQrJcfRq0uTFy6ShbwYJyz5qWskRFoVsdTi9o0WEhmQXxhQUewodOSCUPVmsQ== - dependencies: - "@babel/plugin-syntax-jsx" "^7.2.0" - "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" - camelcase "^5.0.0" - -"@vue/cli-overlay@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-3.12.1.tgz#bdfde8f7123561ab06e4e4c60b854cc5092f5ab1" - integrity sha512-Bym92EN+lj+cNRN2ozbYyH+V8DMXWGbCDUk+hiJ4EYDBZfBkZKvalk1/mOBFwyxiopnnbOEBAAhL/UuMQ1xARg== - -"@vue/cli-plugin-babel@^3.8.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz#9a79159de8cd086b013fa6d78a39830b2e2ec706" - integrity sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg== - dependencies: - "@babel/core" "^7.0.0" - "@vue/babel-preset-app" "^3.12.1" - "@vue/cli-shared-utils" "^3.12.1" - babel-loader "^8.0.5" - webpack "^4.0.0" - -"@vue/cli-plugin-eslint@^3.8.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz#302c463867f38e790bb996eafdf7159c782dc8cf" - integrity sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ== - dependencies: - "@vue/cli-shared-utils" "^3.12.1" - babel-eslint "^10.0.1" - eslint-loader "^2.1.2" - globby "^9.2.0" - webpack "^4.0.0" - yorkie "^2.0.0" - optionalDependencies: - eslint "^4.19.1" - eslint-plugin-vue "^4.7.1" - -"@vue/cli-plugin-typescript@^3.8.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-3.12.1.tgz#71b306983de37a03c43860ac035bd0a15eb29d27" - integrity sha512-sh+WKbpsDw6wOrpM4FSD1xKXpyp8mVcl+yyEk+WvJuuSdfwueRubAM7uYbrOGtNSOegpZqBwbNxEO4FIUBeLKQ== - dependencies: - "@types/webpack-env" "^1.13.9" - "@vue/cli-shared-utils" "^3.12.1" - fork-ts-checker-webpack-plugin "^0.5.2" - globby "^9.2.0" - ts-loader "^5.3.3" - tslint "^5.15.0" - webpack "^4.0.0" - yorkie "^2.0.0" - -"@vue/cli-plugin-unit-jest@^3.8.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.12.1.tgz#b7edd30701191deaa9d53cea752b8d72b825d640" - integrity sha512-Cc9Kq4+RaUN1yfNVb7c9hVDNXo2tFTWHgwooCL3XWMu2iL+pDawQt8ZeSqauDY95JoMeEAVy2xBimjL+7jo/jw== - dependencies: - "@vue/cli-shared-utils" "^3.12.1" - babel-jest "^23.6.0" - babel-plugin-transform-es2015-modules-commonjs "^6.26.2" - jest "^23.6.0" - jest-serializer-vue "^2.0.2" - jest-transform-stub "^2.0.0" - jest-watch-typeahead "0.2.1" - vue-jest "^3.0.4" - -"@vue/cli-service@^3.8.0": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-3.12.1.tgz#13220b1c189254e7c003390df329086f9b6e77e6" - integrity sha512-PDxNrTGnSKzeV1ruFlsRIAO8JcPizwT0EJXq9GeyooU+p+sOkv7aKkCBJQVYNjZapD1NOGWx6CvAAC/wAW+gew== - dependencies: - "@intervolga/optimize-cssnano-plugin" "^1.0.5" - "@soda/friendly-errors-webpack-plugin" "^1.7.1" - "@vue/cli-overlay" "^3.12.1" - "@vue/cli-shared-utils" "^3.12.1" - "@vue/component-compiler-utils" "^3.0.0" - "@vue/preload-webpack-plugin" "^1.1.0" - "@vue/web-component-wrapper" "^1.2.0" - acorn "^6.1.1" - acorn-walk "^6.1.1" - address "^1.0.3" - autoprefixer "^9.5.1" - browserslist "^4.5.4" - cache-loader "^2.0.1" - case-sensitive-paths-webpack-plugin "^2.2.0" - chalk "^2.4.2" - cli-highlight "^2.1.0" - clipboardy "^2.0.0" - cliui "^5.0.0" - copy-webpack-plugin "^4.6.0" - css-loader "^1.0.1" - cssnano "^4.1.10" - current-script-polyfill "^1.0.0" - debug "^4.1.1" - default-gateway "^5.0.2" - dotenv "^7.0.0" - dotenv-expand "^5.1.0" - escape-string-regexp "^1.0.5" - file-loader "^3.0.1" - fs-extra "^7.0.1" - globby "^9.2.0" - hash-sum "^1.0.2" - html-webpack-plugin "^3.2.0" - launch-editor-middleware "^2.2.1" - lodash.defaultsdeep "^4.6.1" - lodash.mapvalues "^4.6.0" - lodash.transform "^4.6.0" - mini-css-extract-plugin "^0.8.0" - minimist "^1.2.0" - ora "^3.4.0" - portfinder "^1.0.20" - postcss-loader "^3.0.0" - read-pkg "^5.0.0" - semver "^6.0.0" - slash "^2.0.0" - source-map-url "^0.4.0" - ssri "^6.0.1" - string.prototype.padend "^3.0.0" - terser-webpack-plugin "^1.2.3" - thread-loader "^2.1.2" - url-loader "^1.1.2" - vue-loader "^15.7.0" - webpack "^4.0.0" - webpack-bundle-analyzer "^3.3.0" - webpack-chain "^4.11.0" - webpack-dev-server "^3.4.1" - webpack-merge "^4.2.1" - -"@vue/cli-shared-utils@^3.12.1": - version "3.12.1" - resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz#bcf076287ddadeebbb97c6a748dfe9ff50ec8df0" - integrity sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ== - dependencies: - "@hapi/joi" "^15.0.1" - chalk "^2.4.1" - execa "^1.0.0" - launch-editor "^2.2.1" - lru-cache "^5.1.1" - node-ipc "^9.1.1" - open "^6.3.0" - ora "^3.4.0" - request "^2.87.0" - request-promise-native "^1.0.7" - semver "^6.0.0" - string.prototype.padstart "^3.0.0" - -"@vue/component-compiler-utils@^3.0.0", "@vue/component-compiler-utils@^3.1.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz#8213a5ff3202f9f2137fe55370f9e8b9656081c3" - integrity sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug== - dependencies: - consolidate "^0.15.1" - hash-sum "^1.0.2" - lru-cache "^4.1.2" - merge-source-map "^1.1.0" - postcss "^7.0.14" - postcss-selector-parser "^6.0.2" - source-map "~0.6.1" - vue-template-es2015-compiler "^1.9.0" - optionalDependencies: - prettier "^1.18.2" - -"@vue/eslint-config-prettier@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@vue/eslint-config-prettier/-/eslint-config-prettier-4.0.1.tgz#a036d0d2193c5c836542b35a3a7c35c4e1c68c97" - integrity sha512-rJEDXPb61Hfgg8GllO3XXFP98bcIxdNNHSrNcxP/vBSukOolgOwQyZJ5f5z/c7ViPyh5/IDlC4qBnhx/0n+I4g== - dependencies: - eslint-config-prettier "^3.3.0" - eslint-plugin-prettier "^3.0.0" - prettier "^1.15.2" - -"@vue/eslint-config-typescript@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-4.0.0.tgz#a202983598a4a826460cbb8ee43826875b0f6673" - integrity sha512-uSMAMgw4xDgVdZQhpbtJRo8nMV4oOy3Ht8olfOo7xvYFYLMF2JZ1tDRKd9/NSusxA72O2Vma+HzmyzDHg9evcQ== - dependencies: - "@typescript-eslint/eslint-plugin" "^1.1.0" - "@typescript-eslint/parser" "^1.1.0" - -"@vue/preload-webpack-plugin@^1.1.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz#18723530d304f443021da2292d6ec9502826104a" - integrity sha512-8VCoJeeH8tCkzhkpfOkt+abALQkS11OIHhte5MBzYaKMTqK0A3ZAKEUVAffsOklhEv7t0yrQt696Opnu9oAx+w== - -"@vue/test-utils@1.0.0-beta.29": - version "1.0.0-beta.29" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.29.tgz#c942cf25e891cf081b6a03332b4ae1ef430726f0" - integrity sha512-yX4sxEIHh4M9yAbLA/ikpEnGKMNBCnoX98xE1RwxfhQVcn0MaXNSj1Qmac+ZydTj6VBSEVukchBogXBTwc+9iA== - dependencies: - dom-event-types "^1.0.0" - lodash "^4.17.4" - -"@vue/web-component-wrapper@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz#bb0e46f1585a7e289b4ee6067dcc5a6ae62f1dd1" - integrity sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw== - -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webcomponents/webcomponentsjs@^2.0.2": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.4.4.tgz#14b7e78da47f8f0071ff96c35335b871534179bc" - integrity sha512-UWXZYbaDLLfhm+xONXTiDciyhOSwKRrZieGQHFMSMGSxY4mbjZ5uYzOKgnuX0luYFvjJw32G3r0sCwQZPJIR4Q== - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abab@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" - integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-globals@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= - dependencies: - acorn "^3.0.4" - -acorn-jsx@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== - -acorn-walk@^6.0.1, acorn-walk@^6.1.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= - -acorn@^5.5.0, acorn@^5.5.3: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - -acorn@^6.0.1, acorn@^6.0.2, acorn@^6.0.7, acorn@^6.1.1, acorn@^6.4.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== - -acorn@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" - integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== - -address@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - -adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.1.tgz#b83ca89c5d42d69031f424cad49aada0236c6957" - integrity sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA== - -ajv@^5.2.3, ajv@^5.3.0: - version "5.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" - integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.5.5, ajv@^6.9.1: - version "6.12.3" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" - integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - -ansi-colors@^3.0.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -any-base@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz#ae101a62bc08a597b4c9ab5b7089d456630549fe" - integrity sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -app-builder-bin@3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.4.3.tgz#58a74193eb882f029be6b7f0cd3f0c6805927a6b" - integrity sha512-qMhayIwi3juerQEVJMQ76trObEbfQT0nhUdxZz9a26/3NLT3pE6awmQ8S1cEnrGugaaM5gYqR8OElcDezfmEsg== - -app-builder-lib@21.2.0, app-builder-lib@~21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-21.2.0.tgz#fa1d1604601431e2c3476857e9b9b61d33ad26cc" - integrity sha512-aOX/nv77/Bti6NymJDg7p9T067xD8m1ipIEJR7B4Mm1GsJWpMm9PZdXtCRiMNRjHtQS5KIljT0g17781y6qn5A== - dependencies: - "7zip-bin" "~5.0.3" - "@develar/schema-utils" "~2.1.0" - async-exit-hook "^2.0.1" - bluebird-lst "^1.0.9" - builder-util "21.2.0" - builder-util-runtime "8.3.0" - chromium-pickle-js "^0.2.0" - debug "^4.1.1" - ejs "^2.6.2" - electron-publish "21.2.0" - fs-extra "^8.1.0" - hosted-git-info "^2.7.1" - is-ci "^2.0.0" - isbinaryfile "^4.0.2" - js-yaml "^3.13.1" - lazy-val "^1.0.4" - minimatch "^3.0.4" - normalize-package-data "^2.5.0" - read-config-file "5.0.0" - sanitize-filename "^1.6.2" - semver "^6.3.0" - temp-file "^3.3.4" - -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" - integrity sha1-126/jKlNJ24keja61EpLdKthGZE= - dependencies: - default-require-extensions "^1.0.0" - -aproba@^1.0.3, aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -arch@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf" - integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== - -archiver-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-1.3.0.tgz#e50b4c09c70bf3d680e32ff1b7994e9f9d895174" - integrity sha1-5QtMCccL89aA4y/xt5lOn52JUXQ= - dependencies: - glob "^7.0.0" - graceful-fs "^4.1.0" - lazystream "^1.0.0" - lodash "^4.8.0" - normalize-path "^2.0.0" - readable-stream "^2.0.0" - -archiver@~2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/archiver/-/archiver-2.1.1.tgz#ff662b4a78201494a3ee544d3a33fe7496509ebc" - integrity sha1-/2YrSnggFJSj7lRNOjP+dJZQnrw= - dependencies: - archiver-utils "^1.3.0" - async "^2.0.0" - buffer-crc32 "^0.2.1" - glob "^7.0.0" - lodash "^4.8.0" - readable-stream "^2.0.0" - tar-stream "^1.5.0" - zip-stream "^1.2.0" - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -args@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/args/-/args-5.0.1.tgz#4bf298df90a4799a09521362c579278cc2fdd761" - integrity sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ== - dependencies: - camelcase "5.0.0" - chalk "2.4.2" - leven "2.1.0" - mri "1.1.4" - -arr-diff@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" - integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= - dependencies: - arr-flatten "^1.0.1" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.0.1, arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-flatten@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" - integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== - -array-union@^1.0.1, array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" - integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-exit-hook@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3" - integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.0.0, async@^2.1.4, async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^9.5.1: - version "9.8.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.5.tgz#2c225de229ddafe1d1424c02791d0c3e10ccccaa" - integrity sha512-C2p5KkumJlsTHoNv9w31NrBRgXhf6eCMteJuHZi2xhkgC+5Vm40MEtCKPhc0qdgAOhox0YPy1SQHTAky05UoKg== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001097" - colorette "^1.2.0" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2" - integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA== - -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@7.0.0-bridge.0: - version "7.0.0-bridge.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" - integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== - -babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.3" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" - integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.1" - debug "^2.6.9" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.8" - slash "^1.0.0" - source-map "^0.5.7" - -babel-eslint@^10.0.1: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.6.0.tgz#a644232366557a2240a0c083da6b25786185a2f1" - integrity sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew== - dependencies: - babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.2.0" - -babel-loader@^8.0.5: - version "8.1.0" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" - integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== - dependencies: - find-cache-dir "^2.1.0" - loader-utils "^1.4.0" - mkdirp "^0.5.3" - pify "^4.0.1" - schema-utils "^2.6.5" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" - integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-dynamic-import-node@^2.2.0, babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-istanbul@^4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" - integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ== - dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-jest-hoist@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" - integrity sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc= - -babel-plugin-module-resolver@3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" - integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== - dependencies: - find-babel-config "^1.1.0" - glob "^7.1.2" - pkg-up "^2.0.0" - reselect "^3.0.1" - resolve "^1.4.0" - -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" - integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= - -babel-plugin-transform-es2015-modules-commonjs@^6.26.0, babel-plugin-transform-es2015-modules-commonjs@^6.26.2: - version "6.26.2" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" - integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== - dependencies: - babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-types "^6.26.0" - -babel-plugin-transform-strict-mode@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" - integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-preset-jest@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" - integrity sha1-jsegOhOPABoaj7HoETZSvxpV2kY= - dependencies: - babel-plugin-jest-hoist "^23.2.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.0.0, babel-traverse@^6.18.0, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.24.1, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" - integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= - dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" - -babylon@^6.18.0: - version "6.18.0" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" - integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -batch-processor@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" - integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= - -batch@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" - integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -bfj@^6.1.1: - version "6.1.2" - resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" - integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== - dependencies: - bluebird "^3.5.5" - check-types "^8.0.3" - hoopy "^0.1.4" - tryer "^1.0.1" - -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" - integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bl@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -bl@^4.0.3: - version "4.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bluebird-lst@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c" - integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw== - dependencies: - bluebird "^3.5.5" - -bluebird@^3.1.1, bluebird@^3.5.1, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bmp-js@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" - integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.4.0: - version "4.11.9" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== - -bn.js@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.2.tgz#c9686902d3c9a27729f43ab10f9d79c2004da7b0" - integrity sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -bonjour@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" - integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= - dependencies: - array-flatten "^2.1.0" - deep-equal "^1.0.1" - dns-equal "^1.0.0" - dns-txt "^2.0.2" - multicast-dns "^6.0.1" - multicast-dns-service-types "^1.1.0" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -boolean@^3.0.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.1.2.tgz#e30f210a26b02458482a8cc353ab06f262a780c2" - integrity sha512-YN6UmV0FfLlBVvRvNPx3pz5W/mUoYB24J4WSXOKP/OOJpi+Oq6WYqPaNTHzjI0QzwWtnvEd5CGYyQPgp1jFxnw== - -boxen@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-3.2.0.tgz#fbdff0de93636ab4450886b6ff45b92d098f45eb" - integrity sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^2.4.2" - cli-boxes "^2.2.0" - string-width "^3.0.0" - term-size "^1.2.0" - type-fest "^0.3.0" - widest-line "^2.0.0" - -boxicons@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/boxicons/-/boxicons-2.0.5.tgz#c967dd5fd82276a3463929286be2e830394eaf56" - integrity sha512-qMRNvjaxjR1aQWssbwjWqV2cBKmqq4slWIeo1ovXPsuksQrGb7CWVi9PeC7tngUjnrQE4Vk79DE4+W702vdKWg== - dependencies: - "@webcomponents/webcomponentsjs" "^2.0.2" - prop-types "^15.6.0" - react "^16.0.0" - react-dom "^16.0.0" - react-interactive "^0.8.1" - react-router-dom "^4.2.2" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^1.8.2: - version "1.8.5" - resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" - integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= - dependencies: - expand-range "^1.8.1" - preserve "^0.2.0" - repeat-element "^1.1.2" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browser-resolve@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.0.tgz#545d0b1b07e6b2c99211082bf1b12cce7a0b0e11" - integrity sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.2" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.3.4, browserslist@^4.5.4: - version "4.13.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" - integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== - dependencies: - caniuse-lite "^1.0.30001093" - electron-to-chromium "^1.3.488" - escalade "^3.0.1" - node-releases "^1.1.58" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== - dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" - -buffer-crc32@^0.2.1, buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-equal@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" - integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= - -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= - -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-indexof@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" - integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -buffer@^5.1.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz#a31749dc7d81d84db08abf937b6b8c4033f62786" - integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -buffer@^5.2.0, buffer@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -builder-util-runtime@8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.3.0.tgz#f5fac9139af6facf42a21fbe4d3aebed88fda33e" - integrity sha512-CSOdsYqf4RXIHh1HANPbrZHlZ9JQJXSuDDloblZPcWQVN62inyYoTQuSmY3KrgefME2Sv3Kn2MxHvbGQHRf8Iw== - dependencies: - debug "^4.1.1" - sax "^1.2.4" - -builder-util@21.2.0, builder-util@~21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-21.2.0.tgz#aba721190e4e841009d9fb4b88f1130ed616522f" - integrity sha512-Nd6CUb6YgDY8EXAXEIegx+1kzKqyFQ5ZM5BoYkeunAlwz/zDJoH1UCyULjoS5wQe5czNClFQy07zz2bzYD0Z4A== - dependencies: - "7zip-bin" "~5.0.3" - "@types/debug" "^4.1.4" - app-builder-bin "3.4.3" - bluebird-lst "^1.0.9" - builder-util-runtime "8.3.0" - chalk "^2.4.2" - debug "^4.1.1" - fs-extra "^8.1.0" - is-ci "^2.0.0" - js-yaml "^3.13.1" - source-map-support "^0.5.13" - stat-mode "^0.3.0" - temp-file "^3.3.4" - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^10.0.4: - version "10.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" - integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA== - dependencies: - bluebird "^3.5.1" - chownr "^1.0.1" - glob "^7.1.2" - graceful-fs "^4.1.11" - lru-cache "^4.1.1" - mississippi "^2.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.2" - ssri "^5.2.4" - unique-filename "^1.1.0" - y18n "^4.0.0" - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cache-loader@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-2.0.1.tgz#5758f41a62d7c23941e3c3c7016e6faeb03acb07" - integrity sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ== - dependencies: - loader-utils "^1.1.0" - mkdirp "^0.5.1" - neo-async "^2.6.0" - normalize-path "^3.0.0" - schema-utils "^1.0.0" - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= - dependencies: - callsites "^0.2.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001093, caniuse-lite@^1.0.30001097: - version "1.0.30001104" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001104.tgz#4e3d5b3b1dd3c3529f10cb7f519c62ba3e579f5d" - integrity sha512-pkpCg7dmI/a7WcqM2yfdOiT4Xx5tzyoHAXWsX5/HxZ3TemwDZs0QXdqbE0UPLPVy/7BeK7693YfzfRYfu1YVpg== - -capture-exit@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" - integrity sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28= - dependencies: - rsvp "^3.3.3" - -case-sensitive-paths-webpack-plugin@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" - integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -check-types@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" - integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== - -chokidar@^2.0.4, chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.0.2, chokidar@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.1.tgz#e905bdecf10eaa0a0b1db0c664481cc4cbc22ba1" - integrity sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.4.0" - optionalDependencies: - fsevents "~2.1.2" - -chownr@^1.0.1, chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" - integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== - dependencies: - tslib "^1.9.0" - -chromium-pickle-js@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" - integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= - -ci-info@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" - integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== - -clamp@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/clamp/-/clamp-1.0.1.tgz#66a0e64011816e37196828fdc8c8c147312c8634" - integrity sha1-ZqDmQBGBbjcZaCj9yMjBRzEshjQ= - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-css@4.2.x: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" - integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-highlight@^2.1.0: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.4.tgz#098cb642cf17f42adc1c1145e07f960ec4d7522b" - integrity sha512-s7Zofobm20qriqDoU9sXptQx0t2R9PEgac92mENNm7xaEe1hn71IIMsXMK+6encA6WRCWWxIGQbipr3q998tlQ== - dependencies: - chalk "^3.0.0" - highlight.js "^9.6.0" - mz "^2.4.0" - parse5 "^5.1.1" - parse5-htmlparser2-tree-adapter "^5.1.1" - yargs "^15.0.0" - -cli-spinners@^2.0.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f" - integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA== - -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== - -clipboardy@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" - integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ== - dependencies: - arch "^2.1.1" - execa "^1.0.0" - is-wsl "^2.1.1" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clone@2.x: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color-string@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.6.0.tgz#c3915f61fe267672cb7e1e064c9d692219f6c312" - integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" - integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - -color@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/color/-/color-4.0.1.tgz#21df44cd10245a91b1ccf5ba031609b0e10e7d67" - integrity sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA== - dependencies: - color-convert "^2.0.1" - color-string "^1.6.0" - -colorette@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" - integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== - -commander@^2.12.1, commander@^2.18.0, commander@^2.19.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -compress-commons@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-1.2.2.tgz#524a9f10903f3a813389b0225d27c48bb751890f" - integrity sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8= - dependencies: - buffer-crc32 "^0.2.1" - crc32-stream "^2.0.0" - normalize-path "^2.0.0" - readable-stream "^2.0.0" - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -condense-newlines@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/condense-newlines/-/condense-newlines-0.2.1.tgz#3de985553139475d32502c83b02f60684d24c55f" - integrity sha1-PemFVTE5R10yUCyDsC9gaE0kxV8= - dependencies: - extend-shallow "^2.0.1" - is-whitespace "^0.3.0" - kind-of "^3.0.2" - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -config-chain@^1.1.12: - version "1.1.12" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" - integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -configstore@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" - integrity sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ== - dependencies: - dot-prop "^4.1.0" - graceful-fs "^4.1.2" - make-dir "^1.0.0" - unique-string "^1.0.0" - write-file-atomic "^2.0.0" - xdg-basedir "^3.0.0" - -connect-history-api-fallback@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" - integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -consolidate@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" - integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== - dependencies: - bluebird "^3.1.1" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -cookie@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -copy-webpack-plugin@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz#e7f40dd8a68477d405dd1b7a854aae324b158bae" - integrity sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA== - dependencies: - cacache "^10.0.4" - find-cache-dir "^1.0.0" - globby "^7.1.1" - is-glob "^4.0.0" - loader-utils "^1.1.0" - minimatch "^3.0.4" - p-limit "^1.0.0" - serialize-javascript "^1.4.0" - -core-js@^2.4.0, core-js@^2.5.0, core-js@^2.6.5: - version "2.6.11" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" - integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== - -core-js@^3.6.5: - version "3.15.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.1.tgz#6c08ab88abdf56545045ccf5fd81f47f407e7f1a" - integrity sha512-h8VbZYnc9pDzueiS2610IULDkpFFPunHwIpl8yRwFahAEEdSpHlTy3h3z3rKq5h11CaUdBEeRViu9AYvbxiMeg== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -crc32-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-2.0.0.tgz#e3cdd3b4df3168dd74e3de3fbbcb7b297fe908f4" - integrity sha1-483TtN8xaN10494/u8t7KX/pCPQ= - dependencies: - crc "^3.4.4" - readable-stream "^2.0.0" - -crc@^3.4.4: - version "3.8.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^5.0.1, cross-spawn@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" - integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= - dependencies: - lru-cache "^4.0.1" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -crypto-random-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" - integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-element-queries@^1.0.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/css-element-queries/-/css-element-queries-1.2.3.tgz#e14940b1fcd4bf0da60ea4145d05742d7172e516" - integrity sha512-QK9uovYmKTsV2GXWQiMOByVNrLn2qz6m3P7vWpOR4IdD6I3iXoDw5qtgJEN3Xq7gIbdHVKvzHjdAtcl+4Arc4Q== - -css-loader@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-1.0.1.tgz#6885bb5233b35ec47b006057da01cc640b6b79fe" - integrity sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw== - dependencies: - babel-code-frame "^6.26.0" - css-selector-tokenizer "^0.7.0" - icss-utils "^2.1.0" - loader-utils "^1.0.2" - lodash "^4.17.11" - postcss "^6.0.23" - postcss-modules-extract-imports "^1.2.0" - postcss-modules-local-by-default "^1.2.0" - postcss-modules-scope "^1.1.0" - postcss-modules-values "^1.3.0" - postcss-value-parser "^3.3.0" - source-list-map "^2.0.0" - -css-parse@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" - integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= - dependencies: - css "^2.0.0" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-selector-tokenizer@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" - integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw== - dependencies: - cssesc "^3.0.0" - fastparse "^1.1.2" - regexpu-core "^4.6.0" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@1.0.0-alpha.39: - version "1.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" - integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== - dependencies: - mdn-data "2.0.6" - source-map "^0.6.1" - -css-value@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/css-value/-/css-value-0.0.1.tgz#5efd6c2eea5ea1fd6b6ac57ec0427b18452424ea" - integrity sha1-Xv1sLupeof1rasV+wEJ7GEUkJOo= - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -css-what@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" - integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg== - -css@^2.0.0, css@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^4.0.0, cssnano-preset-default@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" - integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.2" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.0.0, cssnano@^4.1.10: - version "4.1.10" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" - integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.7" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" - integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== - dependencies: - css-tree "1.0.0-alpha.39" - -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" - integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== - dependencies: - cssom "0.3.x" - -current-script-polyfill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz#f31cf7e4f3e218b0726e738ca92a02d3488ef615" - integrity sha1-8xz35PPiGLBybnOMqSoC00iO9hU= - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -custom-electron-titlebar@^3.1.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/custom-electron-titlebar/-/custom-electron-titlebar-3.2.3.tgz#41da10b97958639e96a04275051bb5f78a666fc3" - integrity sha512-7DIZELlDoiAKT+i73XF9EG778M3/SYMmGa867cn3d0mLEEXDtEJq9sqM/u57vrtjolXKJ5ZJQ9hCCL2uxx9nxQ== - -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= - -deasync@^0.1.15: - version "0.1.20" - resolved "https://registry.yarnpkg.com/deasync/-/deasync-0.1.20.tgz#546fd2660688a1eeed55edce2308c5cf7104f9da" - integrity sha512-E1GI7jMI57hL30OX6Ht/hfQU8DO4AuB9m72WFm4c38GNbUD4Q03//XZaOIHZiY+H1xUaomcot5yk2q/qIZQkGQ== - dependencies: - bindings "^1.5.0" - node-addon-api "^1.7.1" - -debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== - dependencies: - mimic-response "^2.0.0" - -dedent-js@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dedent-js/-/dedent-js-1.0.1.tgz#bee5fb7c9e727d85dffa24590d10ec1ab1255305" - integrity sha1-vuX7fJ5yfYXf+iRZDRDsGrElUwU= - -deep-equal@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deepmerge@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" - integrity sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ== - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -deepmerge@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.0.1.tgz#25c1c24f110fb914f80001b925264dd77f3f4312" - integrity sha512-VIPwiMJqJ13ZQfaCsIFnp5Me9tnjURiaIFxfz7EH0Ci0dTSQpZtSLrqOicXqEd/z2r+z+Klk9GzmnRsgpgbOsQ== - -default-gateway@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" - integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== - dependencies: - execa "^1.0.0" - ip-regex "^2.1.0" - -default-gateway@^5.0.2: - version "5.0.5" - resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-5.0.5.tgz#4fd6bd5d2855d39b34cc5a59505486e9aafc9b10" - integrity sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA== - dependencies: - execa "^3.3.0" - -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" - integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= - dependencies: - strip-bom "^2.0.0" - -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" - -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -del@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" - integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== - dependencies: - "@types/glob" "^7.1.1" - globby "^6.1.0" - is-path-cwd "^2.0.0" - is-path-in-cwd "^2.0.0" - p-map "^2.0.0" - pify "^4.0.1" - rimraf "^2.6.3" - -del@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/del/-/del-6.0.0.tgz#0b40d0332cea743f1614f818be4feb717714c952" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-hover@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/detect-hover/-/detect-hover-1.0.2.tgz#589fb0b469220897a9eee3fa36a917e1eda37a21" - integrity sha1-WJ+wtGkiCJep7uP6NqkX4e2jeiE= - -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" - integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= - dependencies: - repeating "^2.0.0" - -detect-it@^3.0.3: - version "3.0.5" - resolved "https://registry.yarnpkg.com/detect-it/-/detect-it-3.0.5.tgz#816396c0fe12b11af08299a7c2b8381e58d15175" - integrity sha1-gWOWwP4SsRrwgpmnwrg4HljRUXU= - dependencies: - detect-hover "^1.0.2" - detect-passive-events "^1.0.4" - detect-pointer "^1.0.2" - detect-touch-events "^2.0.1" - -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -detect-newline@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" - integrity sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I= - -detect-node@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" - integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== - -detect-passive-events@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/detect-passive-events/-/detect-passive-events-1.0.4.tgz#6ed477e6e5bceb79079735dcd357789d37f9a91a" - integrity sha1-btR35uW863kHlzXc01d4nTf5qRo= - -detect-pointer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/detect-pointer/-/detect-pointer-1.0.2.tgz#1e0e4e261dab45055c50c74fb5a4ff09ceb18fbd" - integrity sha1-Hg5OJh2rRQVcUMdPtaT/Cc6xj70= - -detect-touch-events@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/detect-touch-events/-/detect-touch-events-2.0.1.tgz#365833cf0c5c40c4090a08096b8a688db00fa337" - integrity sha1-NlgzzwxcQMQJCggJa4pojbAPozc= - -dev-null@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dev-null/-/dev-null-0.1.1.tgz#5a205ce3c2b2ef77b6238d6ba179eb74c6a0e818" - integrity sha1-WiBc48Ky73e2I41roXnrdMag6Bg= - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.0.0, dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -dmg-builder@21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-21.2.0.tgz#a9c883557cacb9abdb66c7133b30fe921c1a3ba7" - integrity sha512-9cJEclnGy7EyKFCoHDYDf54pub/t92CQapyiUxU0w9Bj2vUvfoDagP1PMiX4XD5rPp96141h9A+QN0OB4VgvQg== - dependencies: - app-builder-lib "~21.2.0" - bluebird-lst "^1.0.9" - builder-util "~21.2.0" - fs-extra "^8.1.0" - iconv-lite "^0.5.0" - js-yaml "^3.13.1" - sanitize-filename "^1.6.2" - -dns-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" - integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= - -dns-packet@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" - integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== - dependencies: - ip "^1.1.0" - safe-buffer "^5.0.1" - -dns-txt@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" - integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= - dependencies: - buffer-indexof "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-converter@^0.2: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - -dom-event-types@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dom-event-types/-/dom-event-types-1.0.0.tgz#5830a0a29e1bf837fe50a70cd80a597232813cae" - integrity sha512-2G2Vwi2zXTHBGqXHsJ4+ak/iP0N8Ar+G8a7LiD2oup5o4sQWytwqqrZu/O6hIMV0KMID2PL69OhpshLO0n7UJQ== - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== - dependencies: - is-obj "^1.0.0" - -dot-prop@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" - integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== - dependencies: - is-obj "^2.0.0" - -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-7.0.0.tgz#a2be3cd52736673206e8a85fb5210eea29628e7c" - integrity sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g== - -dotenv@^8.0.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" - integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -easy-stack@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/easy-stack/-/easy-stack-1.0.0.tgz#12c91b3085a37f0baa336e9486eac4bf94e3e788" - integrity sha1-EskbMIWjfwuqM26UhurEv5Tj54g= - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -editorconfig@^0.15.3: - version "0.15.3" - resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" - integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== - dependencies: - commander "^2.19.0" - lru-cache "^4.1.5" - semver "^5.6.0" - sigmund "^1.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -ejs@^2.6.1, ejs@^2.6.2: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== - -ejs@~2.5.6: - version "2.5.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.9.tgz#7ba254582a560d267437109a68354112475b0ce5" - integrity sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ== - -electron-builder@^21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-21.2.0.tgz#b68ec4def713fc0b8602654ce842f972432f50c5" - integrity sha512-x8EXrqFbAb2L3N22YlGar3dGh8vwptbB3ovo3OF6K7NTpcsmM2zEoJv7GhFyX73rNzSG2HaWpXwGAtOp2JWiEw== - dependencies: - app-builder-lib "21.2.0" - bluebird-lst "^1.0.9" - builder-util "21.2.0" - builder-util-runtime "8.3.0" - chalk "^2.4.2" - dmg-builder "21.2.0" - fs-extra "^8.1.0" - is-ci "^2.0.0" - lazy-val "^1.0.4" - read-config-file "5.0.0" - sanitize-filename "^1.6.2" - update-notifier "^3.0.1" - yargs "^13.3.0" - -electron-chromedriver@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/electron-chromedriver/-/electron-chromedriver-5.0.1.tgz#0c102a482f16bd47f54fcdd238cf64210395ff4a" - integrity sha512-w82q6KkIsKjzhcucllpxeulIxYn5rccNw43rpbMuZcgMQ0EPsckoYwUt7Gadmdi14xniZ+debN9SM8V1EUyaBQ== - dependencies: - electron-download "^4.1.1" - extract-zip "^1.6.7" - -electron-devtools-installer@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-3.2.0.tgz#acc48d24eb7033fe5af284a19667e73b78d406d0" - integrity sha512-t3UczsYugm4OAbqvdImMCImIMVdFzJAHgbwHpkl5jmfu1izVgUcP/mnrPqJIpEeCK1uZGpt+yHgWEN+9EwoYhQ== - dependencies: - rimraf "^3.0.2" - semver "^7.2.1" - tslib "^2.1.0" - unzip-crx-3 "^0.2.0" - -electron-download@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-4.1.1.tgz#02e69556705cc456e520f9e035556ed5a015ebe8" - integrity sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg== - dependencies: - debug "^3.0.0" - env-paths "^1.0.0" - fs-extra "^4.0.1" - minimist "^1.2.0" - nugget "^2.0.1" - path-exists "^3.0.0" - rc "^1.2.1" - semver "^5.4.1" - sumchecker "^2.0.2" - -electron-icon-builder@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/electron-icon-builder/-/electron-icon-builder-2.0.1.tgz#f43171bde3074870158433aa6103497bc5249793" - integrity sha512-rg9BxW2kJi3TXsMFFNXWXrwQEd5dzXmeD+w7Pj3k3z7aYRePLxE89qU4lvL/rK1X/NTY5KDn3+Dbgm1TU2dGXQ== - dependencies: - args "^5.0.1" - icon-gen "^2.0.0" - jimp "^0.16.1" - -electron-publish@21.2.0: - version "21.2.0" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-21.2.0.tgz#cc225cb46aa62e74b899f2f7299b396c9802387d" - integrity sha512-mWavuoWJe87iaeKd0I24dNWIaR+0yRzshjNVqGyK019H766fsPWl3caQJnVKFaEyrZRP397v4JZVG0e7s16AxA== - dependencies: - bluebird-lst "^1.0.9" - builder-util "~21.2.0" - builder-util-runtime "8.3.0" - chalk "^2.4.2" - fs-extra "^8.1.0" - lazy-val "^1.0.4" - mime "^2.4.4" - -electron-settings@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/electron-settings/-/electron-settings-4.0.2.tgz#26ef242397393e0e69119f6fb879fc2287d0f508" - integrity sha512-WnUlrnBsO784oXcag0ym+A3ySoIwonz5GhYFsWroMHVzslzmsP+81f/Fof41T9UrRUxuPPKiZPZMwGO+yvWChg== - dependencies: - lodash.get "^4.4.2" - lodash.has "^4.5.2" - lodash.set "^4.3.2" - lodash.unset "^4.5.2" - mkdirp "^1.0.4" - write-file-atomic "^3.0.3" - -electron-to-chromium@^1.3.488: - version "1.3.501" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.501.tgz#faa17a2cb0105ee30d5e1ca87eae7d8e85dd3175" - integrity sha512-tyzuKaV2POw2mtqBBzQGNBojMZzH0MRu8bT8T/50x+hWeucyG/9pkgAATy+PcM2ySNM9+8eG2VllY9c6j4i+bg== - -electron@^13.0.0: - version "13.1.4" - resolved "https://registry.yarnpkg.com/electron/-/electron-13.1.4.tgz#6d20d932a0651c3cba9f09a3d08cbaf5b69aa84b" - integrity sha512-4qhRZbRvGqHmMWsCG/kRVF4X8VIq9Nujgm+gXZLBSpiR6uUtMHy7ViBTQZl1PGf6O9Ppxhpr9Yz+k6Um9WoP3Q== - dependencies: - "@electron/get" "^1.0.1" - "@types/node" "^14.6.2" - extract-zip "^1.0.3" - -element-resize-detector@^1.1.15: - version "1.2.1" - resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.1.tgz#b0305194447a4863155e58f13323a0aef30851d1" - integrity sha512-BdFsPepnQr9fznNPF9nF4vQ457U/ZJXQDSNF1zBe7yaga8v9AdZf3/NElYxFdUh7SitSGt040QygiTo6dtatIw== - dependencies: - batch-processor "1.0.0" - -elliptic@^6.0.0, elliptic@^6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" - integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -encodeurl@^1.0.2, encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" - integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" - integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== - -env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error-stack-parser@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== - dependencies: - stackframe "^1.1.1" - -es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: - version "1.17.6" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" - integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.2.0" - is-regex "^1.1.0" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimend "^1.0.1" - string.prototype.trimstart "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-error@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -escalade@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" - integrity sha512-gPYAU37hYCUhW5euPeR+Y74F7BL+IBsV93j5cvGriSaD1aG6MGsqsV1yamRdrWrb2j3aiZvb0X+UBOWpx3JWtQ== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^1.9.1: - version "1.14.3" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" - integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-prettier@^3.3.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-3.6.0.tgz#8ca3ffac4bd6eeef623a0651f9d754900e3ec217" - integrity sha512-ixJ4U3uTLXwJts4rmSVW/lMXjlGwCijhBJHk8iVqKKSifeI0qgFEfWl8L63isfc8Od7EiBALF6BX3jKLluf/jQ== - dependencies: - get-stdin "^6.0.0" - -eslint-loader@^2.1.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-2.2.1.tgz#28b9c12da54057af0845e2a6112701a2f6bf8337" - integrity sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg== - dependencies: - loader-fs-cache "^1.0.0" - loader-utils "^1.0.2" - object-assign "^4.0.1" - object-hash "^1.1.4" - rimraf "^2.6.1" - -eslint-plugin-prettier@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2" - integrity sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-plugin-vue@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz#c829b9fc62582c1897b5a0b94afd44ecca511e63" - integrity sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA== - dependencies: - vue-eslint-parser "^2.0.3" - -eslint-plugin-vue@^5.0.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.3.tgz#3ee7597d823b5478804b2feba9863b1b74273961" - integrity sha512-mGwMqbbJf0+VvpGR5Lllq0PMxvTdrZ/ZPjmhkacrCHbubJeJOt+T6E3HUzAifa2Mxi7RSdJfC9HFpOeSYVMMIw== - dependencies: - vue-eslint-parser "^5.0.0" - -eslint-scope@^3.7.1: - version "3.7.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" - integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^4.0.0, eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-scope@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz#d0f971dfe59c69e0cada684b23d49dbf82600ce5" - integrity sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-utils@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint@^4.19.1: - version "4.19.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.19.1.tgz#32d1d653e1d90408854bfb296f076ec7e186a300" - integrity sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ== - dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" - chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.4" - esquery "^1.0.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" - imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - pluralize "^7.0.0" - progress "^2.0.0" - regexpp "^1.0.1" - require-uncached "^1.0.3" - semver "^5.3.0" - strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "4.0.2" - text-table "~0.2.0" - -eslint@^5.16.0: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@babel/code-frame" "^7.0.0" - ajv "^6.9.1" - chalk "^2.1.0" - cross-spawn "^6.0.5" - debug "^4.0.1" - doctrine "^3.0.0" - eslint-scope "^4.0.3" - eslint-utils "^1.3.1" - eslint-visitor-keys "^1.0.0" - espree "^5.0.1" - esquery "^1.0.1" - esutils "^2.0.2" - file-entry-cache "^5.0.1" - functional-red-black-tree "^1.0.1" - glob "^7.1.2" - globals "^11.7.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - inquirer "^6.2.2" - js-yaml "^3.13.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.3.0" - lodash "^4.17.11" - minimatch "^3.0.4" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.2" - progress "^2.0.0" - regexpp "^2.0.1" - semver "^5.5.1" - strip-ansi "^4.0.0" - strip-json-comments "^2.0.1" - table "^5.2.3" - text-table "^0.2.0" - -espree@^3.5.2, espree@^3.5.4: - version "3.5.4" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7" - integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A== - dependencies: - acorn "^5.5.0" - acorn-jsx "^3.0.0" - -espree@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f" - integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w== - dependencies: - acorn "^6.0.2" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.0.0, esquery@^1.0.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" - integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" - integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-pubsub@4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/event-pubsub/-/event-pubsub-4.3.0.tgz#f68d816bc29f1ec02c539dc58c8dd40ce72cb36e" - integrity sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ== - -eventemitter3@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - -events@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" - integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== - -eventsource@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" - integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -exec-sh@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" - integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw== - dependencies: - merge "^1.2.0" - -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" - integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" - integrity sha1-2NdrvBtVIX7RkP1t1J08d07PyNo= - dependencies: - cross-spawn "^5.0.1" - get-stream "^3.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^3.3.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" - integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - p-finally "^2.0.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exif-parser@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" - integrity sha1-WKnS1ywCwfbwKg70qRZicrd2CSI= - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" - integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= - dependencies: - is-posix-bracket "^0.1.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-range@^1.8.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" - integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= - dependencies: - fill-range "^2.1.0" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -expect@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-23.6.0.tgz#1e0c8d3ba9a581c87bd71fb9bc8862d443425f98" - integrity sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w== - dependencies: - ansi-styles "^3.2.0" - jest-diff "^23.6.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - -express@^4.16.3, express@^4.17.1: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^2.0.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" - integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== - dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" - tmp "^0.0.33" - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" - integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= - dependencies: - is-extglob "^1.0.0" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-from-css@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/extract-from-css/-/extract-from-css-0.4.4.tgz#1ea7df2e7c7c6eb9922fa08e8adaea486f6f8f92" - integrity sha1-HqffLnx8brmSL6COitrqSG9vj5I= - dependencies: - css "^2.1.0" - -extract-zip@^1.0.3, extract-zip@^1.6.5, extract-zip@^1.6.7: - version "1.7.0" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" - integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== - dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" - yauzl "^2.10.0" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" - integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-glob@^3.1.1: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fast-png@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/fast-png/-/fast-png-5.0.4.tgz#e621bf76f85fa4a836c09c13514dce7684c5ea23" - integrity sha512-vTNj6yixRnclW6sTlCeH6sNRLBOhM5ITmlo1LSU5ojKEc2e9kZkqXPo2xzBxKb61MBCXRXBcr8qJztOHr2O6WQ== - dependencies: - "@types/pako" "^1.0.1" - iobuffer "^5.0.2" - pako "^2.0.2" - -fastparse@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" - integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== - -fastq@^1.6.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.10.1.tgz#8b8f2ac8bf3632d67afcd65dac248d5fdc45385e" - integrity sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA== - dependencies: - reusify "^1.0.4" - -faye-websocket@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -faye-websocket@~0.11.1: - version "0.11.3" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" - integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== - dependencies: - websocket-driver ">=0.5.1" - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-loader@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-3.0.1.tgz#f8e0ba0b599918b51adfe45d66d1e771ad560faa" - integrity sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw== - dependencies: - loader-utils "^1.0.2" - schema-utils "^1.0.0" - -file-type@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18" - integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -file-url@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/file-url/-/file-url-2.0.2.tgz#e951784d79095127d3713029ab063f40818ca2ae" - integrity sha1-6VF4TXkJUSfTcTApqwY/QIGMoq4= - -filename-regex@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" - integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= - -fileset@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= - dependencies: - glob "^7.0.3" - minimatch "^3.0.3" - -filesize@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - -fill-range@^2.1.0: - version "2.2.4" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" - integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== - dependencies: - is-number "^2.1.0" - isobject "^2.0.0" - randomatic "^3.0.0" - repeat-element "^1.1.2" - repeat-string "^1.5.2" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-babel-config@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" - integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== - dependencies: - json5 "^0.5.1" - path-exists "^3.0.0" - -find-cache-dir@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" - integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= - dependencies: - commondir "^1.0.1" - mkdirp "^0.5.1" - pkg-dir "^1.0.0" - -find-cache-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" - integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= - dependencies: - commondir "^1.0.1" - make-dir "^1.0.0" - pkg-dir "^2.0.0" - -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^1.2.1: - version "1.3.4" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f" - integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg== - dependencies: - circular-json "^0.3.1" - graceful-fs "^4.1.2" - rimraf "~2.6.2" - write "^0.2.1" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@^1.0.0: - version "1.12.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6" - integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg== - -for-in@^1.0.1, for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -for-own@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -fork-ts-checker-webpack-plugin@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-0.5.2.tgz#a73b3630bd0a69409a6e4824e54c03a62fe82d8f" - integrity sha512-a5IG+xXyKnpruI0CP/anyRLAoxWtp3lzdG6flxicANnoSzz64b12dJ7ASAVRrI2OaWwZR2JyBaMHFQqInhWhIw== - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^2.0.4" - micromatch "^3.1.10" - minimatch "^3.0.4" - tapable "^1.0.0" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -friendly-errors-webpack-plugin@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz#efc86cbb816224565861a1be7a9d84d0aafea136" - integrity sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw== - dependencies: - chalk "^1.1.3" - error-stack-parser "^2.0.0" - string-width "^2.0.0" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" - integrity sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - -fs-extra@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.3, fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" - integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@~1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0, get-stream@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" - integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -gifwrap@^0.9.2: - version "0.9.2" - resolved "https://registry.yarnpkg.com/gifwrap/-/gifwrap-0.9.2.tgz#348e286e67d7cf57942172e1e6f05a71cee78489" - integrity sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA== - dependencies: - image-q "^1.1.1" - omggif "^1.0.10" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= - -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.1.0, glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-agent@^2.0.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-2.2.0.tgz#566331b0646e6bf79429a16877685c4a1fbf76dc" - integrity sha512-+20KpaW6DDLqhG7JDiJpD1JvNvb8ts+TNl7BPOYcURqCrXqnN1Vf+XVOrkKJAFPqfX+oEhsdzOj1hLWkBTdNJg== - dependencies: - boolean "^3.0.1" - core-js "^3.6.5" - es6-error "^4.1.1" - matcher "^3.0.0" - roarr "^2.15.3" - semver "^7.3.2" - serialize-error "^7.0.1" - -global-dirs@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" - integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= - dependencies: - ini "^1.3.4" - -global-tunnel-ng@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f" - integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== - dependencies: - encodeurl "^1.0.2" - lodash "^4.17.10" - npm-conf "^1.1.3" - tunnel "^0.0.6" - -global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^11.0.1, globals@^11.1.0, globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== - -globalthis@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b" - integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== - dependencies: - define-properties "^1.1.3" - -globby@^11.0.1: - version "11.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.2.tgz#1af538b766a3b540ebfb58a32b2e2d5897321d83" - integrity sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= - dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" - -globby@^9.2.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -globule@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" - integrity sha512-7IDTQTIu2xzXkT+6mlluidnWo+BypnbSoEVVQCGfzqnl5Ik8d3e1d4wycb8Rj9tWW+Z39uPWsdlquqiqPCd/pA== - dependencies: - glob "~7.1.1" - lodash "~4.17.10" - minimatch "~3.0.2" - -golden-layout@^1.5.9: - version "1.5.9" - resolved "https://registry.yarnpkg.com/golden-layout/-/golden-layout-1.5.9.tgz#a39bc1f6a67e6f886b797c016dd924e9426ba77f" - integrity sha1-o5vB9qZ+b4hreXwBbdkk6UJrp38= - dependencies: - jquery "*" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== - dependencies: - "@sindresorhus/is" "^0.14.0" - "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -graceful-fs@^4.1.9, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -grapheme-splitter@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -gzip-size@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" - -handle-thing@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" - integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== - -handlebars@^4.0.3: - version "4.7.6" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.6.tgz#d4c05c1baf90e9945f77aa68a7a219aa4a7df74e" - integrity sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA== - dependencies: - minimist "^1.2.5" - neo-async "^2.6.0" - source-map "^0.6.1" - wordwrap "^1.0.0" - optionalDependencies: - uglify-js "^3.1.4" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= - dependencies: - ansi-regex "^2.0.0" - -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= - -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - -has@^1.0.0, has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash-sum@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" - integrity sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ= - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasha@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1" - integrity sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE= - dependencies: - is-stream "^1.0.1" - pinkie-promise "^2.0.0" - -he@1.2.x, he@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -highlight.js@^9.6.0: - version "9.18.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.1.tgz#ed21aa001fe6252bb10a3d76d47573c6539fe13c" - integrity sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg== - -history@^4.7.2: - version "4.10.1" - resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" - integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== - dependencies: - "@babel/runtime" "^7.1.2" - loose-envify "^1.2.0" - resolve-pathname "^3.0.0" - tiny-invariant "^1.0.2" - tiny-warning "^1.0.0" - value-equal "^1.0.1" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hoist-non-react-statics@^2.5.0: - version "2.5.5" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" - integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw== - -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - -hoopy@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" - integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== - -hosted-git-info@^2.1.4, hosted-git-info@^2.7.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -hpack.js@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" - integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= - dependencies: - inherits "^2.0.1" - obuf "^1.0.0" - readable-stream "^2.0.1" - wbuf "^1.1.0" - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - -html-entities@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" - integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== - -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= - -html-webpack-plugin@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" - integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= - dependencies: - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - tapable "^1.0.0" - toposort "^1.0.0" - util.promisify "1.0.0" - -htmlparser2@^3.3.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-deceiver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" - integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-parser-js@>=0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.2.tgz#da2e31d237b393aae72ace43882dd7e270a8ff77" - integrity sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ== - -http-proxy-middleware@0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" - integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== - dependencies: - http-proxy "^1.17.0" - is-glob "^4.0.0" - lodash "^4.17.11" - micromatch "^3.1.10" - -http-proxy@^1.17.0: - version "1.18.1" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" - integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -icon-gen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icon-gen/-/icon-gen-2.1.0.tgz#401642b68d7c79316a8e6729bcf3fdfcdb71bdfa" - integrity sha512-rqIVvq9MJ8X7wnJW0NO8Eau/+5RWV7AH6L5vEt/U5Ajv5WefdDNDxGwJhGokyHuyBWeX7JqRMQ03tG0gAco4Eg== - dependencies: - commander "^6.2.0" - del "^6.0.0" - mkdirp "^1.0.4" - pngjs "^6.0.0" - svg2png "4.1.1" - uuid "^8.3.1" - -iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.5.2.tgz#af6d628dccfb463b7364d97f715e4b74b8c8c2b8" - integrity sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -icss-replace-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" - integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0= - -icss-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" - integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI= - dependencies: - postcss "^6.0.1" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - -ignore@^3.3.3, ignore@^3.3.5: - version "3.3.10" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" - integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== - -ignore@^4.0.3, ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -image-q@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056" - integrity sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY= - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" - integrity sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ== - dependencies: - pkg-dir "^2.0.0" - resolve-cwd "^2.0.0" - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.4, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inquirer@^3.0.6, inquirer@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^2.0.4" - figures "^2.0.0" - lodash "^4.3.0" - mute-stream "0.0.7" - run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" - string-width "^2.1.0" - strip-ansi "^4.0.0" - through "^2.3.6" - -inquirer@^6.2.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -internal-ip@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" - integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== - dependencies: - default-gateway "^4.2.0" - ipaddr.js "^1.9.0" - -intersection-observer@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/intersection-observer/-/intersection-observer-0.5.1.tgz#e340fc56ce74290fe2b2394d1ce88c4353ac6dfa" - integrity sha512-Zd7Plneq82kiXFixs7bX62YnuZ0BMRci9br7io88LwDyF3V43cQMI+G5IiTlTNTt+LsDUppl19J/M2Fp9UkH6g== - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -iobuffer@^5.0.2: - version "5.0.3" - resolved "https://registry.yarnpkg.com/iobuffer/-/iobuffer-5.0.3.tgz#31a640b4e33659955bbf57ce796324334265dacf" - integrity sha512-0SNk4hbHVXx9oE27vTJY+oiI0txkhBdQV12RvILd/7XuIhBZ0TkImq5EnhFYCcRcDff8jpFhZ9C2Sg+NIo3ZMQ== - -ip-regex@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" - integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= - -ip@^1.1.0, ip@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" - integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= - -ipaddr.js@1.9.1, ipaddr.js@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-absolute-url@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" - integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" - integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== - -is-ci@^1.0.10: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" - integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== - dependencies: - ci-info "^1.5.0" - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" - integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== - -is-dotfile@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" - integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= - -is-equal-shallow@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" - integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= - dependencies: - is-primitive "^2.0.0" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" - integrity sha1-lp1J4bszKfa7fwkIm+JleLLd1Go= - -is-glob@^2.0.0, is-glob@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" - integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= - dependencies: - global-dirs "^0.1.0" - is-path-inside "^1.0.0" - -is-npm@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-3.0.0.tgz#ec9147bfb629c43f494cf67936a961edec7e8053" - integrity sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA== - -is-number@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" - integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= - dependencies: - kind-of "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" - integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-cwd@^2.0.0, is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-in-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" - integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== - dependencies: - is-path-inside "^2.1.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - -is-path-inside@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" - integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== - dependencies: - path-is-inside "^1.0.2" - -is-path-inside@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" - integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== - -is-plain-obj@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-posix-bracket@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" - integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= - -is-primitive@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" - integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= - -is-regex@^1.0.4, is-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" - integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== - dependencies: - has-symbols "^1.0.1" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== - -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-whitespace@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" - integrity sha1-Fjnssb4DauxppUy7QBz77XEUq38= - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isbinaryfile@^4.0.2: - version "4.0.6" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz#edcb62b224e2b4710830b67498c8e4e5a4d2610b" - integrity sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-api@^1.3.1: - version "1.3.7" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" - integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA== - dependencies: - async "^2.1.4" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.1" - istanbul-lib-hook "^1.2.2" - istanbul-lib-instrument "^1.10.2" - istanbul-lib-report "^1.1.5" - istanbul-lib-source-maps "^1.2.6" - istanbul-reports "^1.5.1" - js-yaml "^3.7.0" - mkdirp "^0.5.1" - once "^1.4.0" - -istanbul-lib-coverage@^1.2.0, istanbul-lib-coverage@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" - integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== - -istanbul-lib-hook@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" - integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw== - dependencies: - append-transform "^0.4.0" - -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2: - version "1.10.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" - integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.1" - semver "^5.3.0" - -istanbul-lib-report@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" - integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw== - dependencies: - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" - -istanbul-lib-source-maps@^1.2.4, istanbul-lib-source-maps@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" - integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg== - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-reports@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" - integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== - dependencies: - handlebars "^4.0.3" - -javascript-stringify@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" - integrity sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM= - -javascript-stringify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.0.1.tgz#6ef358035310e35d667c675ed63d3eb7c1aa19e5" - integrity sha512-yV+gqbd5vaOYjqlbk16EG89xB5udgjqQF3C5FAORDg4f/IS1Yc5ERCv5e/57yBcfJYw05V5JyIXabhwb75Xxow== - -jest-changed-files@^23.4.2: - version "23.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.4.2.tgz#1eed688370cd5eebafe4ae93d34bb3b64968fe83" - integrity sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA== - dependencies: - throat "^4.0.0" - -jest-cli@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.6.0.tgz#61ab917744338f443ef2baa282ddffdd658a5da4" - integrity sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.3.1" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-source-maps "^1.2.4" - jest-changed-files "^23.4.2" - jest-config "^23.6.0" - jest-environment-jsdom "^23.4.0" - jest-get-type "^22.1.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve-dependencies "^23.6.0" - jest-runner "^23.6.0" - jest-runtime "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - jest-watcher "^23.4.0" - jest-worker "^23.2.0" - micromatch "^2.3.11" - node-notifier "^5.2.1" - prompts "^0.1.9" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^1.0.0" - string-length "^2.0.0" - strip-ansi "^4.0.0" - which "^1.2.12" - yargs "^11.0.0" - -jest-config@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.6.0.tgz#f82546a90ade2d8c7026fbf6ac5207fc22f8eb1d" - integrity sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ== - dependencies: - babel-core "^6.0.0" - babel-jest "^23.6.0" - chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^23.4.0" - jest-environment-node "^23.4.0" - jest-get-type "^22.1.0" - jest-jasmine2 "^23.6.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" - pretty-format "^23.6.0" - -jest-diff@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d" - integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g== - dependencies: - chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" - -jest-docblock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" - integrity sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c= - dependencies: - detect-newline "^2.1.0" - -jest-each@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.6.0.tgz#ba0c3a82a8054387016139c733a05242d3d71575" - integrity sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg== - dependencies: - chalk "^2.0.1" - pretty-format "^23.6.0" - -jest-environment-jsdom@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.4.0.tgz#056a7952b3fea513ac62a140a2c368c79d9e6023" - integrity sha1-BWp5UrP+pROsYqFAosNox52eYCM= - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - jsdom "^11.5.1" - -jest-environment-node@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.4.0.tgz#57e80ed0841dea303167cce8cd79521debafde10" - integrity sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA= - dependencies: - jest-mock "^23.2.0" - jest-util "^23.4.0" - -jest-get-type@^22.1.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" - integrity sha512-/jsz0Y+V29w1chdXVygEKSz2nBoHoYqNShPe+QgxSNjAuP1i8+k4LbQNrfoliKej0P45sivkSCh7yiD6ubHS3w== - -jest-haste-map@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.6.0.tgz#2e3eb997814ca696d62afdb3f2529f5bbc935e16" - integrity sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg== - dependencies: - fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - invariant "^2.2.4" - jest-docblock "^23.2.0" - jest-serializer "^23.0.1" - jest-worker "^23.2.0" - micromatch "^2.3.11" - sane "^2.0.0" - -jest-jasmine2@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.6.0.tgz#840e937f848a6c8638df24360ab869cc718592e0" - integrity sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ== - dependencies: - babel-traverse "^6.0.0" - chalk "^2.0.1" - co "^4.6.0" - expect "^23.6.0" - is-generator-fn "^1.0.0" - jest-diff "^23.6.0" - jest-each "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - pretty-format "^23.6.0" - -jest-leak-detector@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.6.0.tgz#e4230fd42cf381a1a1971237ad56897de7e171de" - integrity sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg== - dependencies: - pretty-format "^23.6.0" - -jest-matcher-utils@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.6.0.tgz#726bcea0c5294261a7417afb6da3186b4b8cac80" - integrity sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog== - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^23.6.0" - -jest-message-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.4.0.tgz#17610c50942349508d01a3d1e0bda2c079086a9f" - integrity sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8= - dependencies: - "@babel/code-frame" "^7.0.0-beta.35" - chalk "^2.0.1" - micromatch "^2.3.11" - slash "^1.0.0" - stack-utils "^1.0.1" - -jest-mock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" - integrity sha1-rRxg8p6HGdR8JuETgJi20YsmETQ= - -jest-regex-util@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" - integrity sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U= - -jest-resolve-dependencies@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.6.0.tgz#b4526af24c8540d9a3fab102c15081cf509b723d" - integrity sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA== - dependencies: - jest-regex-util "^23.3.0" - jest-snapshot "^23.6.0" - -jest-resolve@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.6.0.tgz#cf1d1a24ce7ee7b23d661c33ba2150f3aebfa0ae" - integrity sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA== - dependencies: - browser-resolve "^1.11.3" - chalk "^2.0.1" - realpath-native "^1.0.0" - -jest-runner@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.6.0.tgz#3894bd219ffc3f3cb94dc48a4170a2e6f23a5a38" - integrity sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA== - dependencies: - exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-docblock "^23.2.0" - jest-haste-map "^23.6.0" - jest-jasmine2 "^23.6.0" - jest-leak-detector "^23.6.0" - jest-message-util "^23.4.0" - jest-runtime "^23.6.0" - jest-util "^23.4.0" - jest-worker "^23.2.0" - source-map-support "^0.5.6" - throat "^4.0.0" - -jest-runtime@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.6.0.tgz#059e58c8ab445917cd0e0d84ac2ba68de8f23082" - integrity sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw== - dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.1.6" - chalk "^2.0.1" - convert-source-map "^1.4.0" - exit "^0.1.2" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.11" - jest-config "^23.6.0" - jest-haste-map "^23.6.0" - jest-message-util "^23.4.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.6.0" - jest-snapshot "^23.6.0" - jest-util "^23.4.0" - jest-validate "^23.6.0" - micromatch "^2.3.11" - realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^11.0.0" - -jest-serializer-vue@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jest-serializer-vue/-/jest-serializer-vue-2.0.2.tgz#b238ef286357ec6b480421bd47145050987d59b3" - integrity sha1-sjjvKGNX7GtIBCG9RxRQUJh9WbM= - dependencies: - pretty "2.0.0" - -jest-serializer@^23.0.1: - version "23.0.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" - integrity sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU= - -jest-snapshot@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.6.0.tgz#f9c2625d1b18acda01ec2d2b826c0ce58a5aa17a" - integrity sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg== - dependencies: - babel-types "^6.0.0" - chalk "^2.0.1" - jest-diff "^23.6.0" - jest-matcher-utils "^23.6.0" - jest-message-util "^23.4.0" - jest-resolve "^23.6.0" - mkdirp "^0.5.1" - natural-compare "^1.4.0" - pretty-format "^23.6.0" - semver "^5.5.0" - -jest-transform-stub@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jest-transform-stub/-/jest-transform-stub-2.0.0.tgz#19018b0851f7568972147a5d60074b55f0225a7d" - integrity sha512-lspHaCRx/mBbnm3h4uMMS3R5aZzMwyNpNIJLXj4cEsV0mIUtS4IjYJLSoyjRCtnxb6RIGJ4NL2quZzfIeNhbkg== - -jest-util@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.4.0.tgz#4d063cb927baf0a23831ff61bec2cbbf49793561" - integrity sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE= - dependencies: - callsites "^2.0.0" - chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^23.4.0" - mkdirp "^0.5.1" - slash "^1.0.0" - source-map "^0.6.0" - -jest-validate@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.6.0.tgz#36761f99d1ed33fcd425b4e4c5595d62b6597474" - integrity sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A== - dependencies: - chalk "^2.0.1" - jest-get-type "^22.1.0" - leven "^2.1.0" - pretty-format "^23.6.0" - -jest-watch-typeahead@0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/jest-watch-typeahead/-/jest-watch-typeahead-0.2.1.tgz#6c40f232996ca6c39977e929e9f79b189e7d87e4" - integrity sha512-xdhEtKSj0gmnkDQbPTIHvcMmXNUDzYpHLEJ5TFqlaI+schi2NI96xhWiZk9QoesAS7oBmKwWWsHazTrYl2ORgg== - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.4.1" - jest-watcher "^23.1.0" - slash "^2.0.0" - string-length "^2.0.0" - strip-ansi "^5.0.0" - -jest-watcher@^23.1.0, jest-watcher@^23.4.0: - version "23.4.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.4.0.tgz#d2e28ce74f8dad6c6afc922b92cabef6ed05c91c" - integrity sha1-0uKM50+NrWxq/JIrksq+9u0FyRw= - dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.1" - string-length "^2.0.0" - -jest-worker@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" - integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk= - dependencies: - merge-stream "^1.0.1" - -jest@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d" - integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw== - dependencies: - import-local "^1.0.0" - jest-cli "^23.6.0" - -jimp@^0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.16.1.tgz#192f851a30e5ca11112a3d0aa53137659a78ca7a" - integrity sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw== - dependencies: - "@babel/runtime" "^7.7.2" - "@jimp/custom" "^0.16.1" - "@jimp/plugins" "^0.16.1" - "@jimp/types" "^0.16.1" - regenerator-runtime "^0.13.3" - -jpeg-js@0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz#8b345b1ae4abde64c2da2fe67ea216a114ac279d" - integrity sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw== - -jquery@*, jquery@^3.5.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.5.1.tgz#d7b4d08e1bfdb86ad2f1a3d039ea17304717abb5" - integrity sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg== - -js-beautify@^1.6.12, js-beautify@^1.6.14: - version "1.11.0" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.11.0.tgz#afb873dc47d58986360093dcb69951e8bcd5ded2" - integrity sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A== - dependencies: - config-chain "^1.1.12" - editorconfig "^0.15.3" - glob "^7.1.3" - mkdirp "~1.0.3" - nopt "^4.0.3" - -js-levenshtein@^1.1.3: - version "1.1.6" - resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" - integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== - -js-message@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/js-message/-/js-message-1.0.5.tgz#2300d24b1af08e89dd095bc1a4c9c9cfcb892d15" - integrity sha1-IwDSSxrwjondCVvBpMnJz8uJLRU= - -js-queue@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/js-queue/-/js-queue-2.0.0.tgz#362213cf860f468f0125fc6c96abc1742531f948" - integrity sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug= - dependencies: - easy-stack "^1.0.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= - -js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.7.0, js-yaml@^3.9.1: - version "3.14.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz#a7a34170f26a21bb162424d8adacb4113a69e482" - integrity sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdom@^11.5.1: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== - dependencies: - abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" - array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" - domexception "^1.0.1" - escodegen "^1.9.1" - html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" - pn "^1.1.0" - request "^2.87.0" - request-promise-native "^1.0.5" - sax "^1.2.4" - symbol-tree "^3.2.2" - tough-cookie "^2.3.4" - w3c-hr-time "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" - xml-name-validator "^3.0.0" - -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" - integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" - integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json3@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - -json5@2.x, json5@^2.1.0, json5@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" - integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== - dependencies: - minimist "^1.2.5" - -json5@^0.5.0, json5@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" - integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jszip@^3.1.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.5.0.tgz#b4fd1f368245346658e781fec9675802489e15f6" - integrity sha512-WRtu7TPCmYePR1nazfrtuF216cIVon/3GWOvHS9QR5bIwSbnxtdpma6un3jyGGNhHsKCSzn5Ypk+EkDRvTGiFA== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - set-immediate-shim "~1.0.1" - -kew@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b" - integrity sha1-edk9LTM2PW/dKXCzNdkUGtWR15s= - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -killable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" - integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk= - optionalDependencies: - graceful-fs "^4.1.9" - -kleur@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-2.0.2.tgz#b704f4944d95e255d038f0cb05fb8a602c55a300" - integrity sha512-77XF9iTllATmG9lSlIv0qdQ2BQ/h9t0bJllHlbvsQ0zUWfU7Yi0S8L5JXzPZgkefIiajLmBJJ4BsMJmqcf7oxQ== - -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - -launch-editor-middleware@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157" - integrity sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg== - dependencies: - launch-editor "^2.2.1" - -launch-editor@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.2.1.tgz#871b5a3ee39d6680fcc26d37930b6eeda89db0ca" - integrity sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw== - dependencies: - chalk "^2.3.0" - shell-quote "^1.6.1" - -lazy-val@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz#882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65" - integrity sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q== - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - -leven@2.1.0, leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -load-bmfont@^1.3.1, load-bmfont@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.1.tgz#c0f5f4711a1e2ccff725a7b6078087ccfcddd3e9" - integrity sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA== - dependencies: - buffer-equal "0.0.1" - mime "^1.3.4" - parse-bmfont-ascii "^1.0.3" - parse-bmfont-binary "^1.0.5" - parse-bmfont-xml "^1.1.4" - phin "^2.9.1" - xhr "^2.0.1" - xtend "^4.0.0" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -loader-fs-cache@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz#f08657646d607078be2f0a032f8bd69dd6f277d9" - integrity sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA== - dependencies: - find-cache-dir "^0.1.1" - mkdirp "^0.5.1" - -loader-runner@^2.3.1, loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= - dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" - -loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.defaultsdeep@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" - integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.has@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862" - integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI= - -lodash.kebabcase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" - integrity sha1-hImxyw0p/4gZXM7KRI/21swpXDY= - -lodash.mapvalues@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" - integrity sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.merge@^4.6.1: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash.throttle@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" - integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ= - -lodash.transform@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.transform/-/lodash.transform-4.6.0.tgz#12306422f63324aed8483d3f38332b5f670547a0" - integrity sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A= - -lodash.unescape@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" - integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash.unset@^4.5.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.unset/-/lodash.unset-4.5.2.tgz#370d1d3e85b72a7e1b0cdf2d272121306f23e4ed" - integrity sha1-Nw0dPoW3Kn4bDN8tJyEhMG8j5O0= - -lodash@^4.17.10: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.3.0, lodash@^4.8.0, lodash@~4.17.10: - version "4.17.19" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" - integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== - -log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -loglevel@^1.6.8: - version "1.6.8" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" - integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2, lru-cache@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= - -make-dir@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-error@1.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -matcher@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" - integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== - dependencies: - escape-string-regexp "^4.0.0" - -material-colors@^1.0.0: - version "1.2.6" - resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" - integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== - -math-random@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" - integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -mdn-data@2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" - integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -meow@^3.1.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge-stream@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" - integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= - dependencies: - readable-stream "^2.0.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -merge@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" - integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^2.3.11: - version "2.3.11" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" - integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= - dependencies: - arr-diff "^2.0.0" - array-unique "^0.2.1" - braces "^1.8.2" - expand-brackets "^0.1.4" - extglob "^0.3.1" - filename-regex "^2.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.1" - kind-of "^3.0.2" - normalize-path "^2.0.1" - object.omit "^2.0.0" - parse-glob "^3.0.4" - regex-cache "^0.4.2" - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - -mime@1.6.0, mime@^1.3.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.0.3, mime@^2.4.4: - version "2.4.6" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" - integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.0.0, mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= - dependencies: - dom-walk "^0.1.0" - -mini-css-extract-plugin@^0.8.0: - version "0.8.2" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz#a875e169beb27c88af77dd962771c9eedc3da161" - integrity sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw== - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minimist@~0.0.1: - version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" - integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= - -mississippi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" - integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^2.0.1" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@0.x, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.1: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mkdirp@^1.0.4, mkdirp@~1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -mri@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.4.tgz#7cb1dd1b9b40905f1fac053abe25b6720f44744a" - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2, ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -multicast-dns-service-types@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" - integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= - -multicast-dns@^6.0.1: - version "6.2.3" - resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" - integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== - dependencies: - dns-packet "^1.3.1" - thunky "^1.0.2" - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -mz@^2.4.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -nan@^2.12.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-abi@^2.21.0: - version "2.30.1" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.30.1.tgz#c437d4b1fe0e285aaf290d45b45d4d7afedac4cf" - integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== - dependencies: - semver "^5.4.1" - -node-addon-api@^1.7.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d" - integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg== - -node-addon-api@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.1.0.tgz#f1722f1f60793584632ffffb79e12ca042c48bd0" - integrity sha512-Zz1o1BDX2VtduiAt6kgiUl8jX1Vm3NMboljFYKQJ6ee8AGfiTvM2mlZFI3xPbqjs80rCQgiVJI/DjQ/1QJ0HwA== - -node-cache@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-4.2.1.tgz#efd8474dee4edec4138cdded580f5516500f7334" - integrity sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A== - dependencies: - clone "2.x" - lodash "^4.17.15" - -node-fetch@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== - -node-forge@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" - integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-ipc@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/node-ipc/-/node-ipc-9.1.1.tgz#4e245ed6938e65100e595ebc5dc34b16e8dd5d69" - integrity sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w== - dependencies: - event-pubsub "4.3.0" - js-message "1.0.5" - js-queue "2.0.0" - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-notifier@^5.2.1: - version "5.4.3" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" - integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - -node-releases@^1.1.58: - version "1.1.59" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.59.tgz#4d648330641cec704bff10f8e4fe28e453ab8e8e" - integrity sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw== - -nopt@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" - integrity sha1-MtDkcvkf80VwHBWoMRAY07CpA3k= - -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-url@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" - integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= - dependencies: - object-assign "^4.0.1" - prepend-http "^1.0.0" - query-string "^4.1.0" - sort-keys "^1.0.0" - -normalize-url@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== - -npm-conf@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" - integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== - dependencies: - config-chain "^1.1.11" - pify "^3.0.0" - -npm-install-package@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/npm-install-package/-/npm-install-package-2.1.0.tgz#d7efe3cfcd7ab00614b896ea53119dc9ab259125" - integrity sha1-1+/jz816sAYUuJbqUxGdyaslkSU= - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^4.0.1, npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@^1.0.2, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -nugget@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0" - integrity sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA= - dependencies: - debug "^2.1.3" - minimist "^1.1.0" - pretty-bytes "^1.0.2" - progress-stream "^1.1.0" - request "^2.45.0" - single-line-log "^1.1.2" - throttleit "0.0.2" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.0.7: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-hash@^1.1.4: - version "1.3.1" - resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df" - integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA== - -object-inspect@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" - integrity sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA== - -object-is@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.2.tgz#c5d2e87ff9e119f78b7a088441519e2eec1573b6" - integrity sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -object.omit@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" - integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= - dependencies: - for-own "^0.1.4" - is-extendable "^0.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -obuf@^1.0.0, obuf@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -omggif@^1.0.10, omggif@^1.0.9: - version "1.0.10" - resolved "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz#ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19" - integrity sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -onetime@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" - integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== - dependencies: - mimic-fn "^2.1.0" - -open@^6.3.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== - dependencies: - is-wsl "^1.1.0" - -opener@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" - integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== - -opn@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" - integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== - dependencies: - is-wsl "^1.1.0" - -optimist@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" - integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= - dependencies: - minimist "~0.0.1" - wordwrap "~0.0.2" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -ora@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" - integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== - dependencies: - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-spinners "^2.0.0" - log-symbols "^2.2.0" - strip-ansi "^5.2.0" - wcwidth "^1.0.1" - -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-finally@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" - integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^1.0.0, p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" - integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-retry@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" - integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== - dependencies: - retry "^0.12.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -pako@^1.0.5, pako@~1.0.2, pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -pako@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d" - integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg== - -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= - dependencies: - no-case "^2.2.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-bmfont-ascii@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285" - integrity sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU= - -parse-bmfont-binary@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006" - integrity sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY= - -parse-bmfont-xml@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz#015319797e3e12f9e739c4d513872cd2fa35f389" - integrity sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ== - dependencies: - xml-parse-from-string "^1.0.0" - xml2js "^0.4.5" - -parse-glob@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" - integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= - dependencies: - glob-base "^0.3.0" - is-dotfile "^1.0.0" - is-extglob "^1.0.0" - is-glob "^2.0.0" - -parse-headers@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" - integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-json@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" - integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - lines-and-columns "^1.1.6" - -parse5-htmlparser2-tree-adapter@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-5.1.1.tgz#e8c743d4e92194d5293ecde2b08be31e67461cbc" - integrity sha512-CF+TKjXqoqyDwHqBhFQ+3l5t83xYi6fVT1tQNg+Ye0JRLnTxWvIroCjEp1A0k4lneHNBGnICUf0cfYVYGEazqw== - dependencies: - parse5 "^5.1.1" - -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== - -parse5@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" - integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== - -parseurl@~1.3.2, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.1, path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.5, path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -phantomjs-prebuilt@^2.1.14: - version "2.1.16" - resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz#efd212a4a3966d3647684ea8ba788549be2aefef" - integrity sha1-79ISpKOWbTZHaE6ouniFSb4q7+8= - dependencies: - es6-promise "^4.0.3" - extract-zip "^1.6.5" - fs-extra "^1.0.0" - hasha "^2.2.0" - kew "^0.7.0" - progress "^1.1.8" - request "^2.81.0" - request-progress "^2.0.1" - which "^1.2.10" - -phin@^2.9.1: - version "2.9.3" - resolved "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz#f9b6ac10a035636fb65dfc576aaaa17b8743125c" - integrity sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA== - -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pixelmatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" - integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= - dependencies: - pngjs "^3.0.0" - -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= - dependencies: - find-up "^1.0.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== - -pn@^1.0.0, pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -pngjs@^3.0.0, pngjs@^3.3.3: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - -pngjs@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-6.0.0.tgz#ca9e5d2aa48db0228a52c419c3308e87720da821" - integrity sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg== - -portfinder@^1.0.16, portfinder@^1.0.20, portfinder@^1.0.26: - version "1.0.27" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.27.tgz#a41333c116b5e5f3d380f9745ac2f35084c4c758" - integrity sha512-bJ3U3MThKnyJ9Dx1Idtm5pQmxXqw08+XOHhi/Lie8OF1OlhVaBFhsntAIhkZYjfDcCzszSr0w1yCbccThhzgxQ== - dependencies: - async "^2.6.2" - debug "^3.1.1" - mkdirp "^0.5.1" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-calc@^7.0.1: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1" - integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-load-config@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" - integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" - -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== - dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-modules-extract-imports@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" - integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw== - dependencies: - postcss "^6.0.1" - -postcss-modules-local-by-default@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" - integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-scope@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" - integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A= - dependencies: - css-selector-tokenizer "^0.7.0" - postcss "^6.0.1" - -postcss-modules-values@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" - integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA= - dependencies: - icss-replace-symbols "^1.1.0" - postcss "^6.0.1" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-selector-parser@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-svgo@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" - integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== - dependencies: - is-svg "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== - -postcss@^6.0.1, postcss@^6.0.23: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.27, postcss@^7.0.32: - version "7.0.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" - integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -prebuild-install@^6.1.4: - version "6.1.4" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-6.1.4.tgz#ae3c0142ad611d58570b89af4986088a4937e00f" - integrity sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ== - dependencies: - detect-libc "^1.0.3" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^2.21.0" - npmlog "^4.0.1" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^3.0.3" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -preserve@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" - integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^1.15.2, prettier@^1.18.2: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== - -pretty-bytes@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84" - integrity sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ= - dependencies: - get-stdin "^4.0.1" - meow "^3.1.0" - -pretty-error@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" - integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= - dependencies: - renderkid "^2.0.1" - utila "~0.4" - -pretty-format@^23.6.0: - version "23.6.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760" - integrity sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw== - dependencies: - ansi-regex "^3.0.0" - ansi-styles "^3.2.0" - -pretty@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pretty/-/pretty-2.0.0.tgz#adbc7960b7bbfe289a557dc5f737619a220d06a5" - integrity sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU= - dependencies: - condense-newlines "^0.2.1" - extend-shallow "^2.0.1" - js-beautify "^1.6.12" - -private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress-stream@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77" - integrity sha1-LNPP6jO6OonJwSHsM0er6asSX3c= - dependencies: - speedometer "~0.1.2" - through2 "~0.2.3" - -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" - integrity sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74= - -progress@^2.0.0, progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - -prompts@^0.1.9: - version "0.1.14" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2" - integrity sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w== - dependencies: - kleur "^2.0.1" - sisteransi "^0.1.1" - -prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= - -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0, pump@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3, pumpify@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -q@^1.1.2, q@~1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -query-string@^4.1.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" - integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= - dependencies: - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" - integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== - -queue-microtask@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" - integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== - -randomatic@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" - integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== - dependencies: - is-number "^4.0.0" - kind-of "^6.0.0" - math-random "^1.0.1" - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@^1.2.1, rc@^1.2.7, rc@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-dom@^16.0.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" - integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" - -react-interactive@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/react-interactive/-/react-interactive-0.8.3.tgz#c3c6c3f99b2e5efc20a9ccc54504cf2c03984d5b" - integrity sha512-mmRvA9aKP7zu9kVfP1AX1egX8tFlnE3DDXq92z0JTZezfOpmeQBzr77O1+mTV54OOmn+M2t6c5kFD5VnuFoM7A== - dependencies: - detect-it "^3.0.3" - object-assign "^4.1.1" - prop-types "^15.6.0" - -react-is@^16.8.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react-router-dom@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6" - integrity sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA== - dependencies: - history "^4.7.2" - invariant "^2.2.4" - loose-envify "^1.3.1" - prop-types "^15.6.1" - react-router "^4.3.1" - warning "^4.0.1" - -react-router@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" - integrity sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg== - dependencies: - history "^4.7.2" - hoist-non-react-statics "^2.5.0" - invariant "^2.2.4" - loose-envify "^1.3.1" - path-to-regexp "^1.7.0" - prop-types "^15.6.1" - warning "^4.0.1" - -react@^16.0.0: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" - integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -read-config-file@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-5.0.0.tgz#1487c983fae9c1b672d3acda5cac899a2d451f02" - integrity sha512-jIKUu+C84bfnKxyJ5j30CxCqgXWYjZLXuVE/NYlMEpeni+dhESgAeZOZd0JZbg1xTkMmnCdxksDoarkOyfEsOg== - dependencies: - dotenv "^8.0.0" - dotenv-expand "^5.1.0" - fs-extra "^8.1.0" - js-yaml "^3.13.1" - json5 "^2.1.0" - lazy-val "^1.0.4" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== - dependencies: - "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.0, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" - integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== - dependencies: - picomatch "^2.2.1" - -realpath-native@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" - integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== - dependencies: - util.promisify "^1.0.0" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" - integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== - -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== - -regenerator-runtime@^0.13.3: - version "0.13.7" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-runtime@^0.13.4: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -regex-cache@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" - integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== - dependencies: - is-equal-shallow "^0.1.3" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -regexpp@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-1.1.0.tgz#0e3516dd0b7904f413d2d4193dce4618c3a689ab" - integrity sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw== - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpp@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== - -regexpu-core@^4.6.0, regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -registry-auth-token@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.0.tgz#1d37dffda72bbecd0f581e4715540213a65eb7da" - integrity sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - -relateurl@0.2.x: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -renderkid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" - integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== - dependencies: - css-select "^1.1.0" - dom-converter "^0.2" - htmlparser2 "^3.3.0" - strip-ansi "^3.0.0" - utila "^0.4.0" - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.5.2, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request-progress@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08" - integrity sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg= - dependencies: - throttleit "^1.0.0" - -request-promise-core@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" - integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== - dependencies: - lodash "^4.17.15" - -request-promise-native@^1.0.5, request-promise-native@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" - integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== - dependencies: - request-promise-core "1.1.3" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.45.0, request@^2.81.0, request@^2.83.0, request@^2.87.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -reselect@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" - integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= - dependencies: - resolve-from "^3.0.0" - -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pathname@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" - integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@1.x, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgb2hex@^0.1.9: - version "0.1.10" - resolved "https://registry.yarnpkg.com/rgb2hex/-/rgb2hex-0.1.10.tgz#4fdd432665273e2d5900434940ceba0a04c8a8a8" - integrity sha512-vKz+kzolWbL3rke/xeTE2+6vHmZnNxGyDnaVW4OckntAIcc7DcZzWkQSfxMDwqHS8vhgySnIFyBUH7lIk6PxvQ== - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@2.6.3, rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -roarr@^2.15.3: - version "2.15.4" - resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" - integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== - dependencies: - boolean "^3.0.1" - detect-node "^2.0.4" - globalthis "^1.0.1" - json-stringify-safe "^5.0.1" - semver-compare "^1.0.0" - sprintf-js "^1.1.2" - -rsvp@^3.3.3: - version "3.6.2" - resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" - integrity sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw== - -run-async@^2.2.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" - integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= - -rxjs@^6.4.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz#af2901eedf02e3a83ffa7f886240ff9018bbec84" - integrity sha512-3HMA8z/Oz61DUHe+SdOiQyzIf4tOx5oQHmMir7IZEu6TMqCLHT4LRcmNaUS0NwOz8VLvmmBduMsoaUvMaIiqzg== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sane@^2.0.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" - integrity sha1-tNwYYcIbQn6SlQej51HiosuKs/o= - dependencies: - anymatch "^2.0.0" - capture-exit "^1.2.0" - exec-sh "^0.2.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.2.3" - -sanitize-filename@^1.6.2: - version "1.6.3" - resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" - integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== - dependencies: - truncate-utf8-bytes "^1.0.0" - -sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.6.5: - version "2.7.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== - dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" - -select-hose@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" - integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= - -selfsigned@^1.10.7: - version "1.10.7" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" - integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== - dependencies: - node-forge "0.9.0" - -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -semver-diff@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" - integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= - dependencies: - semver "^5.0.3" - -"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== - -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.2: - version "7.3.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" - integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serialize-error@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" - integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== - dependencies: - type-fest "^0.13.1" - -serialize-javascript@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== - -serialize-javascript@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" - integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== - dependencies: - randombytes "^2.1.0" - -serve-index@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" - integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= - dependencies: - accepts "~1.3.4" - batch "0.6.1" - debug "2.6.9" - escape-html "~1.0.3" - http-errors "~1.6.2" - mime-types "~2.1.17" - parseurl "~1.3.2" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-immediate-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= - -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -sharp@^0.29.1: - version "0.29.1" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.29.1.tgz#f60b50f24f399464a24187c86bd2da41aae50b85" - integrity sha512-DpgdAny9TuS+oWCQ7MRS8XyY9x6q1+yW3a5wNx0J3HrGuB/Jot/8WcT+lElHY9iJu2pwtegSGxqMaqFiMhs4rQ== - dependencies: - color "^4.0.1" - detect-libc "^1.0.3" - node-addon-api "^4.1.0" - prebuild-install "^6.1.4" - semver "^7.3.5" - simple-get "^3.1.0" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-loader@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/shebang-loader/-/shebang-loader-0.0.1.tgz#a4000495d44cceefbec63435e7b1698569fa52ec" - integrity sha1-pAAEldRMzu++xjQ157FphWn6Uuw= - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -sigmund@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" - integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^3.0.3, simple-get@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" - integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== - dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -single-line-log@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" - integrity sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q= - dependencies: - string-width "^1.0.1" - -sisteransi@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" - integrity sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g== - -slash@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" - integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== - dependencies: - is-fullwidth-code-point "^2.0.0" - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -sockjs-client@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" - integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== - dependencies: - debug "^3.2.5" - eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" - -sockjs@0.3.20: - version "0.3.20" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" - integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== - dependencies: - faye-websocket "^0.10.0" - uuid "^3.4.0" - websocket-driver "0.6.5" - -sort-keys@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" - integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= - dependencies: - is-plain-obj "^1.0.0" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.13, source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -spdy-transport@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" - integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== - dependencies: - debug "^4.1.0" - detect-node "^2.0.4" - hpack.js "^2.1.6" - obuf "^1.1.2" - readable-stream "^3.0.6" - wbuf "^1.7.3" - -spdy@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" - integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== - dependencies: - debug "^4.1.0" - handle-thing "^2.0.0" - http-deceiver "^1.2.7" - select-hose "^2.0.0" - spdy-transport "^3.0.0" - -spectron@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/spectron/-/spectron-7.0.0.tgz#2a16ea2b2fbe6149f5fa9fa1a2be601f5878e00c" - integrity sha512-l6EqXNJLLjbHFr4s2tky0hQU7Ql8UzNsAJm6CiDvX1eGOPiRVJBf2lqZWHGPayZQ7auxdhqAhnHceJJkokDiPQ== - dependencies: - dev-null "^0.1.1" - electron-chromedriver "^5.0.1" - request "^2.87.0" - split "^1.0.0" - webdriverio "^4.13.0" - -speedometer@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" - integrity sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0= - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.1.1.tgz#c51f18f3e06a8c4469aaab487687d8d956160bb6" - integrity sha512-emNzr1s7ruq4N+1993yht631/JH+jaj0NYBosuKmLcq+JkGQ9MmTw1RB1fGaTCzUuseRIClrlSLHRNYGwWQ58Q== - dependencies: - readable-stream "^3.0.0" - -split@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - -sprintf-js@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -ssri@^5.2.4: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" - integrity sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ== - dependencies: - safe-buffer "^5.1.1" - -ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== - dependencies: - figgy-pudding "^3.5.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== - -stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== - -stat-mode@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.3.0.tgz#69283b081f851582b328d2a4ace5f591ce52f54b" - integrity sha512-QjMLR0A3WwFY2aZdV0okfFEJB5TRjkggXZjxP3A1RsWsNHNu3YPv8btmtc6iCFZ0Rul3FE93OYogvhOUClU+ng== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= - -string-length@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" - integrity sha1-1A27aGo6zpYMHP/KVivyxF+DY+0= - dependencies: - astral-regex "^1.0.0" - strip-ansi "^4.0.0" - -string-width@^1.0.1, string-width@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.padend@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" - integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -string.prototype.padstart@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.0.tgz#b47c087540d0710be5a49375751a0a627bd4ff90" - integrity sha512-envqZvUp2JItI+OeQ5UAh1ihbAV5G/2bixTojvlIa090GGqF+NQRxbWb2nv9fTGrZABv6+pE6jXoAZhhS2k4Hw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -string.prototype.trimend@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" - integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string.prototype.trimstart@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" - integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - -string_decoder@^1.0.0, string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@3.0.0, strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-json-comments@^2.0.0, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -sumchecker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e" - integrity sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4= - dependencies: - debug "^2.2.0" - -sumchecker@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" - integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== - dependencies: - debug "^4.1.0" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= - -supports-color@^3.1.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= - dependencies: - has-flag "^1.0.0" - -supports-color@^5.3.0, supports-color@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -supports-color@~5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.0.1.tgz#1c5331f22250c84202805b2f17adf16699f3a39a" - integrity sha512-7FQGOlSQ+AQxBNXJpVDj8efTA/FtyB5wcNE1omXXJ0cq6jm1jjDwuROlYDbnzHqdNPqliWFhcioCWSyav+xBnA== - dependencies: - has-flag "^2.0.0" - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= - -svg2png@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/svg2png/-/svg2png-4.1.1.tgz#6b9e0398aa418778b6436e127a2fb7f00d499c28" - integrity sha1-a54DmKpBh3i2Q24Sei+38A1JnCg= - dependencies: - file-url "^2.0.0" - phantomjs-prebuilt "^2.1.14" - pn "^1.0.0" - yargs "^6.5.0" - -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-tree@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -table@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== - dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" - slice-ansi "1.0.0" - string-width "^2.1.1" - -table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" - integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== - dependencies: - bl "^1.0.0" - buffer-alloc "^1.2.0" - end-of-stream "^1.0.0" - fs-constants "^1.0.0" - readable-stream "^2.3.0" - to-buffer "^1.1.1" - xtend "^4.0.0" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -temp-file@^3.3.4: - version "3.3.7" - resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.7.tgz#686885d635f872748e384e871855958470aeb18a" - integrity sha512-9tBJKt7GZAQt/Rg0QzVWA8Am8c1EFl+CAv04/aBVqlx5oyfQ508sFIABshQ0xbZu6mBrFLWIUXO/bbLYghW70g== - dependencies: - async-exit-hook "^2.0.1" - fs-extra "^8.1.0" - -term-size@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" - integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= - dependencies: - execa "^0.7.0" - -terser-webpack-plugin@^1.1.0, terser-webpack-plugin@^1.2.3, terser-webpack-plugin@^1.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz#2c63544347324baafa9a56baaddf1634c8abfc2f" - integrity sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^3.1.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -test-exclude@^4.2.1: - version "4.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" - integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA== - dependencies: - arrify "^1.0.1" - micromatch "^2.3.11" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" - require-main-filename "^1.0.1" - -text-table@^0.2.0, text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" - integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -thread-loader@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda" - integrity sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg== - dependencies: - loader-runner "^2.3.1" - loader-utils "^1.1.0" - neo-async "^2.6.0" - -"three-orbitcontrols-ts@git+https://git@github.com/nicolaspanel/three-orbitcontrols-ts.git": - version "0.1.2" - resolved "git+https://git@github.com/nicolaspanel/three-orbitcontrols-ts.git#b5b2685a88b880822c62275f2a76bdaa3954f76c" - dependencies: - three "^0.94.0" - -three@*, three@^0.118.3: - version "0.118.3" - resolved "https://registry.yarnpkg.com/three/-/three-0.118.3.tgz#c0bf8c10a68155478f12f4ccac2ff979526a4a0a" - integrity sha512-ijECXrNzDkHieoeh2H69kgawTGH8DiamhR4uBN8jEM7VHSKvfTdEvOoHsA8Aq7dh7PHAxhlqBsN5arBI3KixSw== - -three@^0.94.0: - version "0.94.0" - resolved "https://registry.yarnpkg.com/three/-/three-0.94.0.tgz#4ce6db7f2bfbf79c2d73444aa6e3cfc08a32d762" - integrity sha1-TObbfyv795wtc0RKpuPPwIoy12I= - -throat@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" - integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo= - -throttleit@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" - integrity sha1-z+34jmDADdlpe2H90qg0OptoDq8= - -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= - -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-map/-/through2-map-3.0.0.tgz#a6c3026ce63b4898a997d540506b66ffd970f271" - integrity sha1-psMCbOY7SJipl9VAUGtm/9lw8nE= - dependencies: - through2 "~2.0.0" - xtend "^4.0.0" - -through2@^2.0.0, through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" - integrity sha1-6zKE2k6jEbbMis42U3SKUqvyWj8= - dependencies: - readable-stream "~1.1.9" - xtend "~2.1.1" - -through@2, through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -thunky@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" - integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== - -timers-browserify@^2.0.4: - version "2.0.11" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" - integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== - dependencies: - setimmediate "^1.0.4" - -timm@^1.6.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" - integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -tiny-invariant@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" - integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== - -tiny-warning@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -tinycolor2@^1.1.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8" - integrity sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g= - -tinycolor2@^1.4.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz#3f6a4d1071ad07676d7fa472e1fac40a719d8803" - integrity sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA== - -tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - -to-buffer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" - integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== - -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" - integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -toposort@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= - -tough-cookie@^2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-right@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" - integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= - -truncate-utf8-bytes@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" - integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= - dependencies: - utf8-byte-length "^1.0.1" - -tryer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" - integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== - -ts-jest@^23.0.0: - version "23.10.5" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-23.10.5.tgz#cdb550df4466a30489bf70ba867615799f388dd5" - integrity sha512-MRCs9qnGoyKgFc8adDEntAOP64fWK1vZKnOYU1o2HxaqjdJvGqmkLCPCnVq1/If4zkUmEjKPnCiUisTrlX2p2A== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - json5 "2.x" - make-error "1.x" - mkdirp "0.x" - resolve "1.x" - semver "^5.5" - yargs-parser "10.x" - -ts-loader@^5.3.3: - version "5.4.5" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-5.4.5.tgz#a0c1f034b017a9344cef0961bfd97cc192492b8b" - integrity sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw== - dependencies: - chalk "^2.3.0" - enhanced-resolve "^4.0.0" - loader-utils "^1.0.2" - micromatch "^3.1.4" - semver "^5.0.1" - -tsconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" - integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== - dependencies: - "@types/strip-bom" "^3.0.0" - "@types/strip-json-comments" "0.0.30" - strip-bom "^3.0.0" - strip-json-comments "^2.0.0" - -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" - integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== - -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" - integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== - -tslib@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - -tslint@^5.15.0: - version "5.20.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.20.1.tgz#e401e8aeda0152bc44dd07e614034f3f80c67b7d" - integrity sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^4.0.1" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tsutils@^3.17.1, tsutils@^3.7.0: - version "3.17.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" - integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== - dependencies: - tslib "^1.8.1" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tunnel@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - -type-fest@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" - integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typeface-open-sans@^0.0.75: - version "0.0.75" - resolved "https://registry.yarnpkg.com/typeface-open-sans/-/typeface-open-sans-0.0.75.tgz#20d0c330f14c0c40463c334adbedd6005389abe4" - integrity sha512-0lLmB7pfj113OP4T78SbpSmC4OCdFQ0vUxdSXQccsSb6qF76F92iEuC/DghFgmPswTyidk8+Hwf+PS/htiJoRQ== - -typescript@^3.9.5: - version "3.9.7" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" - integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== - -uglify-js@3.4.x: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" - -uglify-js@^3.1.4: - version "3.10.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.0.tgz#397a7e6e31ce820bfd1cb55b804ee140c587a9e7" - integrity sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA== - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-filename@^1.1.0, unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-string@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" - integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= - dependencies: - crypto-random-string "^1.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -unzip-crx-3@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/unzip-crx-3/-/unzip-crx-3-0.2.0.tgz#d5324147b104a8aed9ae8639c95521f6f7cda292" - integrity sha512-0+JiUq/z7faJ6oifVB5nSwt589v1KCduqIJupNVDoWSXZtWDmjDGO3RAEOvwJ07w90aoXoP4enKsR7ecMrJtWQ== - dependencies: - jszip "^3.1.0" - mkdirp "^0.5.1" - yaku "^0.16.6" - -unzip-crx@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/unzip-crx/-/unzip-crx-0.2.0.tgz#4c0baa8bdac756256754beca7843c13d7b858c18" - integrity sha1-TAuqi9rHViVnVL7KeEPBPXuFjBg= - dependencies: - jszip "^3.1.0" - mkdirp "^0.5.1" - yaku "^0.16.6" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -update-notifier@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-3.0.1.tgz#78ecb68b915e2fd1be9f767f6e298ce87b736250" - integrity sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ== - dependencies: - boxen "^3.0.0" - chalk "^2.0.1" - configstore "^4.0.0" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.1.0" - is-npm "^3.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - semver-diff "^2.0.0" - xdg-basedir "^3.0.0" - -upng-js@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/upng-js/-/upng-js-2.1.0.tgz#7176e73973db361ca95d0fa14f958385db6b9dd2" - integrity sha512-d3xzZzpMP64YkjP5pr8gNyvBt7dLk/uGI67EctzDuVp4lCZyVMo0aJO6l/VDlgbInJYDY6cnClLoBp29eKWI6g== - dependencies: - pako "^1.0.5" - -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-loader@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.2.tgz#b971d191b83af693c5e3fea4064be9e1f2d7f8d8" - integrity sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg== - dependencies: - loader-utils "^1.1.0" - mime "^2.0.3" - schema-utils "^1.0.0" - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -url-parse@^1.4.3: - version "1.4.7" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" - integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@^0.11.0, url@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -utf8-byte-length@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" - integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= - -utif@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz#9e1582d9bbd20011a6588548ed3266298e711759" - integrity sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg== - dependencies: - pako "^1.0.5" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util.promisify@^1.0.0, util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utila@^0.4.0, utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.3.2, uuid@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^8.3.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-equal@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" - integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vue-class-component@^6.3.2: - version "6.3.2" - resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-6.3.2.tgz#e6037e84d1df2af3bde4f455e50ca1b9eec02be6" - integrity sha512-cH208IoM+jgZyEf/g7mnFyofwPDJTM/QvBNhYMjqGB8fCsRyTf68rH2ISw/G20tJv+5mIThQ3upKwoL4jLTr1A== - -vue-class-component@^7.0.2, vue-class-component@^7.1.0: - version "7.2.4" - resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.4.tgz#5c15cef356d7ce793aefef3b23cb5ac0df7ff62d" - integrity sha512-3LMd3yITe6wcHJ5Lyz85MSsNJrUUWeIBKnGO/YUV1ZwH2i4YmrE7t8T8eRLG45aqMlgi/BRFRyfNh3Us7k/v5Q== - -vue-cli-plugin-electron-builder@^1.4.0: - version "1.4.6" - resolved "https://registry.yarnpkg.com/vue-cli-plugin-electron-builder/-/vue-cli-plugin-electron-builder-1.4.6.tgz#5de519edc158c80ae72a67e8ae8ae983e38ecb7a" - integrity sha512-nHTkvhBdyyFQaJZaoAfGHf7JxxCGe8TTEthA+wXhA68cuuHLow5vX0EieApgaOXoYa0a3vkD/oWvEJXqToXrZA== - dependencies: - chokidar "^3.0.2" - electron-builder "^21.2.0" - execa "^1.0.0" - friendly-errors-webpack-plugin "^1.7.0" - fs-extra "^8.1.0" - lodash.merge "^4.6.1" - portfinder "^1.0.16" - pumpify "^1.5.1" - semver "^6.0.0" - shebang-loader "^0.0.1" - spectron "^7.0.0" - split2 "^3.0.0" - terser-webpack-plugin "^1.1.0" - through2-filter "^3.0.0" - through2-map "^3.0.0" - unzip-crx "^0.2.0" - webpack "^4.18.0" - webpack-chain "^5.0.0" - yargs "^14.0.0" - -vue-color@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/vue-color/-/vue-color-2.7.1.tgz#ca035109ea0010f0d60b889b97d63d37ac712f2d" - integrity sha512-u3yl46B2eEej9zfAOIRRSphX1QfeNQzMwO82EIA+aoi0AKX3o1KcfsmMzm4BFkkj2ukCxLVfQ41k7g1gSI7SlA== - dependencies: - clamp "^1.0.1" - lodash.throttle "^4.0.0" - material-colors "^1.0.0" - tinycolor2 "^1.1.2" - -vue-eslint-parser@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz#c268c96c6d94cfe3d938a5f7593959b0ca3360d1" - integrity sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw== - dependencies: - debug "^3.1.0" - eslint-scope "^3.7.1" - eslint-visitor-keys "^1.0.0" - espree "^3.5.2" - esquery "^1.0.0" - lodash "^4.17.4" - -vue-eslint-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz#00f4e4da94ec974b821a26ff0ed0f7a78402b8a1" - integrity sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g== - dependencies: - debug "^4.1.0" - eslint-scope "^4.0.0" - eslint-visitor-keys "^1.0.0" - espree "^4.1.0" - esquery "^1.0.1" - lodash "^4.17.11" - -vue-final-modal@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/vue-final-modal/-/vue-final-modal-2.4.1.tgz#7c3776295fecbd456e4f83de921379f1d980590a" - integrity sha512-tvkPaf94wzoANjNFNP8b40bXuCAk28jg0OkhRKL3oQ9VTTwhlX25gnWG5d2qyxLfnE2237E8ngwF3KNPf/bhrw== - -vue-golden-layout@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/vue-golden-layout/-/vue-golden-layout-1.6.0.tgz#6a489cb2ff3e4fa1ac302036283f5af870defe6a" - integrity sha512-jBYMpynStb8srqivUepx3VYZUxvTvxeHbnQnprKwLGSkF5hWrfT3IhyQhXoKuFTTVdB/ghdDv8cdw2M6+qf+FA== - dependencies: - golden-layout "^1.5.9" - vue-class-component "^6.3.2" - vue-resize-directive "^1.1.4" - vue-storage-decorator "^1.0.6" - -vue-hot-reload-api@^2.3.0: - version "2.3.4" - resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2" - integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog== - -vue-jest@^3.0.4: - version "3.0.6" - resolved "https://registry.yarnpkg.com/vue-jest/-/vue-jest-3.0.6.tgz#27f79d75dcddbe6b3d8327ca1450a107b9cd6f38" - integrity sha512-VyuM8wR0vAlYCbPRY+PhIqRU5yUyBnUmwYTo4IFScs2+tiuis5VBItU0PGC8Wcx6qJwKB5jq5p7WFhabzMFMgQ== - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.26.0" - chalk "^2.1.0" - deasync "^0.1.15" - extract-from-css "^0.4.4" - find-babel-config "^1.1.0" - js-beautify "^1.6.14" - node-cache "^4.1.1" - object-assign "^4.1.1" - source-map "^0.5.6" - tsconfig "^7.0.0" - vue-template-es2015-compiler "^1.6.0" - -vue-loader@^15.7.0: - version "15.9.3" - resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.9.3.tgz#0de35d9e555d3ed53969516cac5ce25531299dda" - integrity sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA== - dependencies: - "@vue/component-compiler-utils" "^3.1.0" - hash-sum "^1.0.2" - loader-utils "^1.1.0" - vue-hot-reload-api "^2.3.0" - vue-style-loader "^4.1.0" - -vue-property-decorator@^8.1.0: - version "8.5.1" - resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-8.5.1.tgz#571a91cf8d2b507f537d79bf8275af3184572fff" - integrity sha512-O6OUN2OMsYTGPvgFtXeBU3jPnX5ffQ9V4I1WfxFQ6dqz6cOUbR3Usou7kgFpfiXDvV7dJQSFcJ5yUPgOtPPm1Q== - dependencies: - vue-class-component "^7.1.0" - -vue-resize-directive@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vue-resize-directive/-/vue-resize-directive-1.2.0.tgz#4214ca8a80a425529b036ea868cad54a38f613e4" - integrity sha512-LmpFexQcl1XYyz3DQrTrq3Efgj50MKEON60nR9MMAq1D2ZtXFg1WDcy1wy1T0SeduNtIu9hos2aLTsJUplvjlQ== - dependencies: - css-element-queries "^1.0.2" - intersection-observer "^0.5.0" - lodash.debounce "^4.0.8" - -vue-router@^3.0.3: - version "3.3.4" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.3.4.tgz#4e38abc34a11c41b6c3d8244449a2e363ba6250b" - integrity sha512-SdKRBeoXUjaZ9R/8AyxsdTqkOfMcI5tWxPZOUX5Ie1BTL5rPSZ0O++pbiZCeYeythiZIdLEfkDiQPKIaWk5hDg== - -vue-storage-decorator@^1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/vue-storage-decorator/-/vue-storage-decorator-1.0.7.tgz#857e909cf7c593d6b9a8ae3fde20cd1f6eb2775d" - integrity sha512-ZXW84gGb3lLcW6U7KJhdua966IVZeXswOI/8yJW3/JAJD0v2irxwMDdFR1V5+tZMbsGkvdIZIvQ7wLKpXxAuUw== - -vue-style-loader@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" - integrity sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ== - dependencies: - hash-sum "^1.0.2" - loader-utils "^1.0.2" - -vue-template-compiler@^2.6.10: - version "2.6.11" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080" - integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA== - dependencies: - de-indent "^1.0.2" - he "^1.1.0" - -vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825" - integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw== - -vue-toast-notification@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/vue-toast-notification/-/vue-toast-notification-0.6.2.tgz#44bb164505c310f6a721ff96921761b006ebb5cc" - integrity sha512-fIsgALA3yQAtTnZjyUg5Y1tbVrYkLNBCET/ZvvDTS7tnmaWz8L1IzkESrRs1KIiqIGRVbBbiZAzUImrVBEziDA== - -vue@^2.6.10: - version "2.6.11" - resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5" - integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ== - -vuex@^3.0.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d" - integrity sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw== - -w3c-hr-time@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -walker@~1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= - dependencies: - makeerror "1.0.x" - -warning@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" - integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY= - dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" - -watchpack-chokidar2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" - integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" - integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.0" - watchpack-chokidar2 "^2.0.0" - -wbuf@^1.1.0, wbuf@^1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" - integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== - dependencies: - minimalistic-assert "^1.0.0" - -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= - dependencies: - defaults "^1.0.3" - -wdio-dot-reporter@~0.0.8: - version "0.0.10" - resolved "https://registry.yarnpkg.com/wdio-dot-reporter/-/wdio-dot-reporter-0.0.10.tgz#facfb7c9c5984149951f59cbc3cd0752101cf0e0" - integrity sha512-A0TCk2JdZEn3M1DSG9YYbNRcGdx/YRw19lTiRpgwzH4qqWkO/oRDZRmi3Snn4L2j54KKTfPalBhlOtc8fojVgg== - -webdriverio@^4.13.0: - version "4.14.4" - resolved "https://registry.yarnpkg.com/webdriverio/-/webdriverio-4.14.4.tgz#f7a94e9a6530819796088f42b009833d83de0386" - integrity sha512-Knp2vzuzP5c5ybgLu+zTwy/l1Gh0bRP4zAr8NWcrStbuomm9Krn9oRF0rZucT6AyORpXinETzmeowFwIoo7mNA== - dependencies: - archiver "~2.1.0" - babel-runtime "^6.26.0" - css-parse "^2.0.0" - css-value "~0.0.1" - deepmerge "~2.0.1" - ejs "~2.5.6" - gaze "~1.1.2" - glob "~7.1.1" - grapheme-splitter "^1.0.2" - inquirer "~3.3.0" - json-stringify-safe "~5.0.1" - mkdirp "~0.5.1" - npm-install-package "~2.1.0" - optimist "~0.6.1" - q "~1.5.0" - request "^2.83.0" - rgb2hex "^0.1.9" - safe-buffer "~5.1.1" - supports-color "~5.0.0" - url "~0.11.0" - wdio-dot-reporter "~0.0.8" - wgxpath "~1.0.0" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -webpack-bundle-analyzer@^3.3.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.8.0.tgz#ce6b3f908daf069fd1f7266f692cbb3bded9ba16" - integrity sha512-PODQhAYVEourCcOuU+NiYI7WdR8QyELZGgPvB1y2tjbUpbmcQOt5Q7jEK+ttd5se0KSBKD9SXHCEozS++Wllmw== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - bfj "^6.1.1" - chalk "^2.4.1" - commander "^2.18.0" - ejs "^2.6.1" - express "^4.16.3" - filesize "^3.6.1" - gzip-size "^5.0.0" - lodash "^4.17.15" - mkdirp "^0.5.1" - opener "^1.5.1" - ws "^6.0.0" - -webpack-chain@^4.11.0: - version "4.12.1" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.12.1.tgz#6c8439bbb2ab550952d60e1ea9319141906c02a6" - integrity sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^1.6.0" - -webpack-chain@^5.0.0: - version "5.2.4" - resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-5.2.4.tgz#cc3665a296a6edcda738324599103ac6e215dda3" - integrity sha512-3g0uIbzM/EWnmf52bYhB5IZeBZiw5g9vNqF4iTBEqabpxGxcv+Aj9oL4Cvr19ujOsv/HPvpRFRPLZ/aylv10Wg== - dependencies: - deepmerge "^1.5.2" - javascript-stringify "^2.0.0" - -webpack-dev-middleware@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" - integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-dev-server@^3.4.1: - version "3.11.0" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" - integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== - dependencies: - ansi-html "0.0.7" - bonjour "^3.5.0" - chokidar "^2.1.8" - compression "^1.7.4" - connect-history-api-fallback "^1.6.0" - debug "^4.1.1" - del "^4.1.1" - express "^4.17.1" - html-entities "^1.3.1" - http-proxy-middleware "0.19.1" - import-local "^2.0.0" - internal-ip "^4.3.0" - ip "^1.1.5" - is-absolute-url "^3.0.3" - killable "^1.0.1" - loglevel "^1.6.8" - opn "^5.5.0" - p-retry "^3.0.1" - portfinder "^1.0.26" - schema-utils "^1.0.0" - selfsigned "^1.10.7" - semver "^6.3.0" - serve-index "^1.9.1" - sockjs "0.3.20" - sockjs-client "1.4.0" - spdy "^4.0.2" - strip-ansi "^3.0.1" - supports-color "^6.1.0" - url "^0.11.0" - webpack-dev-middleware "^3.7.2" - webpack-log "^2.0.0" - ws "^6.2.1" - yargs "^13.3.2" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-merge@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" - integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== - dependencies: - lodash "^4.17.15" - -webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.0.0, webpack@^4.18.0: - version "4.43.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" - integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.6.1" - webpack-sources "^1.4.1" - -websocket-driver@0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" - integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= - dependencies: - websocket-extensions ">=0.1.1" - -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - -wgxpath@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wgxpath/-/wgxpath-1.0.0.tgz#eef8a4b9d558cc495ad3a9a2b751597ecd9af690" - integrity sha1-7vikudVYzEla06mit1FZfs2a9pA= - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -widest-line@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" - integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== - dependencies: - string-width "^2.1.1" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.0.0, write-file-atomic@^2.1.0: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write-file-atomic@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= - dependencies: - mkdirp "^0.5.1" - -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== - dependencies: - async-limiter "~1.0.0" - -ws@^6.0.0, ws@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" - -xdg-basedir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" - integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= - -xhr@^2.0.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xml-parse-from-string@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" - integrity sha1-qQKekp09vN7RafPG4oI42VpdWig= - -xml2js@^0.4.5: - version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - -xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= - dependencies: - object-keys "~0.4.0" - -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -yaku@^0.16.6: - version "0.16.7" - resolved "https://registry.yarnpkg.com/yaku/-/yaku-0.16.7.tgz#1d195c78aa9b5bf8479c895b9504fd4f0847984e" - integrity sha1-HRlceKqbW/hHnIlblQT9TwhHmE4= - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@10.x: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^15.0.1: - version "15.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz#54786af40b820dcb2fb8025b11b4d659d76323b3" - integrity sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" - integrity sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw= - dependencies: - camelcase "^3.0.0" - -yargs-parser@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" - integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= - dependencies: - camelcase "^4.1.0" - -yargs@^11.0.0: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" - integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== - dependencies: - cliui "^4.0.0" - decamelize "^1.1.1" - find-up "^2.1.0" - get-caller-file "^1.0.1" - os-locale "^3.1.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^9.0.2" - -yargs@^13.3.0, yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@^14.0.0: - version "14.2.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz#1a1c3edced1afb2a2fea33604bc6d1d8d688a414" - integrity sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg== - dependencies: - cliui "^5.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^15.0.1" - -yargs@^15.0.0: - version "15.4.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^6.5.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" - integrity sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg= - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^4.2.0" - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -yorkie@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yorkie/-/yorkie-2.0.0.tgz#92411912d435214e12c51c2ae1093e54b6bb83d9" - integrity sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw== - dependencies: - execa "^0.8.0" - is-ci "^1.0.10" - normalize-path "^1.0.0" - strip-indent "^2.0.0" - -zip-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-1.2.0.tgz#a8bc45f4c1b49699c6b90198baacaacdbcd4ba04" - integrity sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ= - dependencies: - archiver-utils "^1.3.0" - compress-commons "^1.2.0" - lodash "^4.8.0" - readable-stream "^2.0.0" From 2211298637fc1e49c1a97212f57853996098b03e Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 2 Sep 2022 22:32:01 -0400 Subject: [PATCH 002/100] update gitignore to target cmake files and folders --- .gitignore | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/.gitignore b/.gitignore index 025b65c7..6c8746dc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,25 +1,13 @@ -.DS_Store -node_modules -/dist - -# local env files -.env.local -.env.*.local - -# Log files -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Editor directories and files -.idea -.vscode -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? - -#Electron-builder output -/dist_electron -/build/icons \ No newline at end of file +CMakeLists.txt.user +CMakeCache.txt +CMakeFiles +CMakeScripts +Testing +Makefile +cmake_install.cmake +install_manifest.txt +compile_commands.json +CTestTestfile.cmake +_deps + +build/ \ No newline at end of file From 6feef88862c36cb1c03c2782d653682cd40433a6 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 2 Sep 2022 23:05:00 -0400 Subject: [PATCH 003/100] initial qt setup --- CMakeLists.txt | 7 +++++ src/texturelab/CMakeLists.txt | 56 +++++++++++++++++++++++++++++++++++ src/texturelab/assets.qrc | 4 +++ src/texturelab/main.cpp | 14 +++++++++ src/texturelab/mainwindow.cpp | 12 ++++++++ src/texturelab/mainwindow.h | 17 +++++++++++ 6 files changed, 110 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 src/texturelab/CMakeLists.txt create mode 100644 src/texturelab/assets.qrc create mode 100644 src/texturelab/main.cpp create mode 100644 src/texturelab/mainwindow.cpp create mode 100644 src/texturelab/mainwindow.h diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..1c9bd99a --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.5) + +project(qtcompleteapp VERSION 0.1 LANGUAGES CXX) + +# Main App +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/texturelab) + diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt new file mode 100644 index 00000000..a7db21c6 --- /dev/null +++ b/src/texturelab/CMakeLists.txt @@ -0,0 +1,56 @@ +cmake_minimum_required(VERSION 3.5) + +project(texturelab VERSION 0.4.0 LANGUAGES CXX) + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(CMAKE_AUTOUIC ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTORCC ON) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) + +set(PROJECT_SOURCES + ./main.cpp + ./mainwindow.cpp + ./mainwindow.h +) + +set(PROJECT_RESOURCES + ./assets.qrc) + +if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) + qt_add_executable(texturelab + MANUAL_FINALIZATION + ${PROJECT_SOURCES} + ${PROJECT_RESOURCES} + ) +else() + add_executable(texturelab + ${PROJECT_SOURCES} + ${PROJECT_RESOURCES} + ) +endif() + +target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) + +set_target_properties(texturelab PROPERTIES + MACOSX_BUNDLE_GUI_IDENTIFIER io.texturelab.app + MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} + MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} + MACOSX_BUNDLE TRUE + WIN32_EXECUTABLE TRUE +) + + +install(TARGETS texturelab + BUNDLE DESTINATION . + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + +if(QT_VERSION_MAJOR EQUAL 6) + qt_finalize_executable(texturelab) +endif() diff --git a/src/texturelab/assets.qrc b/src/texturelab/assets.qrc new file mode 100644 index 00000000..71fe652e --- /dev/null +++ b/src/texturelab/assets.qrc @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/texturelab/main.cpp b/src/texturelab/main.cpp new file mode 100644 index 00000000..1b1426aa --- /dev/null +++ b/src/texturelab/main.cpp @@ -0,0 +1,14 @@ +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + + w.show(); + w.showMaximized(); + + return a.exec(); +} diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp new file mode 100644 index 00000000..36ac45a6 --- /dev/null +++ b/src/texturelab/mainwindow.cpp @@ -0,0 +1,12 @@ +#include "mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + + resize(1280, 720); +} + +MainWindow::~MainWindow() +{ +} \ No newline at end of file diff --git a/src/texturelab/mainwindow.h b/src/texturelab/mainwindow.h new file mode 100644 index 00000000..ca1cd808 --- /dev/null +++ b/src/texturelab/mainwindow.h @@ -0,0 +1,17 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + +protected: +}; +#endif // MAINWINDOW_H From f10c857b549cacf69fef2fdd50d7ccdba18cccfd Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 2 Sep 2022 23:13:34 -0400 Subject: [PATCH 004/100] add ads submodule --- .gitmodules | 3 +++ src/ads | 1 + 2 files changed, 4 insertions(+) create mode 160000 src/ads diff --git a/.gitmodules b/.gitmodules index ee94bc5e..eb6f2ac9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "public/assets"] path = public/assets url = https://github.com/njbrown/texturelabdata.git +[submodule "src/ads"] + path = src/ads + url = https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git diff --git a/src/ads b/src/ads new file mode 160000 index 00000000..efd88565 --- /dev/null +++ b/src/ads @@ -0,0 +1 @@ +Subproject commit efd88565a9db513054a1795dd6bf756fc95989c3 From d5a7024708021eb2b1e8ef3aa33b1104f29c2bf8 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 3 Sep 2022 00:07:18 -0400 Subject: [PATCH 005/100] setup docks --- CMakeLists.txt | 4 +++ src/texturelab/CMakeLists.txt | 5 ++- src/texturelab/mainwindow.cpp | 65 ++++++++++++++++++++++++++++++++++- src/texturelab/mainwindow.h | 8 +++++ 4 files changed, 80 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c9bd99a..4fb295e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,10 @@ cmake_minimum_required(VERSION 3.5) project(qtcompleteapp VERSION 0.1 LANGUAGES CXX) +# Advanced Docking System +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/ads) +set_target_properties(qtadvanceddocking PROPERTIES BUILD_STATIC TRUE) + # Main App add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/texturelab) diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index a7db21c6..264d64ff 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -36,7 +36,10 @@ else() ) endif() -target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) +target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets qtadvanceddocking) +target_include_directories(texturelab PUBLIC + ../ads/src + ) set_target_properties(texturelab PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER io.texturelab.app diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 36ac45a6..e2fd2fc2 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -1,10 +1,73 @@ #include "mainwindow.h" +#include + +#include "DockSplitter.h" +#include "DockAreaWidget.h" + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { - resize(1280, 720); + + // this->setupMenus(); + + this->dockManager = new ads::CDockManager(this); + + this->setupDocks(); +} + +/* + https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/411 + https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/340 + + pass ratios as fractions, the function handles the actual width calculation + setWidgetRatiosInArea(myArea, { 1.0f/5.0f, 1.0f/5.0f, 1.0f/5.0f }) +*/ +void setWidgetRatiosInArea(ads::CDockAreaWidget *area, const QList &ratios) +{ + auto splitter = ads::internal::findParent(area); + if (splitter) + { + int width = splitter->width(); + + QList finalRatios; + for (auto ratio : ratios) + { + finalRatios.append(ratio * width); + } + splitter->setSizes(finalRatios); + } +} + +void MainWindow::setupDocks() +{ + setDockNestingEnabled(true); + + // https://forum.qt.io/topic/3055/mainwindow-layout-problem-with-qdockwidget/17 + + // graph goes in the center + auto graphArea = addDock("Graph", ads::CenterDockWidgetArea, new QWidget(this), nullptr); + auto leftArea = addDock("2D View", ads::LeftDockWidgetArea, new QWidget(this), graphArea); + auto rightArea = addDock("Properties", ads::RightDockWidgetArea, new QWidget(this), graphArea); + + setWidgetRatiosInArea(graphArea, {1.0f / 5, 3.0f / 5, 1.0f / 5}); + + addDock("3D View", ads::BottomDockWidgetArea, new QWidget(this), leftArea); + addDock("Library", ads::BottomDockWidgetArea, new QWidget(this), rightArea); + setWidgetRatiosInArea(leftArea, {0.5f, 0.5f}); + setWidgetRatiosInArea(rightArea, {0.5f, 0.5f}); +} + +ads::CDockAreaWidget *MainWindow::addDock(const QString &title, ads::DockWidgetArea area, QWidget *widget, ads::CDockAreaWidget *areaWidget) +{ + ads::CDockWidget *dockWidget = new ads::CDockWidget(title); + if (widget != nullptr) + dockWidget->setWidget(widget); + + auto newAreaWidget = dockManager->addDockWidget(area, dockWidget, areaWidget); + + return newAreaWidget; } MainWindow::~MainWindow() diff --git a/src/texturelab/mainwindow.h b/src/texturelab/mainwindow.h index ca1cd808..2f2306d6 100644 --- a/src/texturelab/mainwindow.h +++ b/src/texturelab/mainwindow.h @@ -3,6 +3,7 @@ #include #include +#include "DockManager.h" class MainWindow : public QMainWindow { @@ -13,5 +14,12 @@ class MainWindow : public QMainWindow ~MainWindow(); protected: + void setupMenus(); + void setupDocks(); + + ads::CDockAreaWidget *addDock(const QString &title, ads::DockWidgetArea area, QWidget *widget, ads::CDockAreaWidget *areaWidget); + +private: + ads::CDockManager *dockManager; }; #endif // MAINWINDOW_H From 73ce04ed2e7d7c739dfa3e059114d4b94906b387 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 3 Sep 2022 00:57:17 -0400 Subject: [PATCH 006/100] add toolbar --- src/texturelab/mainwindow.cpp | 31 ++++++++++++++++++++++++++++++- src/texturelab/mainwindow.h | 4 ++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index e2fd2fc2..46911fd9 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -1,6 +1,8 @@ #include "mainwindow.h" #include +#include +#include #include "DockSplitter.h" #include "DockAreaWidget.h" @@ -10,13 +12,40 @@ MainWindow::MainWindow(QWidget *parent) { resize(1280, 720); - // this->setupMenus(); + this->setupToolbar(); + // // this->setupMenus(); + // editor = new QWidget(this); + // this->setCentralWidget(editor); + // this->layout()->addWidget(editor); + // editor->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); this->dockManager = new ads::CDockManager(this); this->setupDocks(); } +void MainWindow::setupToolbar() +{ + // https://www.setnode.com/blog/right-aligning-a-button-in-a-qtoolbar/ + toolBar = this->addToolBar("main toolbar"); + + QWidget *spacer = new QWidget(); + spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + + // undo redo + toolBar->addAction("Undo"); + toolBar->addAction("Redo"); + + // spacer + toolBar->addWidget(spacer); + + // export + toolBar->addAction("Export"); + + // behavior + toolBar->setMovable(false); +} + /* https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/411 https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/340 diff --git a/src/texturelab/mainwindow.h b/src/texturelab/mainwindow.h index 2f2306d6..13f062db 100644 --- a/src/texturelab/mainwindow.h +++ b/src/texturelab/mainwindow.h @@ -5,6 +5,7 @@ #include #include "DockManager.h" +class QToolBar; class MainWindow : public QMainWindow { Q_OBJECT @@ -14,6 +15,7 @@ class MainWindow : public QMainWindow ~MainWindow(); protected: + void setupToolbar(); void setupMenus(); void setupDocks(); @@ -21,5 +23,7 @@ class MainWindow : public QMainWindow private: ads::CDockManager *dockManager; + QToolBar *toolBar; + QWidget* editor; }; #endif // MAINWINDOW_H From 1a03050f54912bf49d28a5f6f1d7aa39bb9fba31 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 3 Sep 2022 20:41:15 -0400 Subject: [PATCH 007/100] add basic models and props --- src/texturelab/CMakeLists.txt | 3 + src/texturelab/mainwindow.cpp | 32 +++- src/texturelab/models.h | 71 ++++++++ src/texturelab/props.cpp | 50 ++++++ src/texturelab/props.h | 312 ++++++++++++++++++++++++++++++++++ 5 files changed, 463 insertions(+), 5 deletions(-) create mode 100644 src/texturelab/models.h create mode 100644 src/texturelab/props.cpp create mode 100644 src/texturelab/props.h diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index 264d64ff..6835e64d 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -18,6 +18,9 @@ set(PROJECT_SOURCES ./main.cpp ./mainwindow.cpp ./mainwindow.h + ./models.h + ./props.h + ./props.cpp ) set(PROJECT_RESOURCES diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 46911fd9..7dc618c7 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include "DockSplitter.h" #include "DockAreaWidget.h" @@ -12,18 +14,38 @@ MainWindow::MainWindow(QWidget *parent) { resize(1280, 720); + this->setupMenus(); this->setupToolbar(); - // // this->setupMenus(); - // editor = new QWidget(this); - // this->setCentralWidget(editor); - // this->layout()->addWidget(editor); - // editor->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); this->dockManager = new ads::CDockManager(this); this->setupDocks(); } +void MainWindow::setupMenus() +{ + auto fileMenu = this->menuBar()->addMenu("File"); + fileMenu->addAction("Open Project", []() {}); + fileMenu->addAction("New Project", []() {}); + fileMenu->addSeparator(); + fileMenu->addAction("Save", []() {}); + fileMenu->addAction("Save As...", []() {}); + fileMenu->addSeparator(); + fileMenu->addAction("Edit", []() {}); + + auto editMenu = this->menuBar()->addMenu("Edit"); + editMenu->addAction("Undo", []() {}); + editMenu->addAction("Redo", []() {}); + editMenu->addAction("Cut", []() {}); + editMenu->addAction("Copy", []() {}); + editMenu->addAction("Paste", []() {}); + + auto examplesMenu = this->menuBar()->addMenu("Examples"); + auto optionsMenu = this->menuBar()->addMenu("Help"); + optionsMenu->addAction("Documentation", []() {}); + optionsMenu->addAction("About", []() {}); +} + void MainWindow::setupToolbar() { // https://www.setnode.com/blog/right-aligning-a-button-in-a-qtoolbar/ diff --git a/src/texturelab/models.h b/src/texturelab/models.h new file mode 100644 index 00000000..fefd6c23 --- /dev/null +++ b/src/texturelab/models.h @@ -0,0 +1,71 @@ +#ifndef MODELS_H +#define MODELS_H + +#include +#include +#include +#include + +class Project +{ +public: +}; + +enum class PackageFileType +{ + Texture, + Image +}; + +class ProjectFile +{ +public: + QByteArray contents(); +}; + +class Texture +{ +public: + int randomSeed; + + QMap nodes; + QMap connections; + QMap comments; + QMap frames; +}; + +class TextureNode +{ +public: + QString id; + QVector2D pos; +}; + +class Comment +{ +public: + QString id; + QString text; + QVector2D pos; +}; + +class Frame +{ +public: + QString id; + QString text; + + QVector2D pos; + QVector2D size; +}; + +class Connection +{ +public: + QString id; + + QString leftItemId; + QString rightItemId; +}; + +#endif \ No newline at end of file diff --git a/src/texturelab/props.cpp b/src/texturelab/props.cpp new file mode 100644 index 00000000..e261d69e --- /dev/null +++ b/src/texturelab/props.cpp @@ -0,0 +1,50 @@ +#include "props.h" + +#include + +QString PropType::toString(Value propType) +{ + switch (propType) + { + case Float: + return "float"; + case Int: + return "int"; + case Bool: + return "bool"; + case Color: + return "color"; + case Enum: + return "enum"; + case String: + return "string"; + case Gradient: + return "gradient"; + case Image: + return "image"; + } + + return "unknown"; +} + +PropType::Value PropType::fromString(QString propType) +{ + if (propType == "float") + return Float; + if (propType == "int") + return Int; + if (propType == "bool") + return Bool; + if (propType == "color") + return Color; + if (propType == "enum") + return Enum; + if (propType == "string") + return String; + if (propType == "gradient") + return Gradient; + if (propType == "image") + return Image; + + return Unknown; +} \ No newline at end of file diff --git a/src/texturelab/props.h b/src/texturelab/props.h new file mode 100644 index 00000000..ce4abb41 --- /dev/null +++ b/src/texturelab/props.h @@ -0,0 +1,312 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +class Prop; + +// http://techiesolves.blogspot.com/2018/01/base64-qstring-to-qimage-to-qstring-in.html +QString createGuid() +{ + return QUuid::createUuid().toString(QUuid::WithoutBraces); +} + +class PropType +{ +public: + enum Value + { + Unknown = -1, + Float = 0, + Int, + Bool, + Color, + Enum, + String, + Gradient, + Image + }; + + static QString toString(Value propType); + + static Value fromString(QString propType); +}; + +class PropertyGroup +{ +public: + QString name; + QList props; +}; + +class Prop +{ +public: + QString id; + QString name; + QString displayName; + PropType::Value type; + + Prop(); + + virtual QVariant getValue() = 0; + virtual void setValue(QVariant val) = 0; + + virtual QJsonObject toJson(); + virtual void fromJson(const QJsonObject &obj); +}; + +class FloatProp : public Prop +{ +public: + double value; + double minValue; + double maxValue; + double step; + + FloatProp() + { + value = 0; + minValue = 0; + maxValue = 1; + step = 0.1; + type = PropType::Float; + } + + QVariant getValue() + { + return QVariant::fromValue(value); + } + + void setValue(QVariant val) + { + value = val.toDouble(); + } + + QJsonObject toJson() override + { + auto obj = Prop::toJson(); + obj["value"] = value; + obj["minValue"] = minValue; + obj["maxValue"] = maxValue; + obj["step"] = step; + return obj; + } + + void fromJson(const QJsonObject &obj) override + { + value = obj["value"].toDouble(); + minValue = obj["minValue"].toDouble(); + maxValue = obj["maxValue"].toDouble(); + step = obj["step"].toDouble(); + } +}; + +class IntProp : public Prop +{ +public: + long value; + long minValue; + long maxValue; + long step; + + IntProp() + { + value = 0; + minValue = 0; + maxValue = 100; + step = 1; + type = PropType::Int; + } + + QVariant getValue() + { + return QVariant::fromValue(value); + } + + void setValue(QVariant val) + { + value = (long)val.toLongLong(); + } + + QJsonObject toJson() override + { + auto obj = Prop::toJson(); + obj["value"] = (qlonglong)value; + obj["minValue"] = (qlonglong)minValue; + obj["maxValue"] = (qlonglong)maxValue; + obj["step"] = (qlonglong)step; + return obj; + } + + void fromJson(const QJsonObject &obj) override + { + value = obj["value"].toDouble(); + minValue = obj["minValue"].toDouble(); + maxValue = obj["maxValue"].toDouble(); + step = obj["step"].toDouble(); + } +}; + +class BoolProp : public Prop +{ +public: + bool value; + + BoolProp() + { + type = PropType::Bool; + value = false; + } + + QVariant getValue() + { + return value; + } + + void setValue(QVariant val) + { + value = val.toBool(); + } + + QJsonObject toJson() override + { + auto obj = Prop::toJson(); + obj["value"] = value ? "true" : "false"; + return obj; + } + + void fromJson(const QJsonObject &obj) override + { + value = obj["value"].toBool(); + } +}; + +class EnumProp : public Prop +{ +public: + QList values; + int index; + + EnumProp() + { + type = PropType::Color; + } + + QVariant getValue() + { + return index; + } + + void setValue(QVariant val) + { + index = val.value(); + } + + QJsonObject toJson() override + { + auto obj = Prop::toJson(); + obj["index"] = index; + + // values + QJsonArray valueList; + for (auto enumValue : values) + { + valueList.append(enumValue); + } + obj["values"] = valueList; + + return obj; + } + + void fromJson(const QJsonObject &obj) override + { + index = obj["index"].toInt(); + + auto list = obj["values"].toArray(); + values.empty(); + for (auto item : list) + { + values.append(item.toString()); + } + } +}; + +struct ColorProp : public Prop +{ + QColor value; + + ColorProp() + { + type = PropType::Color; + } + + QVariant getValue() + { + return value; + } + + void setValue(QVariant val) + { + value = val.value(); + } + + QJsonObject toJson() override + { + auto obj = Prop::toJson(); + QJsonObject colObj; + colObj["r"] = value.red(); + colObj["g"] = value.green(); + colObj["b"] = value.blue(); + colObj["a"] = value.alpha(); + obj["value"] = colObj; + + return obj; + } + + void fromJson(const QJsonObject &obj) override + { + auto colorObj = obj["value"].toObject(); + value.setRed(colorObj["r"].toInt()); + value.setGreen(colorObj["g"].toInt()); + value.setBlue(colorObj["b"].toInt()); + value.setAlpha(colorObj["a"].toInt()); + } +}; + +class StringProp : public Prop +{ +public: + QString value; + + StringProp() + { + type = PropType::Color; + } + + QVariant getValue() + { + return value; + } + + void setValue(QVariant val) + { + value = val.value(); + } + + QJsonObject toJson() override + { + auto obj = Prop::toJson(); + obj["value"] = value; + return obj; + } + + void fromJson(const QJsonObject &obj) override + { + value = obj["value"].toString(); + } +}; \ No newline at end of file From c162b2357a6a3a59c02816cd98799ca1630a0415 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 17 Sep 2022 13:22:55 -0400 Subject: [PATCH 008/100] add main widgets --- src/texturelab/CMakeLists.txt | 10 ++++++++++ src/texturelab/mainwindow.cpp | 4 +++- src/texturelab/mainwindow.h | 14 +++++++++++++- src/texturelab/widgets/graphwidget.cpp | 9 +++++++++ src/texturelab/widgets/graphwidget.h | 9 +++++++++ src/texturelab/widgets/librarywidget.cpp | 0 src/texturelab/widgets/librarywidget.h | 9 +++++++++ src/texturelab/widgets/propertieswidget.cpp | 0 src/texturelab/widgets/propertieswidget.h | 9 +++++++++ src/texturelab/widgets/view2dwidget.cpp | 0 src/texturelab/widgets/view2dwidget.h | 9 +++++++++ src/texturelab/widgets/view3dwidget.cpp | 0 src/texturelab/widgets/view3dwidget.h | 9 +++++++++ 13 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 src/texturelab/widgets/graphwidget.cpp create mode 100644 src/texturelab/widgets/graphwidget.h create mode 100644 src/texturelab/widgets/librarywidget.cpp create mode 100644 src/texturelab/widgets/librarywidget.h create mode 100644 src/texturelab/widgets/propertieswidget.cpp create mode 100644 src/texturelab/widgets/propertieswidget.h create mode 100644 src/texturelab/widgets/view2dwidget.cpp create mode 100644 src/texturelab/widgets/view2dwidget.h create mode 100644 src/texturelab/widgets/view3dwidget.cpp create mode 100644 src/texturelab/widgets/view3dwidget.h diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index 6835e64d..d48c95cf 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -21,6 +21,16 @@ set(PROJECT_SOURCES ./models.h ./props.h ./props.cpp + ./widgets/graphwidget.h + ./widgets/graphwidget.cpp + ./widgets/librarywidget.h + ./widgets/librarywidget.cpp + ./widgets/propertieswidget.h + ./widgets/propertieswidget.cpp + ./widgets/view2dwidget.h + ./widgets/view2dwidget.cpp + ./widgets/view3dwidget.h + ./widgets/view3dwidget.cpp ) set(PROJECT_RESOURCES diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 7dc618c7..aacce122 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -9,6 +9,8 @@ #include "DockSplitter.h" #include "DockAreaWidget.h" +#include "widgets/graphwidget.h" + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { @@ -98,7 +100,7 @@ void MainWindow::setupDocks() // https://forum.qt.io/topic/3055/mainwindow-layout-problem-with-qdockwidget/17 // graph goes in the center - auto graphArea = addDock("Graph", ads::CenterDockWidgetArea, new QWidget(this), nullptr); + auto graphArea = addDock("Graph", ads::CenterDockWidgetArea, new GraphWidget(), nullptr); auto leftArea = addDock("2D View", ads::LeftDockWidgetArea, new QWidget(this), graphArea); auto rightArea = addDock("Properties", ads::RightDockWidgetArea, new QWidget(this), graphArea); diff --git a/src/texturelab/mainwindow.h b/src/texturelab/mainwindow.h index 13f062db..917164ee 100644 --- a/src/texturelab/mainwindow.h +++ b/src/texturelab/mainwindow.h @@ -5,6 +5,12 @@ #include #include "DockManager.h" +class GraphWidget; +class LibraryWidget; +class PropertiesWidget; +class View2DWidget; +class View3DWidget; + class QToolBar; class MainWindow : public QMainWindow { @@ -24,6 +30,12 @@ class MainWindow : public QMainWindow private: ads::CDockManager *dockManager; QToolBar *toolBar; - QWidget* editor; + QWidget *editor; + + GraphWidget *graphWidget; + LibraryWidget *libraryWidget; + PropertiesWidget *propWidget; + View2DWidget *view2DWidget; + View3DWidget *view3DWidget; }; #endif // MAINWINDOW_H diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp new file mode 100644 index 00000000..f46f7d9c --- /dev/null +++ b/src/texturelab/widgets/graphwidget.cpp @@ -0,0 +1,9 @@ +#include "graphwidget.h" +#include +#include +#include +#include + +GraphWidget::GraphWidget() : QMainWindow(nullptr) +{ +} \ No newline at end of file diff --git a/src/texturelab/widgets/graphwidget.h b/src/texturelab/widgets/graphwidget.h new file mode 100644 index 00000000..e18bc74b --- /dev/null +++ b/src/texturelab/widgets/graphwidget.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +class GraphWidget : public QMainWindow +{ +public: + GraphWidget(); +}; \ No newline at end of file diff --git a/src/texturelab/widgets/librarywidget.cpp b/src/texturelab/widgets/librarywidget.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/texturelab/widgets/librarywidget.h b/src/texturelab/widgets/librarywidget.h new file mode 100644 index 00000000..acde56cc --- /dev/null +++ b/src/texturelab/widgets/librarywidget.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +class LibraryWidget : public QFrame +{ +public: + LibraryWidget(); +}; \ No newline at end of file diff --git a/src/texturelab/widgets/propertieswidget.cpp b/src/texturelab/widgets/propertieswidget.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/texturelab/widgets/propertieswidget.h b/src/texturelab/widgets/propertieswidget.h new file mode 100644 index 00000000..508f809f --- /dev/null +++ b/src/texturelab/widgets/propertieswidget.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +class PropertiesWidget : public QFrame +{ +public: + PropertiesWidget(); +}; \ No newline at end of file diff --git a/src/texturelab/widgets/view2dwidget.cpp b/src/texturelab/widgets/view2dwidget.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/texturelab/widgets/view2dwidget.h b/src/texturelab/widgets/view2dwidget.h new file mode 100644 index 00000000..0101406a --- /dev/null +++ b/src/texturelab/widgets/view2dwidget.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +class View2DWidget : public QFrame +{ +public: + View2DWidget(); +}; \ No newline at end of file diff --git a/src/texturelab/widgets/view3dwidget.cpp b/src/texturelab/widgets/view3dwidget.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/texturelab/widgets/view3dwidget.h b/src/texturelab/widgets/view3dwidget.h new file mode 100644 index 00000000..3ea3e80d --- /dev/null +++ b/src/texturelab/widgets/view3dwidget.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +class View3DWidget : public QFrame +{ +public: + View3DWidget(); +}; \ No newline at end of file From 8267839c90bc07cba0779157348cfd7c4156b6d5 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 17 Sep 2022 13:45:28 -0400 Subject: [PATCH 009/100] add nodegraph project --- CMakeLists.txt | 3 + src/nodegraph/CMakeLists.txt | 81 ++++++++++++++ src/nodegraph/main.cpp | 24 +++++ src/nodegraph/nodegraph.cpp | 201 +++++++++++++++++++++++++++++++++++ src/nodegraph/nodegraph.h | 42 ++++++++ 5 files changed, 351 insertions(+) create mode 100644 src/nodegraph/CMakeLists.txt create mode 100644 src/nodegraph/main.cpp create mode 100644 src/nodegraph/nodegraph.cpp create mode 100644 src/nodegraph/nodegraph.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 4fb295e2..1d335566 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,9 @@ project(qtcompleteapp VERSION 0.1 LANGUAGES CXX) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/ads) set_target_properties(qtadvanceddocking PROPERTIES BUILD_STATIC TRUE) +# Advanced Docking System +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/nodegraph) + # Main App add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/texturelab) diff --git a/src/nodegraph/CMakeLists.txt b/src/nodegraph/CMakeLists.txt new file mode 100644 index 00000000..7b00994a --- /dev/null +++ b/src/nodegraph/CMakeLists.txt @@ -0,0 +1,81 @@ + +cmake_minimum_required(VERSION 3.5) + + +find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) +if (UNIX AND NOT APPLE) + include_directories(${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) +endif() + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(NODEGRAPH_SRCS + # main.cpp + nodegraph.cpp +) +set(NODEGRAPH_HEADERS + nodegraph.h +) + +# library +add_library(nodegraph STATIC ${NODEGRAPH_SRCS} ${NODEGRAPH_HEADERS}) +target_link_libraries(nodegraph PUBLIC Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::Widgets) + + +set_target_properties(nodegraph PROPERTIES + AUTOMOC ON + AUTORCC ON + CXX_EXTENSIONS OFF + EXPORT_NAME "Nodegraph Library" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" +) + +if(QT_VERSION_MAJOR STREQUAL "5") + set_target_properties(nodegraph PROPERTIES + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED ON) +elseif(QT_VERSION_MAJOR STREQUAL "6") + set_target_properties(nodegraph PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED ON) +endif() + +# EXE for testing purposes +add_executable(nodegraph_app + ${NODEGRAPH_HEADERS} + ${NODEGRAPH_SRCS} + main.cpp + ) +target_link_libraries(nodegraph_app PRIVATE Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::Widgets) + + +set_target_properties(nodegraph_app PROPERTIES + AUTOMOC ON + AUTORCC ON + CXX_EXTENSIONS OFF + EXPORT_NAME "Nodegraph App" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" +) + +if(QT_VERSION_MAJOR STREQUAL "5") + set_target_properties(nodegraph_app PROPERTIES + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED ON) +elseif(QT_VERSION_MAJOR STREQUAL "6") + set_target_properties(nodegraph_app PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED ON) +endif() + +# if(QT_VERSION_MAJOR EQUAL 6) +# qt_finalize_executable(qtapp) +# endif() \ No newline at end of file diff --git a/src/nodegraph/main.cpp b/src/nodegraph/main.cpp new file mode 100644 index 00000000..578ff1a0 --- /dev/null +++ b/src/nodegraph/main.cpp @@ -0,0 +1,24 @@ +#include +#include +#include +#include "nodegraph.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + QMainWindow w; + + auto graph = new NodeGraph(&w); + + // QStackedLayout *layout = new QStackedLayout(&w); + // layout->addWidget(graph); + + w.setCentralWidget(graph); + + w.resize(800, 600); + + w.show(); + w.showMaximized(); + + return a.exec(); +} diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp new file mode 100644 index 00000000..6964ffa4 --- /dev/null +++ b/src/nodegraph/nodegraph.cpp @@ -0,0 +1,201 @@ +#include + +#include +#include +#include + +#include +#include +// #include + +// #include +#include + +#include +#include +#include + +const QColor BackgroundColor(53, 53, 53); +const QColor FineGridColor(60, 60, 60); +const QColor CoarseGridColor(25, 25, 25); + +#include "nodegraph.h" + +NodeGraph:: + NodeGraph(QWidget *parent) + : QGraphicsView(parent) +{ + setDragMode(QGraphicsView::ScrollHandDrag); + setRenderHint(QPainter::Antialiasing); + + // setBackgroundBrush(BackgroundColor); + setBackgroundBrush(QColor(53, 53, 53)); + + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + + setCacheMode(QGraphicsView::CacheBackground); + // setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); + setViewportUpdateMode(QGraphicsView::FullViewportUpdate); + + // setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); + + auto scene = new QGraphicsScene(); + scene->addText("Hello World!"); + setScene(scene); +} + +void NodeGraph:: + wheelEvent(QWheelEvent *event) +{ + QPoint delta = event->angleDelta(); + + if (delta.y() == 0) + { + event->ignore(); + return; + } + + double const d = delta.y() / std::abs(delta.y()); + + if (d > 0.0) + scaleUp(); + else + scaleDown(); +} + +void NodeGraph:: + scaleUp() +{ + double const step = 1.2; + double const factor = std::pow(step, 1.0); + + QTransform t = transform(); + + if (t.m11() > 2.0) + return; + + scale(factor, factor); +} + +void NodeGraph:: + scaleDown() +{ + double const step = 1.2; + double const factor = std::pow(step, -1.0); + + scale(factor, factor); +} + +void NodeGraph:: + keyPressEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case Qt::Key_Shift: + setDragMode(QGraphicsView::RubberBandDrag); + break; + + default: + break; + } + + QGraphicsView::keyPressEvent(event); +} + +void NodeGraph:: + keyReleaseEvent(QKeyEvent *event) +{ + switch (event->key()) + { + case Qt::Key_Shift: + setDragMode(QGraphicsView::ScrollHandDrag); + break; + + default: + break; + } + QGraphicsView::keyReleaseEvent(event); +} + +void NodeGraph:: + mousePressEvent(QMouseEvent *event) +{ + QGraphicsView::mousePressEvent(event); + if (event->button() == Qt::LeftButton) + { + _clickPos = mapToScene(event->pos()); + } +} + +void NodeGraph:: + mouseMoveEvent(QMouseEvent *event) +{ + QGraphicsView::mouseMoveEvent(event); + if (event->buttons() == Qt::LeftButton) + { + // Make sure shift is not being pressed + if ((event->modifiers() & Qt::ShiftModifier) == 0) + { + QPointF difference = _clickPos - mapToScene(event->pos()); + setSceneRect(sceneRect().translated(difference.x(), difference.y())); + } + } +} + +void NodeGraph:: + drawBackground(QPainter *painter, const QRectF &r) +{ + QGraphicsView::drawBackground(painter, r); + + auto drawGrid = + [&](double gridStep) + { + QRect windowRect = rect(); + QPointF tl = mapToScene(windowRect.topLeft()); + QPointF br = mapToScene(windowRect.bottomRight()); + + double left = std::floor(tl.x() / gridStep - 0.5); + double right = std::floor(br.x() / gridStep + 1.0); + double bottom = std::floor(tl.y() / gridStep - 0.5); + double top = std::floor(br.y() / gridStep + 1.0); + + // vertical lines + for (int xi = int(left); xi <= int(right); ++xi) + { + QLineF line(xi * gridStep, bottom * gridStep, + xi * gridStep, top * gridStep); + + painter->drawLine(line); + } + + // horizontal lines + for (int yi = int(bottom); yi <= int(top); ++yi) + { + QLineF line(left * gridStep, yi * gridStep, + right * gridStep, yi * gridStep); + painter->drawLine(line); + } + }; + + QBrush bBrush = backgroundBrush(); + + QPen pfine(FineGridColor, 1.0); + + painter->setPen(pfine); + drawGrid(15); + + QPen p(CoarseGridColor, 1.0); + + painter->setPen(p); + drawGrid(150); +} + +void NodeGraph:: + showEvent(QShowEvent *event) +{ + // _scene->setSceneRect(this->rect()); + QGraphicsView::showEvent(event); +} \ No newline at end of file diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h new file mode 100644 index 00000000..2d2fc1d9 --- /dev/null +++ b/src/nodegraph/nodegraph.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include +#include + +class QWidget; +class QWheelEvent; +class QKeyEvent; +class QMouseEvent; +class QPainter; +class QWheelEvent; +class QShowEvent; + +class NodeGraph + : public QGraphicsView +{ +public: + NodeGraph(QWidget *parent = nullptr); + + void scaleUp(); + + void scaleDown(); + +protected: + void wheelEvent(QWheelEvent *event) override; + + void keyPressEvent(QKeyEvent *event) override; + + void keyReleaseEvent(QKeyEvent *event) override; + + void mousePressEvent(QMouseEvent *event) override; + + void mouseMoveEvent(QMouseEvent *event) override; + + void drawBackground(QPainter *painter, const QRectF &r) override; + + void showEvent(QShowEvent *event) override; + +private: + QPointF _clickPos; +}; \ No newline at end of file From 6ecddff2a8da7026d5ca88bcce071a438a6d61b4 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 17 Sep 2022 13:57:15 -0400 Subject: [PATCH 010/100] add nodegraph to texturelab project --- src/texturelab/CMakeLists.txt | 3 ++- src/texturelab/widgets/graphwidget.cpp | 4 ++++ src/texturelab/widgets/graphwidget.h | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index d48c95cf..e5d3b66e 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -49,9 +49,10 @@ else() ) endif() -target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets qtadvanceddocking) +target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets qtadvanceddocking nodegraph) target_include_directories(texturelab PUBLIC ../ads/src + ../nodegraph ) set_target_properties(texturelab PROPERTIES diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp index f46f7d9c..5f7f24ca 100644 --- a/src/texturelab/widgets/graphwidget.cpp +++ b/src/texturelab/widgets/graphwidget.cpp @@ -4,6 +4,10 @@ #include #include +#include "nodegraph.h" + GraphWidget::GraphWidget() : QMainWindow(nullptr) { + graph = new NodeGraph(this); + this->setCentralWidget(graph); } \ No newline at end of file diff --git a/src/texturelab/widgets/graphwidget.h b/src/texturelab/widgets/graphwidget.h index e18bc74b..14133850 100644 --- a/src/texturelab/widgets/graphwidget.h +++ b/src/texturelab/widgets/graphwidget.h @@ -2,8 +2,11 @@ #include +class NodeGraph; + class GraphWidget : public QMainWindow { public: GraphWidget(); + NodeGraph *graph; }; \ No newline at end of file From 4997804b4191953153a993ea94dc8f3aefeaaf32 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 17 Sep 2022 22:50:24 -0400 Subject: [PATCH 011/100] add scene, node, port and connection classes --- src/nodegraph/CMakeLists.txt | 2 + src/nodegraph/graph/scene.cpp | 125 ++++++++++++++++++++++++++++++++++ src/nodegraph/graph/scene.h | 85 +++++++++++++++++++++++ src/nodegraph/main.cpp | 5 ++ src/nodegraph/nodegraph.cpp | 10 ++- 5 files changed, 225 insertions(+), 2 deletions(-) create mode 100644 src/nodegraph/graph/scene.cpp create mode 100644 src/nodegraph/graph/scene.h diff --git a/src/nodegraph/CMakeLists.txt b/src/nodegraph/CMakeLists.txt index 7b00994a..2ca907bf 100644 --- a/src/nodegraph/CMakeLists.txt +++ b/src/nodegraph/CMakeLists.txt @@ -13,9 +13,11 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) set(NODEGRAPH_SRCS # main.cpp nodegraph.cpp + graph/scene.cpp ) set(NODEGRAPH_HEADERS nodegraph.h + graph/scene.h ) # library diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp new file mode 100644 index 00000000..04ea5fd1 --- /dev/null +++ b/src/nodegraph/graph/scene.cpp @@ -0,0 +1,125 @@ +#include "scene.h" +#include +#include +#include +#include +#include +#include + +Scene::Scene() : QGraphicsScene() +{ +} + +Node::Node() +{ + width = 100; + height = 100; + + setFlag(QGraphicsItem::ItemIsMovable, true); + setFlag(QGraphicsItem::ItemIsFocusable, true); + setFlag(QGraphicsItem::ItemIsSelectable, true); + setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); + + text = new QGraphicsTextItem(this); + text->setPlainText("Title"); + + text->setPos(0, 0); + text->setTextWidth(100); + text->setDefaultTextColor(QColor(255, 255, 255)); + + // center title + QTextBlockFormat format; + format.setAlignment(Qt::AlignCenter); + QTextCursor cursor = text->textCursor(); + cursor.select(QTextCursor::Document); + cursor.mergeBlockFormat(format); + cursor.clearSelection(); + text->setTextCursor(cursor); + + text->document()->setDocumentMargin(0); + + QFont font = text->font(); + font.setWeight(QFont::Bold); + font.setPixelSize(12); + text->setFont(font); + + QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; + effect->setBlurRadius(12); + effect->setXOffset(0); + effect->setYOffset(0); + effect->setColor(QColor(00, 00, 00, 40)); + setGraphicsEffect(effect); + + setAcceptHoverEvents(true); +} + +QRectF +Node::boundingRect() const +{ + return QRectF(0, 0, 100, 100); +} + +// void Node::mouseMoveEvent(QGraphicsSceneMouseEvent *event) +// { +// QGraphicsObject::mouseMoveEvent(event); +// } + +void Node::hoverEnterEvent(QGraphicsSceneHoverEvent *event) +{ + this->text->hide(); + QGraphicsObject::hoverEnterEvent(event); +} + +void Node::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) +{ + this->text->show(); + QGraphicsObject::hoverLeaveEvent(event); +} + +void Node::paint(QPainter *painter, + QStyleOptionGraphicsItem const *option, + QWidget *widget) +{ + const int titleHeight = 20; + const int nodeWidth = width; + const int nodeHeight = height; + const int titleRadius = 4; + const QColor titleColor(0, 0, 0); + + auto rect = boundingRect(); + + // not really needed + // painter->setClipRect(option->exposedRect); + + // smooth rendering + // painter->setRenderHint(QPainter::Antialiasing); + // painter->setRenderHint(QPainter::TextAntialiasing); + + // title tab + // QPainterPath titlePath; + // titlePath.setFillRule(Qt::WindingFill); + // titlePath.addRect(0, 10, width, titleHeight - 10); + // titlePath.addRoundedRect(0, 0, nodeWidth, titleHeight, titleRadius, titleRadius); + // painter->fillPath(titlePath, QBrush(QColor(255, 255, 255))); + + // // draw text node seperator + // QPainterPath block; + // block.setFillRule(Qt::WindingFill); + // block.addRect(0, titleHeight, nodeWidth, 3); + // painter->fillPath(block, QBrush(QColor(30, 30, 30, 160))); + + QPen pen(QColor(00, 00, 00, 250), .5); + painter->setPen(pen); + + // background + QPainterPath bgPath; + bgPath.setFillRule(Qt::WindingFill); + bgPath.addRoundedRect(0, 0, nodeWidth, nodeHeight, titleRadius, titleRadius); + painter->fillPath(bgPath, QBrush(QColor(10, 10, 10, 160))); + + // draw border + painter->setPen(QPen(titleColor, 2)); + painter->drawRoundedRect(rect, titleRadius, titleRadius); + + // draw highlight +} \ No newline at end of file diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h new file mode 100644 index 00000000..09c023b3 --- /dev/null +++ b/src/nodegraph/graph/scene.h @@ -0,0 +1,85 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +class QGraphicsTextItem; + +class Node; +class Port; +class Connection; + +typedef QSharedPointer NodePtr; +typedef QSharedPointer ConnectionPtr; +typedef QSharedPointer PortPtr; + +class Scene : public QGraphicsScene +{ +public: + Scene(); +}; + +class Node : public QGraphicsObject +{ + int width; + int height; + QGraphicsTextItem *text; + +public: + explicit Node(); + QVector inPorts; + QVector outPorts; + + QRectF + boundingRect() const override; + +protected: + void + paint(QPainter *painter, + QStyleOptionGraphicsItem const *option, + QWidget *widget = 0) override; + + // void + // mousePressEvent(QGraphicsSceneMouseEvent *event) override; + + // void + // mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; + + // void + // mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + + void + hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + + void + hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + + // void + // hoverMoveEvent(QGraphicsSceneHoverEvent *) override; + + // void + // mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; +}; + +class Port : public QGraphicsObject +{ +public: + NodePtr node; + QVector connections; + + QString name; +}; + +class Connection : public QGraphicsObject +{ + PortPtr startPort; + PortPtr endPort; + +public: + void updatePositions(); +}; \ No newline at end of file diff --git a/src/nodegraph/main.cpp b/src/nodegraph/main.cpp index 578ff1a0..fda235ac 100644 --- a/src/nodegraph/main.cpp +++ b/src/nodegraph/main.cpp @@ -2,6 +2,7 @@ #include #include #include "nodegraph.h" +#include "graph/scene.h" int main(int argc, char *argv[]) { @@ -15,6 +16,10 @@ int main(int argc, char *argv[]) w.setCentralWidget(graph); + Scene *scene = new Scene(); + scene->addItem(new Node()); + graph->setScene(scene); + w.resize(800, 600); w.show(); diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index 6964ffa4..e08fccf5 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -40,6 +40,9 @@ NodeGraph:: // setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); + // not needed rn + // setDragMode(QGraphicsView::ScrollHandDrag); + // setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); auto scene = new QGraphicsScene(); @@ -123,17 +126,18 @@ void NodeGraph:: void NodeGraph:: mousePressEvent(QMouseEvent *event) { - QGraphicsView::mousePressEvent(event); + if (event->button() == Qt::LeftButton) { _clickPos = mapToScene(event->pos()); } + QGraphicsView::mousePressEvent(event); } void NodeGraph:: mouseMoveEvent(QMouseEvent *event) { - QGraphicsView::mouseMoveEvent(event); + if (event->buttons() == Qt::LeftButton) { // Make sure shift is not being pressed @@ -143,12 +147,14 @@ void NodeGraph:: setSceneRect(sceneRect().translated(difference.x(), difference.y())); } } + QGraphicsView::mouseMoveEvent(event); } void NodeGraph:: drawBackground(QPainter *painter, const QRectF &r) { QGraphicsView::drawBackground(painter, r); + painter->setRenderHint(QPainter::Antialiasing); auto drawGrid = [&](double gridStep) From e7e862bf4491bf1793f45ee830450f87550e092e Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 17 Sep 2022 23:48:44 -0400 Subject: [PATCH 012/100] add port rendering --- src/nodegraph/graph/scene.cpp | 80 ++++++++++++++++++++++++++++++++--- src/nodegraph/graph/scene.h | 25 +++++++++++ src/nodegraph/main.cpp | 7 ++- 3 files changed, 106 insertions(+), 6 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 04ea5fd1..819a1adc 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -14,6 +14,7 @@ Node::Node() { width = 100; height = 100; + isHovered = false; setFlag(QGraphicsItem::ItemIsMovable, true); setFlag(QGraphicsItem::ItemIsFocusable, true); @@ -36,7 +37,7 @@ Node::Node() cursor.clearSelection(); text->setTextCursor(cursor); - text->document()->setDocumentMargin(0); + text->document()->setDocumentMargin(2); QFont font = text->font(); font.setWeight(QFont::Bold); @@ -44,15 +45,42 @@ Node::Node() text->setFont(font); QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; - effect->setBlurRadius(12); + effect->setBlurRadius(20); effect->setXOffset(0); effect->setYOffset(0); - effect->setColor(QColor(00, 00, 00, 40)); + effect->setColor(QColor(00, 00, 00, 70)); setGraphicsEffect(effect); setAcceptHoverEvents(true); } +void Node::addInPort(QString name) +{ + PortPtr port(new Port(this)); + port->name = name; + inPorts.append(port); + // port->setParent(this); + + // top and bottom padding for sockets + const int pad = inPorts.count() < 5 ? 10 : 0; + + // sort in sockets + int incr = (this->height - pad * 2) / inPorts.count(); + int mid = incr / 2.0; + int i = 0; + for (auto port : inPorts) + { + int y = pad + i * incr + mid; + int x = 0; + port->setCenter(x, y); + i++; + } +} + +void Node::addOutPort(QString name) +{ +} + QRectF Node::boundingRect() const { @@ -67,12 +95,14 @@ Node::boundingRect() const void Node::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { this->text->hide(); + this->isHovered = true; QGraphicsObject::hoverEnterEvent(event); } void Node::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { this->text->show(); + this->isHovered = false; QGraphicsObject::hoverLeaveEvent(event); } @@ -115,11 +145,51 @@ void Node::paint(QPainter *painter, QPainterPath bgPath; bgPath.setFillRule(Qt::WindingFill); bgPath.addRoundedRect(0, 0, nodeWidth, nodeHeight, titleRadius, titleRadius); - painter->fillPath(bgPath, QBrush(QColor(10, 10, 10, 160))); + painter->fillPath(bgPath, QBrush(QColor(10, 10, 10, 255))); // draw border - painter->setPen(QPen(titleColor, 2)); + painter->setPen(QPen(titleColor, 3)); painter->drawRoundedRect(rect, titleRadius, titleRadius); // draw highlight +} + +Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) +{ + _radius = 7; + name = ""; +} + +QRectF +Port::boundingRect() const +{ + return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); +} + +void Port::setCenter(float x, float y) +{ + // auto rect = this->boundingRect(); + // setPos(QPointF(x - rect.x() / 2, y - rect.y() / 2)); + setPos(QPointF(x, y)); +} + +void Port::paint(QPainter *painter, + QStyleOptionGraphicsItem const *option, + QWidget *widget) +{ + auto rect = boundingRect(); + + QPen pen(QColor(00, 00, 00, 250), 1.0f); + painter->setPen(pen); + + // background + QPainterPath bgPath; + bgPath.setFillRule(Qt::WindingFill); + // bgPath.addRoundedRect(-_radius, _radius, rect.width(), rect.height(), rect.width() / 2, rect.height() / 2); + bgPath.addRoundedRect(rect, _radius, _radius); + painter->fillPath(bgPath, QBrush(QColor(170, 170, 170, 255))); + + // draw border + painter->setPen(QPen(QColor(0, 0, 0), 3)); + painter->drawRoundedRect(rect, rect.width() / 2, rect.height() / 2); } \ No newline at end of file diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index 09c023b3..3ba668f2 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -30,14 +30,21 @@ class Node : public QGraphicsObject int height; QGraphicsTextItem *text; + bool isHovered; + public: explicit Node(); QVector inPorts; QVector outPorts; + void addInPort(QString name); + void addOutPort(QString name); + QRectF boundingRect() const override; + bool hovered() const { return isHovered; }; + protected: void paint(QPainter *painter, @@ -68,11 +75,29 @@ class Node : public QGraphicsObject class Port : public QGraphicsObject { + QGraphicsTextItem *text; + int _radius; + public: NodePtr node; QVector connections; QString name; + + int radius() const { return _radius; } + + Port(QGraphicsObject *parent); + + QRectF + boundingRect() const override; + + void setCenter(float x, float y); + +protected: + void + paint(QPainter *painter, + QStyleOptionGraphicsItem const *option, + QWidget *widget = 0) override; }; class Connection : public QGraphicsObject diff --git a/src/nodegraph/main.cpp b/src/nodegraph/main.cpp index fda235ac..3f6e9f72 100644 --- a/src/nodegraph/main.cpp +++ b/src/nodegraph/main.cpp @@ -17,7 +17,12 @@ int main(int argc, char *argv[]) w.setCentralWidget(graph); Scene *scene = new Scene(); - scene->addItem(new Node()); + + auto node = new Node(); + node->addInPort("image"); + node->addInPort("height"); + + scene->addItem(node); graph->setScene(scene); w.resize(800, 600); From 004e50843f4cdc609f485c7ae17c5022fbcd3154 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 18 Sep 2022 01:41:27 -0400 Subject: [PATCH 013/100] add connection rendering --- src/nodegraph/graph/scene.cpp | 122 +++++++++++++++++++++++++++++++++- src/nodegraph/graph/scene.h | 33 ++++++++- src/nodegraph/main.cpp | 12 +++- 3 files changed, 163 insertions(+), 4 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 819a1adc..0fc8513d 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -10,6 +10,26 @@ Scene::Scene() : QGraphicsScene() { } +void Scene::addNode(NodePtr node) +{ + this->addItem(node.data()); +} + +void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr rightNode, QString rightInputName) +{ + auto leftPort = leftNode->getOutPortByName(leftOutputName); + auto rightPort = rightNode->getInPortByName(rightInputName); + + // create new connection item from ports + auto conn = new Connection(); + conn->startPort = leftPort; + conn->endPort = rightPort; + conn->updatePosFromPorts(); + conn->updatePath(); + + this->addItem(conn); +} + Node::Node() { width = 100; @@ -52,6 +72,7 @@ Node::Node() setGraphicsEffect(effect); setAcceptHoverEvents(true); + // setAcceptDrops(true); } void Node::addInPort(QString name) @@ -59,7 +80,6 @@ void Node::addInPort(QString name) PortPtr port(new Port(this)); port->name = name; inPorts.append(port); - // port->setParent(this); // top and bottom padding for sockets const int pad = inPorts.count() < 5 ? 10 : 0; @@ -79,6 +99,46 @@ void Node::addInPort(QString name) void Node::addOutPort(QString name) { + PortPtr port(new Port(this)); + port->name = name; + outPorts.append(port); + + // top and bottom padding for sockets + const int pad = outPorts.count() < 5 ? 10 : 0; + + // sort in sockets + int incr = (this->height - pad * 2) / outPorts.count(); + int mid = incr / 2.0; + int i = 0; + for (auto port : outPorts) + { + int y = pad + i * incr + mid; + int x = width; + port->setCenter(x, y); + i++; + } +} + +PortPtr Node::getInPortByName(QString name) +{ + for (auto port : inPorts) + { + if (port->name == name) + return port; + } + + Q_ASSERT(false); +} + +PortPtr Node::getOutPortByName(QString name) +{ + for (auto port : outPorts) + { + if (port->name == name) + return port; + } + + Q_ASSERT(false); } QRectF @@ -192,4 +252,64 @@ void Port::paint(QPainter *painter, // draw border painter->setPen(QPen(QColor(0, 0, 0), 3)); painter->drawRoundedRect(rect, rect.width() / 2, rect.height() / 2); +} + +Connection::Connection() +{ + pos1 = QPointF(0, 0); + pos2 = QPointF(0, 0); + + connectState = ConnectionState::Complete; + + auto pen = QPen(QColor(200, 200, 200)); + pen.setBrush(QColor(50, 150, 250)); + pen.setCapStyle(Qt::RoundCap); + pen.setWidth(lineThickness); + setPen(pen); +} + +void Connection::updatePosFromPorts() +{ + pos1 = startPort->scenePos(); + pos2 = endPort->scenePos(); +} + +void Connection::updatePath() +{ + p = new QPainterPath; + p->moveTo(pos1); + + qreal dx = pos2.x() - pos1.x(); + qreal dy = pos2.y() - pos1.y(); + + QPointF ctr1(pos1.x() + dx * 0.25, pos1.y() + dy * 0.1); + QPointF ctr2(pos1.x() + dx * 0.75, pos1.y() + dy * 0.9); + + p->cubicTo(ctr1, ctr2, pos2); + p->setFillRule(Qt::OddEvenFill); + + setPath(*p); +} + +void Connection::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) +{ + painter->setRenderHint(QPainter::Antialiasing); + if (connectState == ConnectionState::Dragging) + { + QPen pen(QColor(90, 90, 90), lineThickness); + pen.setStyle(Qt::DashLine); + pen.setDashOffset(6); + painter->setPen(pen); + painter->drawPath(*p); + } + if (connectState == ConnectionState::Complete) + { + // create gradient for line + QPen pen(QColor(0, 255, 255), lineThickness); + painter->setPen(pen); + painter->drawPath(*p); + } + + Q_UNUSED(option); + Q_UNUSED(widget); } \ No newline at end of file diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index 3ba668f2..2559c984 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -7,6 +7,7 @@ #include #include #include +#include class QGraphicsTextItem; @@ -22,6 +23,8 @@ class Scene : public QGraphicsScene { public: Scene(); + void addNode(NodePtr node); + void connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr rightNode, QString rightInputName); }; class Node : public QGraphicsObject @@ -40,6 +43,9 @@ class Node : public QGraphicsObject void addInPort(QString name); void addOutPort(QString name); + PortPtr getInPortByName(QString name); + PortPtr getOutPortByName(QString name); + QRectF boundingRect() const override; @@ -100,11 +106,36 @@ class Port : public QGraphicsObject QWidget *widget = 0) override; }; -class Connection : public QGraphicsObject +enum class ConnectionState +{ + Dragging, + Complete +}; + +class Connection : public QGraphicsPathItem { + friend class Scene; + +public: + ConnectionState connectState; + PortPtr startPort; PortPtr endPort; + QPointF pos1; + QPointF pos2; + + double lineThickness = 5.0; + public: + explicit Connection(); void updatePositions(); + + void updatePosFromPorts(); + void updatePath(); + + QPainterPath *p; + + // virtual int type() const override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; }; \ No newline at end of file diff --git a/src/nodegraph/main.cpp b/src/nodegraph/main.cpp index 3f6e9f72..01f809ce 100644 --- a/src/nodegraph/main.cpp +++ b/src/nodegraph/main.cpp @@ -18,11 +18,19 @@ int main(int argc, char *argv[]) Scene *scene = new Scene(); - auto node = new Node(); + NodePtr node(new Node()); node->addInPort("image"); node->addInPort("height"); + node->addOutPort("image"); + scene->addNode(node); + + NodePtr outputNode(new Node()); + outputNode->addInPort("image"); + outputNode->setPos(150, 150); + scene->addNode(outputNode); + + scene->connectNodes(node, "image", outputNode, "image"); - scene->addItem(node); graph->setScene(scene); w.resize(800, 600); From 2b384b0f77ce9976e1e9115e54ff5ff3692c8c8b Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 18 Sep 2022 01:41:36 -0400 Subject: [PATCH 014/100] fix nodegraph dragging issue --- src/nodegraph/nodegraph.cpp | 40 ++++++++++++++++--------------------- src/nodegraph/nodegraph.h | 2 ++ 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index e08fccf5..b4a242b0 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -25,7 +25,7 @@ NodeGraph:: NodeGraph(QWidget *parent) : QGraphicsView(parent) { - setDragMode(QGraphicsView::ScrollHandDrag); + setDragMode(QGraphicsView::RubberBandDrag); setRenderHint(QPainter::Antialiasing); // setBackgroundBrush(BackgroundColor); @@ -40,9 +40,6 @@ NodeGraph:: // setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); - // not needed rn - // setDragMode(QGraphicsView::ScrollHandDrag); - // setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); auto scene = new QGraphicsScene(); @@ -95,15 +92,6 @@ void NodeGraph:: void NodeGraph:: keyPressEvent(QKeyEvent *event) { - switch (event->key()) - { - case Qt::Key_Shift: - setDragMode(QGraphicsView::RubberBandDrag); - break; - - default: - break; - } QGraphicsView::keyPressEvent(event); } @@ -114,7 +102,7 @@ void NodeGraph:: switch (event->key()) { case Qt::Key_Shift: - setDragMode(QGraphicsView::ScrollHandDrag); + // setDragMode(QGraphicsView::ScrollHandDrag); break; default: @@ -126,10 +114,10 @@ void NodeGraph:: void NodeGraph:: mousePressEvent(QMouseEvent *event) { - - if (event->button() == Qt::LeftButton) + if (event->button() == Qt::MiddleButton && scene()->mouseGrabberItem() == nullptr) { _clickPos = mapToScene(event->pos()); + setDragMode(QGraphicsView::NoDrag); } QGraphicsView::mousePressEvent(event); } @@ -138,18 +126,24 @@ void NodeGraph:: mouseMoveEvent(QMouseEvent *event) { - if (event->buttons() == Qt::LeftButton) + if (event->buttons() == Qt::MiddleButton) { - // Make sure shift is not being pressed - if ((event->modifiers() & Qt::ShiftModifier) == 0) - { - QPointF difference = _clickPos - mapToScene(event->pos()); - setSceneRect(sceneRect().translated(difference.x(), difference.y())); - } + QPointF difference = _clickPos - mapToScene(event->pos()); + setSceneRect(sceneRect().translated(difference.x(), difference.y())); } QGraphicsView::mouseMoveEvent(event); } +void NodeGraph:: + mouseReleaseEvent(QMouseEvent *event) +{ + if (event->button() == Qt::MiddleButton) + { + setDragMode(QGraphicsView::RubberBandDrag); + } + QGraphicsView::mouseReleaseEvent(event); +} + void NodeGraph:: drawBackground(QPainter *painter, const QRectF &r) { diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h index 2d2fc1d9..6432b13c 100644 --- a/src/nodegraph/nodegraph.h +++ b/src/nodegraph/nodegraph.h @@ -33,6 +33,8 @@ class NodeGraph void mouseMoveEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + void drawBackground(QPainter *painter, const QRectF &r) override; void showEvent(QShowEvent *event) override; From a096d66b316c3483fa4bb01515acd5febd3a80aa Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Wed, 28 Sep 2022 19:15:39 -0400 Subject: [PATCH 015/100] add connections to connected ports --- src/nodegraph/graph/scene.cpp | 21 +++++++++++++++++++++ src/nodegraph/graph/scene.h | 7 +++++++ 2 files changed, 28 insertions(+) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 0fc8513d..1f522fa1 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -27,6 +27,12 @@ void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr right conn->updatePosFromPorts(); conn->updatePath(); + ConnectionPtr connPtr(conn); + + // also add them to the ports + leftPort->addConnection(connPtr); + rightPort->addConnection(connPtr); + this->addItem(conn); } @@ -216,6 +222,8 @@ void Node::paint(QPainter *painter, Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) { + this->setFlag(QGraphicsItem::ItemSendsScenePositionChanges); + _radius = 7; name = ""; } @@ -233,6 +241,19 @@ void Port::setCenter(float x, float y) setPos(QPointF(x, y)); } +QVariant Port::itemChange(GraphicsItemChange change, const QVariant &value) +{ + if (change == ItemScenePositionHasChanged) + { + for (auto con : connections) + { + con->updatePosFromPorts(); + con->updatePath(); + } + } + return value; +} + void Port::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, QWidget *widget) diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index 2559c984..7e46ea0a 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -92,6 +92,11 @@ class Port : public QGraphicsObject int radius() const { return _radius; } + void addConnection(ConnectionPtr con) { connections.append(con); } + + // todo: implement + void removeConnection(ConnectionPtr con); + Port(QGraphicsObject *parent); QRectF @@ -99,6 +104,8 @@ class Port : public QGraphicsObject void setCenter(float x, float y); + QVariant itemChange(GraphicsItemChange change, const QVariant &value); + protected: void paint(QPainter *painter, From da6793d27e7d63246d032252aff16b76b2ea2cda Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Thu, 29 Sep 2022 01:38:53 -0400 Subject: [PATCH 016/100] add connection dragging --- src/nodegraph/graph/scene.cpp | 38 +++++- src/nodegraph/graph/scene.h | 38 +++++- src/nodegraph/main.cpp | 8 +- src/nodegraph/nodegraph.cpp | 223 +++++++++++++++++++++++++++++++++- src/nodegraph/nodegraph.h | 47 +++++++ 5 files changed, 340 insertions(+), 14 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 1f522fa1..c899729d 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -5,6 +5,7 @@ #include #include #include +#include Scene::Scene() : QGraphicsScene() { @@ -25,7 +26,7 @@ void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr right conn->startPort = leftPort; conn->endPort = rightPort; conn->updatePosFromPorts(); - conn->updatePath(); + conn->updatePathFromPositions(); ConnectionPtr connPtr(conn); @@ -47,6 +48,8 @@ Node::Node() setFlag(QGraphicsItem::ItemIsSelectable, true); setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); + setCursor(Qt::ClosedHandCursor); + text = new QGraphicsTextItem(this); text->setPlainText("Title"); @@ -85,6 +88,8 @@ void Node::addInPort(QString name) { PortPtr port(new Port(this)); port->name = name; + port->portType = PortType::In; + port->node = this->sharedFromThis(); inPorts.append(port); // top and bottom padding for sockets @@ -107,6 +112,8 @@ void Node::addOutPort(QString name) { PortPtr port(new Port(this)); port->name = name; + port->portType = PortType::Out; + port->node = this->sharedFromThis(); outPorts.append(port); // top and bottom padding for sockets @@ -125,6 +132,23 @@ void Node::addOutPort(QString name) } } +PortPtr Node::getPortById(QString id) +{ + for (auto port : inPorts) + { + if (port->id() == id) + return port; + } + + for (auto port : outPorts) + { + if (port->id() == id) + return port; + } + + Q_ASSERT(false); +} + PortPtr Node::getInPortByName(QString name) { for (auto port : inPorts) @@ -220,12 +244,20 @@ void Node::paint(QPainter *painter, // draw highlight } +QString Port::id() const +{ + return _id; +} + Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) { + // this->setFlag(QGraphicsItem::ItemIsSelectable, false); this->setFlag(QGraphicsItem::ItemSendsScenePositionChanges); _radius = 7; name = ""; + portType = PortType::In; + _id = QUuid::createUuid().toString(); } QRectF @@ -248,7 +280,7 @@ QVariant Port::itemChange(GraphicsItemChange change, const QVariant &value) for (auto con : connections) { con->updatePosFromPorts(); - con->updatePath(); + con->updatePathFromPositions(); } } return value; @@ -295,7 +327,7 @@ void Connection::updatePosFromPorts() pos2 = endPort->scenePos(); } -void Connection::updatePath() +void Connection::updatePathFromPositions() { p = new QPainterPath; p->moveTo(pos1); diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index 7e46ea0a..50d4213d 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -5,11 +5,11 @@ #include #include #include -#include #include #include class QGraphicsTextItem; +class QPainterPath; class Node; class Port; @@ -19,7 +19,14 @@ typedef QSharedPointer NodePtr; typedef QSharedPointer ConnectionPtr; typedef QSharedPointer PortPtr; -class Scene : public QGraphicsScene +enum class SceneItemType : int +{ + Node = 1, + Port = 2, + Connection = 3 +}; + +class Scene : public QGraphicsScene, public QEnableSharedFromThis { public: Scene(); @@ -27,7 +34,7 @@ class Scene : public QGraphicsScene void connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr rightNode, QString rightInputName); }; -class Node : public QGraphicsObject +class Node : public QGraphicsObject, public QEnableSharedFromThis { int width; int height; @@ -43,6 +50,8 @@ class Node : public QGraphicsObject void addInPort(QString name); void addOutPort(QString name); + PortPtr getPortById(QString id); + PortPtr getInPortByName(QString name); PortPtr getOutPortByName(QString name); @@ -51,6 +60,8 @@ class Node : public QGraphicsObject bool hovered() const { return isHovered; }; + virtual int type() const override { return (int)SceneItemType::Node; } + protected: void paint(QPainter *painter, @@ -79,17 +90,28 @@ class Node : public QGraphicsObject // mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; }; -class Port : public QGraphicsObject +enum class PortType : int +{ + Invalid = 0, + In = 1, + Out = 2 +}; + +class Port : public QGraphicsObject, public QEnableSharedFromThis { QGraphicsTextItem *text; int _radius; + QString _id; public: NodePtr node; QVector connections; + PortType portType; QString name; + QString id() const; + int radius() const { return _radius; } void addConnection(ConnectionPtr con) { connections.append(con); } @@ -106,6 +128,8 @@ class Port : public QGraphicsObject QVariant itemChange(GraphicsItemChange change, const QVariant &value); + virtual int type() const override { return (int)SceneItemType::Port; } + protected: void paint(QPainter *painter, @@ -119,7 +143,7 @@ enum class ConnectionState Complete }; -class Connection : public QGraphicsPathItem +class Connection : public QGraphicsPathItem, public QEnableSharedFromThis { friend class Scene; @@ -134,12 +158,14 @@ class Connection : public QGraphicsPathItem double lineThickness = 5.0; + virtual int type() const override { return (int)SceneItemType::Connection; } + public: explicit Connection(); void updatePositions(); void updatePosFromPorts(); - void updatePath(); + void updatePathFromPositions(); QPainterPath *p; diff --git a/src/nodegraph/main.cpp b/src/nodegraph/main.cpp index 01f809ce..7c2d8200 100644 --- a/src/nodegraph/main.cpp +++ b/src/nodegraph/main.cpp @@ -16,7 +16,7 @@ int main(int argc, char *argv[]) w.setCentralWidget(graph); - Scene *scene = new Scene(); + auto scene = graph->scene(); NodePtr node(new Node()); node->addInPort("image"); @@ -31,7 +31,11 @@ int main(int argc, char *argv[]) scene->connectNodes(node, "image", outputNode, "image"); - graph->setScene(scene); + NodePtr node2(new Node()); + node2->addInPort("image"); + node2->addOutPort("result"); + node2->setPos(250, 170); + scene->addNode(node2); w.resize(800, 600); diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index b4a242b0..0852a387 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -20,6 +20,19 @@ const QColor FineGridColor(60, 60, 60); const QColor CoarseGridColor(25, 25, 25); #include "nodegraph.h" +#include "graph/scene.h" + +MouseButtonStates::MouseButtonStates() +{ + reset(); +} + +void MouseButtonStates::reset() +{ + left = false; + middle = false; + right = false; +} NodeGraph:: NodeGraph(QWidget *parent) @@ -42,9 +55,21 @@ NodeGraph:: // setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); - auto scene = new QGraphicsScene(); - scene->addText("Hello World!"); - setScene(scene); + // auto scene = new QGraphicsScene(); + // scene->addText("Hello World!"); + // setScene(scene); + + this->setNodeGraphScene(ScenePtr(new Scene())); + mbStates.reset(); +} + +void NodeGraph::setNodeGraphScene(ScenePtr scene) +{ + this->_scene = scene; + this->setScene(scene.data()); + + // handle scene's events from within the view + scene->installEventFilter(this); } void NodeGraph:: @@ -198,4 +223,196 @@ void NodeGraph:: { // _scene->setSceneRect(this->rect()); QGraphicsView::showEvent(event); +} + +bool NodeGraph::eventFilter(QObject *o, QEvent *e) +{ + QGraphicsSceneMouseEvent *me = (QGraphicsSceneMouseEvent *)e; + if (o == _scene.data()) + { + + switch ((int)e->type()) + { + case QEvent::GraphicsSceneMousePress: + if (this->sceneMousePressEvent(me)) + return true; + break; + case QEvent::GraphicsSceneMouseMove: + if (this->sceneMouseMoveEvent(me)) + return true; + break; + case QEvent::GraphicsSceneMouseRelease: + if (this->sceneMouseReleaseEvent(me)) + return true; + break; + + // case QEvent::GraphicsSceneDrop: + // break; + } + } + + return QObject::eventFilter(o, e); +} + +// todo: probably best to handle this in the views mousePressEvent +bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) +{ + // qDebug() << "Mouse Press!"; + if (event->button() == Qt::LeftButton) + mbStates.left = true; + if (event->button() == Qt::MiddleButton) + mbStates.middle = true; + if (event->button() == Qt::RightButton) + mbStates.right = true; + + // check for hit socket if left button is pressed + if (mbStates.left) + { + auto scenePos = event->scenePos(); + auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); + if (rawPort) + { + // auto port = rawPort->node->getPortById(rawPort->id()); + // gotta cast to get the non-const version + PortPtr port = ((Port *)rawPort)->sharedFromThis(); + + // are we modifying an existing port with a connection? + if (port->portType == PortType::In) + { + // in-sockets with an active connection are the only + // ones that can be edited, and that's the case here + } + // start new connection + else if (port->portType != PortType::Invalid /* in or out */) + { + activeCon = ConnectionPtr(new Connection()); + activeCon->startPort = port; + + activeCon->pos1 = scenePos; + activeCon->pos2 = scenePos; + activeCon->updatePathFromPositions(); + + this->_scene->addItem(activeCon.data()); + + // prevent further clicking of other items? + // event->ignore(); + setDragMode(QGraphicsView::NoDrag); + return true; + } + else + { + qDebug() << "trying to hit an Invalid socket"; + } + + this->setDragMode(QGraphicsView::NoDrag); + } + } + + return false; +} + +bool NodeGraph::sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event) +{ + if (mbStates.left && !!activeCon) + { + activeCon->pos2 = event->scenePos(); + activeCon->updatePathFromPositions(); + } + + return false; +} + +bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event) +{ + if (event->button() == Qt::LeftButton) + mbStates.left = false; + if (event->button() == Qt::MiddleButton) + mbStates.middle = false; + if (event->button() == Qt::RightButton) + mbStates.right = false; + + auto scenePos = event->scenePos(); + + if (mbStates.left == false && !!activeCon) + { + auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); + if (rawPort) + { + // auto hitPort = rawPort->node->getPortById(rawPort->id()); + // gotta cast to get the non-const version + PortPtr hitPort = ((Port *)rawPort)->sharedFromThis(); + + // determine between the in and out sockets + PortPtr leftPort; + PortPtr rightPort; + + if (hitPort->portType == PortType::In) + { + leftPort = activeCon->startPort; + rightPort = hitPort; + } + else + { + leftPort = hitPort; + rightPort = activeCon->startPort; + } + + // check validity of the potential connection + // NOTE: there's still a chance both leftPort and rightPort are + // still the same type or the same port + + bool isConValid = true; + + if (leftPort == rightPort) + { + isConValid = false; + qDebug() << "invalid port"; + } + + if (leftPort->portType == rightPort->portType) + { + isConValid = false; + qDebug() << "ports are the same"; + } + + // it's okay to check this since the two prior checks + // would have invalidated same-type and same-port connections + if (rightPort->connections.count() != 0) + { + isConValid = false; + qDebug() << "right port has existing connections"; + } + + // todo: check for cycle + + if (isConValid) + { + // actually make connection + _scene->connectNodes(leftPort->node, leftPort->name, rightPort->node, rightPort->name); + + // todo: emit undo task + } + } + + // remove from scene + _scene->removeItem(activeCon.data()); + activeCon.clear(); + } + + // important to reset drag! + this->setDragMode(QGraphicsView::RubberBandDrag); + return false; +} + +const Port *NodeGraph::getPortAtScenePos(float x, float y) const +{ + auto items = this->_scene->items(QPointF(x, y)); + // auto items = this->items(); + for (auto item : items) + { + if (item && item->type() == (int)SceneItemType::Port) + return (const Port *)item; + } + + return nullptr; } \ No newline at end of file diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h index 6432b13c..b94cfb8d 100644 --- a/src/nodegraph/nodegraph.h +++ b/src/nodegraph/nodegraph.h @@ -3,6 +3,7 @@ #include #include #include +#include class QWidget; class QWheelEvent; @@ -11,18 +12,43 @@ class QMouseEvent; class QPainter; class QWheelEvent; class QShowEvent; +class Scene; +class Connection; +typedef QSharedPointer ScenePtr; +typedef QSharedPointer ConnectionPtr; +class Port; +struct MouseButtonStates +{ + bool left; + bool middle; + bool right; + + MouseButtonStates(); + + // reset all to false + void reset(); +}; + +/* +This class draws a lot of inspiration from NodeGraphQt +https://github.com/jchanvfx/NodeGraphQt/blob/master/NodeGraphQt/widgets/viewer.py +*/ class NodeGraph : public QGraphicsView { public: NodeGraph(QWidget *parent = nullptr); + ScenePtr scene() const { return _scene; } + void scaleUp(); void scaleDown(); protected: + void setNodeGraphScene(ScenePtr scene); + void wheelEvent(QWheelEvent *event) override; void keyPressEvent(QKeyEvent *event) override; @@ -39,6 +65,27 @@ class NodeGraph void showEvent(QShowEvent *event) override; + bool eventFilter(QObject *o, QEvent *e) override; + + // events coming from the scene + // void sceneKeyPressEvent(QKeyEvent *event); + + // void sceneKeyReleaseEvent(QKeyEvent *event); + + // NOTE: these functions return true if they swallow the event + // this is because they're implemented using eventFilters and + // that's how eventFilters work in qt + bool sceneMousePressEvent(QGraphicsSceneMouseEvent *event); + + bool sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event); + + bool sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event); + + const Port *getPortAtScenePos(float x, float y) const; + private: QPointF _clickPos; + ScenePtr _scene; + MouseButtonStates mbStates; + ConnectionPtr activeCon; }; \ No newline at end of file From 8b2ac6cd3a56dbb277ffabf4a5e1938d88939489 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 30 Sep 2022 08:13:37 -0400 Subject: [PATCH 017/100] add new colors for connection and node outline --- src/nodegraph/graph/scene.cpp | 45 ++++++++++++++++++++++++++++------- src/nodegraph/graph/scene.h | 7 +++++- src/nodegraph/nodegraph.cpp | 4 +++- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index c899729d..89caa6ca 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -43,6 +43,10 @@ Node::Node() height = 100; isHovered = false; + defaultBorderColor = QColor(0, 0, 0); + highlightBorderColor = QColor(120, 120, 120); + selectedBorderColor = QColor(200, 200, 200); + setFlag(QGraphicsItem::ItemIsMovable, true); setFlag(QGraphicsItem::ItemIsFocusable, true); setFlag(QGraphicsItem::ItemIsSelectable, true); @@ -208,6 +212,14 @@ void Node::paint(QPainter *painter, auto rect = boundingRect(); + QColor borderColor; + if (isSelected()) + borderColor = this->selectedBorderColor; + else if (isHovered) + borderColor = this->highlightBorderColor; + else + borderColor = this->defaultBorderColor; + // not really needed // painter->setClipRect(option->exposedRect); @@ -228,8 +240,9 @@ void Node::paint(QPainter *painter, // block.addRect(0, titleHeight, nodeWidth, 3); // painter->fillPath(block, QBrush(QColor(30, 30, 30, 160))); - QPen pen(QColor(00, 00, 00, 250), .5); - painter->setPen(pen); + // QPen pen(QColor(00, 00, 00, 250), .5); + // QPen pen(borderColor, .5); + // painter->setPen(pen); // background QPainterPath bgPath; @@ -238,7 +251,7 @@ void Node::paint(QPainter *painter, painter->fillPath(bgPath, QBrush(QColor(10, 10, 10, 255))); // draw border - painter->setPen(QPen(titleColor, 3)); + painter->setPen(QPen(borderColor, 3)); painter->drawRoundedRect(rect, titleRadius, titleRadius); // draw highlight @@ -335,8 +348,8 @@ void Connection::updatePathFromPositions() qreal dx = pos2.x() - pos1.x(); qreal dy = pos2.y() - pos1.y(); - QPointF ctr1(pos1.x() + dx * 0.25, pos1.y() + dy * 0.1); - QPointF ctr2(pos1.x() + dx * 0.75, pos1.y() + dy * 0.9); + QPointF ctr1(pos1.x() + dx * 0.5, pos1.y()); + QPointF ctr2(pos2.x() - dx * 0.5, pos2.y()); p->cubicTo(ctr1, ctr2, pos2); p->setFillRule(Qt::OddEvenFill); @@ -347,22 +360,38 @@ void Connection::updatePathFromPositions() void Connection::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { painter->setRenderHint(QPainter::Antialiasing); + painter->save(); + if (connectState == ConnectionState::Dragging) { - QPen pen(QColor(90, 90, 90), lineThickness); + QPen pen(QColor(150, 150, 150), lineThickness); pen.setStyle(Qt::DashLine); - pen.setDashOffset(6); + pen.setDashOffset(4); painter->setPen(pen); painter->drawPath(*p); + + painter->setPen(QPen(QColor(0, 0, 0), 3)); + painter->setBrush(QBrush(QColor(150, 150, 150))); + painter->drawEllipse(pos1, 8, 8); + + painter->setPen(Qt::NoPen); + painter->drawEllipse(pos2, 6, 6); } if (connectState == ConnectionState::Complete) { // create gradient for line - QPen pen(QColor(0, 255, 255), lineThickness); + QPen pen(QColor(170, 170, 170), lineThickness); painter->setPen(pen); painter->drawPath(*p); + + painter->setPen(QPen(QColor(0, 0, 0), 3)); + painter->setBrush(QBrush(QColor(170, 170, 170))); + painter->drawEllipse(pos1, 8, 8); + painter->drawEllipse(pos2, 8, 8); } + painter->restore(); + Q_UNUSED(option); Q_UNUSED(widget); } \ No newline at end of file diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index 50d4213d..e3a1b346 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -41,6 +41,11 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis QGraphicsTextItem *text; bool isHovered; + // bool isSelected; + + QColor defaultBorderColor; + QColor highlightBorderColor; + QColor selectedBorderColor; public: explicit Node(); @@ -156,7 +161,7 @@ class Connection : public QGraphicsPathItem, public QEnableSharedFromThisstartPort = port; + activeCon->connectState = ConnectionState::Dragging; - activeCon->pos1 = scenePos; + activeCon->pos1 = port->scenePos(); activeCon->pos2 = scenePos; activeCon->updatePathFromPositions(); @@ -377,6 +378,7 @@ bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event) // it's okay to check this since the two prior checks // would have invalidated same-type and same-port connections + // todo: override connection if (rightPort->connections.count() != 0) { isConValid = false; From 330cc35f49b18776659f20dc9d480c94ff134845 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 30 Sep 2022 08:41:58 -0400 Subject: [PATCH 018/100] add port snapping --- src/nodegraph/graph/scene.cpp | 11 ++++++++++- src/nodegraph/graph/scene.h | 3 +++ src/nodegraph/main.cpp | 4 +++- src/nodegraph/nodegraph.cpp | 12 +++++++++++- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 89caa6ca..98e41616 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -275,6 +275,15 @@ Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) QRectF Port::boundingRect() const +{ + // return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); + + // add extra space for hit testing + return QRectF(-_radius * 2, -_radius * 2, _radius * 4, _radius * 4); +} + +QRectF +Port::actualRect() const { return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); } @@ -303,7 +312,7 @@ void Port::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, QWidget *widget) { - auto rect = boundingRect(); + auto rect = actualRect(); QPen pen(QColor(00, 00, 00, 250), 1.0f); painter->setPen(pen); diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index e3a1b346..6d472b32 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -129,6 +129,9 @@ class Port : public QGraphicsObject, public QEnableSharedFromThis QRectF boundingRect() const override; + QRectF + actualRect() const; + void setCenter(float x, float y); QVariant itemChange(GraphicsItemChange change, const QVariant &value); diff --git a/src/nodegraph/main.cpp b/src/nodegraph/main.cpp index 7c2d8200..b60309f5 100644 --- a/src/nodegraph/main.cpp +++ b/src/nodegraph/main.cpp @@ -26,6 +26,7 @@ int main(int argc, char *argv[]) NodePtr outputNode(new Node()); outputNode->addInPort("image"); + outputNode->addOutPort("result"); outputNode->setPos(150, 150); scene->addNode(outputNode); @@ -33,8 +34,9 @@ int main(int argc, char *argv[]) NodePtr node2(new Node()); node2->addInPort("image"); + node2->addInPort("image2"); node2->addOutPort("result"); - node2->setPos(250, 170); + node2->setPos(250, 0); scene->addNode(node2); w.resize(800, 600); diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index 1b54ca4a..12835560 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -314,9 +314,19 @@ bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) bool NodeGraph::sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event) { + auto scenePos = event->scenePos(); if (mbStates.left && !!activeCon) { - activeCon->pos2 = event->scenePos(); + auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); + if (rawPort) + { + // snap if close enough + activeCon->pos2 = rawPort->scenePos(); + } + else + { + activeCon->pos2 = scenePos; + } activeCon->updatePathFromPositions(); } From b8d0a0c5f59771dccbafc3207a309f29532fba26 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 30 Sep 2022 09:23:32 -0400 Subject: [PATCH 019/100] set individual node names - fix connection rendering --- src/nodegraph/graph/scene.cpp | 31 ++++++++++++++++++++----------- src/nodegraph/graph/scene.h | 5 ++++- src/nodegraph/main.cpp | 9 +++++++-- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 98e41616..9a5451f0 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -55,20 +55,13 @@ Node::Node() setCursor(Qt::ClosedHandCursor); text = new QGraphicsTextItem(this); - text->setPlainText("Title"); text->setPos(0, 0); text->setTextWidth(100); text->setDefaultTextColor(QColor(255, 255, 255)); // center title - QTextBlockFormat format; - format.setAlignment(Qt::AlignCenter); - QTextCursor cursor = text->textCursor(); - cursor.select(QTextCursor::Document); - cursor.mergeBlockFormat(format); - cursor.clearSelection(); - text->setTextCursor(cursor); + setName("Title"); text->document()->setDocumentMargin(2); @@ -88,6 +81,20 @@ Node::Node() // setAcceptDrops(true); } +void Node::setName(QString name) +{ + this->name = name; + text->setPlainText(name); + + QTextBlockFormat format; + format.setAlignment(Qt::AlignCenter); + QTextCursor cursor = text->textCursor(); + cursor.select(QTextCursor::Document); + cursor.mergeBlockFormat(format); + cursor.clearSelection(); + text->setTextCursor(cursor); +} + void Node::addInPort(QString name) { PortPtr port(new Port(this)); @@ -264,6 +271,8 @@ QString Port::id() const Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) { + setCursor(Qt::ClosedHandCursor); + // this->setFlag(QGraphicsItem::ItemIsSelectable, false); this->setFlag(QGraphicsItem::ItemSendsScenePositionChanges); @@ -381,7 +390,7 @@ void Connection::paint(QPainter *painter, const QStyleOptionGraphicsItem *option painter->setPen(QPen(QColor(0, 0, 0), 3)); painter->setBrush(QBrush(QColor(150, 150, 150))); - painter->drawEllipse(pos1, 8, 8); + painter->drawEllipse(pos1, 7, 7); painter->setPen(Qt::NoPen); painter->drawEllipse(pos2, 6, 6); @@ -395,8 +404,8 @@ void Connection::paint(QPainter *painter, const QStyleOptionGraphicsItem *option painter->setPen(QPen(QColor(0, 0, 0), 3)); painter->setBrush(QBrush(QColor(170, 170, 170))); - painter->drawEllipse(pos1, 8, 8); - painter->drawEllipse(pos2, 8, 8); + painter->drawEllipse(pos1, 7, 7); + painter->drawEllipse(pos2, 7, 7); } painter->restore(); diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index 6d472b32..2cc9ba6b 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -39,6 +39,7 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis int width; int height; QGraphicsTextItem *text; + QString name; bool isHovered; // bool isSelected; @@ -48,9 +49,11 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis QColor selectedBorderColor; public: - explicit Node(); QVector inPorts; QVector outPorts; + explicit Node(); + + void setName(QString name); void addInPort(QString name); void addOutPort(QString name); diff --git a/src/nodegraph/main.cpp b/src/nodegraph/main.cpp index b60309f5..f6e3b28c 100644 --- a/src/nodegraph/main.cpp +++ b/src/nodegraph/main.cpp @@ -19,24 +19,29 @@ int main(int argc, char *argv[]) auto scene = graph->scene(); NodePtr node(new Node()); + node->setName("Warp"); node->addInPort("image"); node->addInPort("height"); node->addOutPort("image"); scene->addNode(node); NodePtr outputNode(new Node()); + outputNode->setName("Floodfill"); outputNode->addInPort("image"); outputNode->addOutPort("result"); - outputNode->setPos(150, 150); + outputNode->setPos(200, 150); scene->addNode(outputNode); scene->connectNodes(node, "image", outputNode, "image"); NodePtr node2(new Node()); + node2->setName("Stress Test"); node2->addInPort("image"); node2->addInPort("image2"); + node2->addInPort("image3"); + node2->addInPort("image4"); node2->addOutPort("result"); - node2->setPos(250, 0); + node2->setPos(320, 0); scene->addNode(node2); w.resize(800, 600); From 5513b870aec61bb6297866e370e14ccfe332d651 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Wed, 5 Oct 2022 22:25:27 -0400 Subject: [PATCH 020/100] cleanup graph on destructor to prevent segfault --- src/nodegraph/nodegraph.cpp | 11 +++++++++++ src/nodegraph/nodegraph.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index 12835560..07352a09 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -427,4 +427,15 @@ const Port *NodeGraph::getPortAtScenePos(float x, float y) const } return nullptr; +} + +NodeGraph::~NodeGraph() +{ + // remove all items manually otherwise + // smart point destructor of some items + // will cause segfault when cleaning up + // todo: move this to scene items + auto items = this->_scene->items(); + for (auto item : items) + this->_scene->removeItem(item); } \ No newline at end of file diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h index b94cfb8d..c35c1a4c 100644 --- a/src/nodegraph/nodegraph.h +++ b/src/nodegraph/nodegraph.h @@ -46,6 +46,8 @@ class NodeGraph void scaleDown(); + virtual ~NodeGraph(); + protected: void setNodeGraphScene(ScenePtr scene); From a1b6e5c2c7bf9c1d7c819dd10fecffb387024dae Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Thu, 6 Oct 2022 00:32:08 -0400 Subject: [PATCH 021/100] add node deletion --- src/nodegraph/graph/scene.cpp | 53 +++++++++++++++++++++++++++++++++++ src/nodegraph/graph/scene.h | 11 +++++++- src/nodegraph/nodegraph.cpp | 17 +++++++++++ src/nodegraph/nodegraph.h | 13 +++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 9a5451f0..d718da06 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -37,6 +37,43 @@ void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr right this->addItem(conn); } +void Scene::removeNode(NodePtr node) +{ + // gather connections + QList cons; + for (auto port : node->getInPorts()) + { + cons.append(port->connections); + } + + for (auto port : node->getOutPorts()) + { + cons.append(port->connections); + } + + // remove connections + for (auto con : cons) + { + this->removeConnection(con); + } + + // remove node + node->hide(); // fix display cache issue + this->removeItem(node.data()); + + // reshow here in case i forget when re-adding node for + // undo-redo + node->show(); +} + +void Scene::removeConnection(ConnectionPtr con) +{ + con->startPort->removeConnection(con); + con->endPort->removeConnection(con); + + this->removeItem(con.data()); +} + Node::Node() { width = 100; @@ -95,6 +132,16 @@ void Node::setName(QString name) text->setTextCursor(cursor); } +const QVector Node::getInPorts() const +{ + return inPorts; +} + +const QVector Node::getOutPorts() const +{ + return outPorts; +} + void Node::addInPort(QString name) { PortPtr port(new Port(this)); @@ -317,6 +364,12 @@ QVariant Port::itemChange(GraphicsItemChange change, const QVariant &value) return value; } +void Port::removeConnection(ConnectionPtr con) +{ + // todo: make sure this does what it's supposed to do + connections.removeOne(con); +} + void Port::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, QWidget *widget) diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index 2cc9ba6b..dfa632fa 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -32,6 +32,13 @@ class Scene : public QGraphicsScene, public QEnableSharedFromThis Scene(); void addNode(NodePtr node); void connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr rightNode, QString rightInputName); + + // this removes the node and associating connections + // and node from scene + void removeNode(NodePtr node); + + // removes connection and item from scene + void removeConnection(ConnectionPtr con); }; class Node : public QGraphicsObject, public QEnableSharedFromThis @@ -53,6 +60,9 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis QVector outPorts; explicit Node(); + const QVector getInPorts() const; + const QVector getOutPorts() const; + void setName(QString name); void addInPort(QString name); @@ -124,7 +134,6 @@ class Port : public QGraphicsObject, public QEnableSharedFromThis void addConnection(ConnectionPtr con) { connections.append(con); } - // todo: implement void removeConnection(ConnectionPtr con); Port(QGraphicsObject *parent); diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index 07352a09..7693232e 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -117,8 +117,25 @@ void NodeGraph:: void NodeGraph:: keyPressEvent(QKeyEvent *event) { + if (event->key() == Qt::Key_Delete) + { + // delete items! + auto items = this->_scene->selectedItems(); + for (auto item : items) + { + if (item->type() == (int)SceneItemType::Node) + { + auto node = qgraphicsitem_cast(item); + this->_scene->removeNode(node->sharedFromThis()); + } + } + + // package them and pass them to deletion signal + } QGraphicsView::keyPressEvent(event); + + this->invalidateScene(QRect(-1000, -1000, 1000, 1000)); } void NodeGraph:: diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h index c35c1a4c..6136f1e0 100644 --- a/src/nodegraph/nodegraph.h +++ b/src/nodegraph/nodegraph.h @@ -13,8 +13,10 @@ class QPainter; class QWheelEvent; class QShowEvent; class Scene; +class Node; class Connection; typedef QSharedPointer ScenePtr; +typedef QSharedPointer NodePtr; typedef QSharedPointer ConnectionPtr; class Port; @@ -90,4 +92,15 @@ class NodeGraph ScenePtr _scene; MouseButtonStates mbStates; ConnectionPtr activeCon; + + QList nodes; + QList cons; + +signals: + void connectionAdded(ConnectionPtr con); + void connectionRemoved(ConnectionPtr con); + void nodeAdded(NodePtr node); + void nodeRemoved(NodePtr node); + + void itemsDeleted(QList nodes, QList cons); }; \ No newline at end of file From af5444612f9bf4648ccc0aa6b832a3814d2e49f7 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Thu, 6 Oct 2022 01:02:26 -0400 Subject: [PATCH 022/100] add ids to nodes, connections and ports --- src/nodegraph/graph/scene.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index dfa632fa..e7d5afe4 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -43,6 +43,8 @@ class Scene : public QGraphicsScene, public QEnableSharedFromThis class Node : public QGraphicsObject, public QEnableSharedFromThis { + QString _id; + int width; int height; QGraphicsTextItem *text; @@ -60,6 +62,9 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis QVector outPorts; explicit Node(); + const QString id() const { return _id; } + void setId(const QString &id) { _id = id; } + const QVector getInPorts() const; const QVector getOutPorts() const; @@ -129,6 +134,7 @@ class Port : public QGraphicsObject, public QEnableSharedFromThis QString name; QString id() const; + void setId(const QString &id) { _id = id; } int radius() const { return _radius; } @@ -167,6 +173,8 @@ class Connection : public QGraphicsPathItem, public QEnableSharedFromThis Date: Thu, 6 Oct 2022 10:20:29 -0400 Subject: [PATCH 023/100] add node connection removal via dragging from in ports --- src/nodegraph/nodegraph.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index 7693232e..59a34d78 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -298,6 +298,32 @@ bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) { // in-sockets with an active connection are the only // ones that can be edited, and that's the case here + if (port->connections.count() > 0) + { + // get the connection + auto con = port->connections[0]; + + // remove it + _scene->removeConnection(con); + + // make it activeCon + con->endPort.clear(); + con->pos1 = con->startPort->scenePos(); + con->pos2 = scenePos; + activeCon = con; + activeCon->updatePathFromPositions(); + activeCon->connectState = ConnectionState::Dragging; + + // emit connection removal signal + + this->_scene->addItem(activeCon.data()); + setDragMode(QGraphicsView::NoDrag); + return true; + } + else + { + // allow starting connection from left to right? + } } // start new connection else if (port->portType != PortType::Invalid /* in or out */) From bf62e60c7b55a0fbbb96f8df6a654c3057be6833 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 7 Oct 2022 01:24:54 -0400 Subject: [PATCH 024/100] add library class --- src/nodegraph/CMakeLists.txt | 1 + src/nodegraph/library.h | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 src/nodegraph/library.h diff --git a/src/nodegraph/CMakeLists.txt b/src/nodegraph/CMakeLists.txt index 2ca907bf..c4c6019c 100644 --- a/src/nodegraph/CMakeLists.txt +++ b/src/nodegraph/CMakeLists.txt @@ -17,6 +17,7 @@ set(NODEGRAPH_SRCS ) set(NODEGRAPH_HEADERS nodegraph.h + library.h graph/scene.h ) diff --git a/src/nodegraph/library.h b/src/nodegraph/library.h new file mode 100644 index 00000000..ab5024ce --- /dev/null +++ b/src/nodegraph/library.h @@ -0,0 +1,19 @@ +#pragma once + +#include +#include +#include + +class LibraryEntry +{ +public: + QString name; + QString displayName; + QIcon icon; +}; + +class Library +{ +public: + QMap items; +}; \ No newline at end of file From d9ff22559c0c2e4ab55af4c4fd5a1fc09b8f8c4c Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 7 Oct 2022 01:25:05 -0400 Subject: [PATCH 025/100] add bevel node to assets qrc --- src/texturelab/assets.qrc | 1 + 1 file changed, 1 insertion(+) diff --git a/src/texturelab/assets.qrc b/src/texturelab/assets.qrc index 71fe652e..71135891 100644 --- a/src/texturelab/assets.qrc +++ b/src/texturelab/assets.qrc @@ -1,4 +1,5 @@ + ../../public/assets/nodes/bevel.png \ No newline at end of file From 2d2bbc16cc2b254cfc1ab21180ececc20e3acac0 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 7 Oct 2022 01:25:23 -0400 Subject: [PATCH 026/100] display items in library list widgets --- src/texturelab/mainwindow.cpp | 3 +- src/texturelab/models.h | 3 + src/texturelab/widgets/graphwidget.cpp | 2 + src/texturelab/widgets/graphwidget.h | 3 + src/texturelab/widgets/librarywidget.cpp | 80 ++++++++++++++++++++++++ src/texturelab/widgets/librarywidget.h | 19 +++++- 6 files changed, 108 insertions(+), 2 deletions(-) diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index aacce122..b8c5e31d 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -10,6 +10,7 @@ #include "DockAreaWidget.h" #include "widgets/graphwidget.h" +#include "widgets/librarywidget.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) @@ -107,7 +108,7 @@ void MainWindow::setupDocks() setWidgetRatiosInArea(graphArea, {1.0f / 5, 3.0f / 5, 1.0f / 5}); addDock("3D View", ads::BottomDockWidgetArea, new QWidget(this), leftArea); - addDock("Library", ads::BottomDockWidgetArea, new QWidget(this), rightArea); + addDock("Library", ads::BottomDockWidgetArea, new LibraryWidget(), rightArea); setWidgetRatiosInArea(leftArea, {0.5f, 0.5f}); setWidgetRatiosInArea(rightArea, {0.5f, 0.5f}); } diff --git a/src/texturelab/models.h b/src/texturelab/models.h index fefd6c23..3dc5da9f 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -66,6 +66,9 @@ class Connection QString leftItemId; QString rightItemId; + + QString leftName; + QString rightName; }; #endif \ No newline at end of file diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp index 5f7f24ca..63f894bf 100644 --- a/src/texturelab/widgets/graphwidget.cpp +++ b/src/texturelab/widgets/graphwidget.cpp @@ -10,4 +10,6 @@ GraphWidget::GraphWidget() : QMainWindow(nullptr) { graph = new NodeGraph(this); this->setCentralWidget(graph); + + library = nullptr; } \ No newline at end of file diff --git a/src/texturelab/widgets/graphwidget.h b/src/texturelab/widgets/graphwidget.h index 14133850..868f7702 100644 --- a/src/texturelab/widgets/graphwidget.h +++ b/src/texturelab/widgets/graphwidget.h @@ -3,10 +3,13 @@ #include class NodeGraph; +class Library; class GraphWidget : public QMainWindow { public: GraphWidget(); + NodeGraph *graph; + Library *library; }; \ No newline at end of file diff --git a/src/texturelab/widgets/librarywidget.cpp b/src/texturelab/widgets/librarywidget.cpp index e69de29b..85117ada 100644 --- a/src/texturelab/widgets/librarywidget.cpp +++ b/src/texturelab/widgets/librarywidget.cpp @@ -0,0 +1,80 @@ +#include "librarywidget.h" +#include "library.h" + +#include +#include +#include +#include +#include +#include +#include + +LibraryWidget::LibraryWidget() : QWidget() +{ + this->setMinimumWidth(100); + this->setLayout(new QVBoxLayout()); + + // search box + searchBar = new QLineEdit(this); + searchBar->setPlaceholderText("search"); + searchBar->setAlignment(Qt::AlignLeft); + connect(searchBar, &QLineEdit::textChanged, [=](QString text) + { qDebug() << "search changed"; }); + + this->layout()->addWidget(searchBar); + + // list widget + listWidget = new LibraryListWidget(); + listWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + this->layout()->addWidget(listWidget); + + this->setLibrary(nullptr); +} + +void LibraryWidget::setLibrary(Library *lib) +{ + QSize currentSize = QSize(90, 90); + // for (auto &libraryItem : lib->items) + for (int i = 0; i < 10; i++) + { + QListWidgetItem *item = new QListWidgetItem; + item->setData(Qt::DisplayRole, "Node"); + // item->setData(Qt::DisplayRole, libraryItem.name); + + item->setSizeHint(currentSize); + item->setTextAlignment(Qt::AlignCenter); + item->setFlags(item->flags() | Qt::ItemIsEditable); + item->setIcon(QIcon(":nodes/bevel.png")); + + this->listWidget->addItem(item); + } +} + +LibraryListWidget::LibraryListWidget() : QListWidget() +{ + setAlternatingRowColors(false); + setSpacing(0); + setViewMode(QListWidget::IconMode); + setIconSize(QSize(70, 70)); + setMouseTracking(true); + setEditTriggers(QAbstractItemView::NoEditTriggers); + + setDragDropMode(QAbstractItemView::DragOnly); + setResizeMode(QListWidget::Adjust); + setDefaultDropAction(Qt::CopyAction); + setSelectionMode(QAbstractItemView::SingleSelection); + + setWordWrap(true); + setGridSize(QSize(90, 90)); + + setContentsMargins(0, 0, 0, 0); + + // setDragEnabled(true); + // viewport()->setAcceptDrops(true); + // setAcceptDrops(true); + setDropIndicatorShown(true); + + setStyleSheet( + "QListView::item{ border-radius: 2px; border: 0px solid rgba(0,0,0,1); margin-left: 6px; }" + "QListView::item:hover{border: 1px solid rgba(50,150,250,1); }"); +} \ No newline at end of file diff --git a/src/texturelab/widgets/librarywidget.h b/src/texturelab/widgets/librarywidget.h index acde56cc..62083f6a 100644 --- a/src/texturelab/widgets/librarywidget.h +++ b/src/texturelab/widgets/librarywidget.h @@ -1,9 +1,26 @@ #pragma once #include +#include -class LibraryWidget : public QFrame +class Library; +class LibraryListWidget; +class QLineEdit; + +// https://stackoverflow.com/questions/37331270/how-to-create-grid-style-qlistwidget +class LibraryWidget : public QWidget { + // Q_OBJECT public: LibraryWidget(); + void setLibrary(Library *lib); + + LibraryListWidget *listWidget; + QLineEdit *searchBar; +}; + +class LibraryListWidget : public QListWidget +{ +public: + LibraryListWidget(); }; \ No newline at end of file From de2c4c8880a1da193c13bda1715e657b421034f8 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 7 Oct 2022 17:26:52 -0400 Subject: [PATCH 027/100] move library to texturelab project --- src/nodegraph/CMakeLists.txt | 2 +- src/nodegraph/library.h | 19 ------------ src/texturelab/libraries/library.cpp | 44 ++++++++++++++++++++++++++++ src/texturelab/libraries/library.h | 31 ++++++++++++++++++++ 4 files changed, 76 insertions(+), 20 deletions(-) delete mode 100644 src/nodegraph/library.h create mode 100644 src/texturelab/libraries/library.cpp create mode 100644 src/texturelab/libraries/library.h diff --git a/src/nodegraph/CMakeLists.txt b/src/nodegraph/CMakeLists.txt index c4c6019c..39e28517 100644 --- a/src/nodegraph/CMakeLists.txt +++ b/src/nodegraph/CMakeLists.txt @@ -17,7 +17,7 @@ set(NODEGRAPH_SRCS ) set(NODEGRAPH_HEADERS nodegraph.h - library.h + utils.h graph/scene.h ) diff --git a/src/nodegraph/library.h b/src/nodegraph/library.h deleted file mode 100644 index ab5024ce..00000000 --- a/src/nodegraph/library.h +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include -#include -#include - -class LibraryEntry -{ -public: - QString name; - QString displayName; - QIcon icon; -}; - -class Library -{ -public: - QMap items; -}; \ No newline at end of file diff --git a/src/texturelab/libraries/library.cpp b/src/texturelab/libraries/library.cpp new file mode 100644 index 00000000..e588d808 --- /dev/null +++ b/src/texturelab/libraries/library.cpp @@ -0,0 +1,44 @@ +#include "../models.h" +#include "library.h" + +#include + +TextureNodePtr Library::createNode(QString name) +{ + if (this->items.contains(name)) + { + auto &item = items[name]; + if (item.name == name) + { + auto node = item.factoryFunction(); + return node; + } + } + + return TextureNodePtr(nullptr); +} + +void Library::addNode(QString name, + QString displayName, + QString iconPath, + std::function factoryFunction) +{ + + LibraryEntry entry; + entry.name = name; + entry.displayName = displayName; + entry.icon = QIcon(iconPath); + entry.factoryFunction = factoryFunction; + + items[name] = entry; +} + +bool Library::hasNode(QString name) +{ + return items.contains(name); +} + +LibraryV1::LibraryV1() : Library() +{ + // add items +} \ No newline at end of file diff --git a/src/texturelab/libraries/library.h b/src/texturelab/libraries/library.h new file mode 100644 index 00000000..2cd3b802 --- /dev/null +++ b/src/texturelab/libraries/library.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include +#include +#include + +class LibraryEntry +{ +public: + QString name; + QString displayName; + QIcon icon; + std::function factoryFunction; +}; + +class Library +{ +public: + QMap items; + virtual TextureNodePtr createNode(QString name); + + void addNode(QString name, QString displayName, QString iconPath, std::function factoryFunction); + bool hasNode(QString name); +}; + +class LibraryV1 : public Library +{ +public: + LibraryV1(); +}; \ No newline at end of file From d98642035d3bba7a403190fa45c1f960b5e60721 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 7 Oct 2022 17:27:04 -0400 Subject: [PATCH 028/100] add uuid utils --- src/nodegraph/graph/scene.cpp | 2 +- src/nodegraph/utils.h | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 src/nodegraph/utils.h diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index d718da06..46f0af6e 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -326,7 +326,7 @@ Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) _radius = 7; name = ""; portType = PortType::In; - _id = QUuid::createUuid().toString(); + _id = QUuid::createUuid().toString(QUuid::WithoutBraces); } QRectF diff --git a/src/nodegraph/utils.h b/src/nodegraph/utils.h new file mode 100644 index 00000000..6b9ceb66 --- /dev/null +++ b/src/nodegraph/utils.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +QString genGuid() +{ + return QUuid::createUuid().toString(QUuid::WithoutBraces); +} \ No newline at end of file From 3bfaaedd9f2a5fef21422aea0cdfd9b26efd82cc Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Fri, 7 Oct 2022 17:27:20 -0400 Subject: [PATCH 029/100] begin work on parser --- src/texturelab/CMakeLists.txt | 5 +++++ src/texturelab/models.cpp | 1 + src/texturelab/models.h | 32 +++++++++++++++++++++++++++----- src/texturelab/project.cpp | 35 +++++++++++++++++++++++++++++++++++ src/texturelab/project.h | 9 +++++++++ 5 files changed, 77 insertions(+), 5 deletions(-) create mode 100644 src/texturelab/models.cpp create mode 100644 src/texturelab/project.cpp create mode 100644 src/texturelab/project.h diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index e5d3b66e..15fd8132 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -19,8 +19,13 @@ set(PROJECT_SOURCES ./mainwindow.cpp ./mainwindow.h ./models.h + ./models.cpp + ./project.h + ./project.cpp ./props.h ./props.cpp + ./libraries/library.h + ./libraries/library.cpp ./widgets/graphwidget.h ./widgets/graphwidget.cpp ./widgets/librarywidget.h diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp new file mode 100644 index 00000000..49259703 --- /dev/null +++ b/src/texturelab/models.cpp @@ -0,0 +1 @@ +#include "models.h" diff --git a/src/texturelab/models.h b/src/texturelab/models.h index 3dc5da9f..ea6a0866 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -5,6 +5,21 @@ #include #include #include +#include +#include + +class TextureProject; +class TextureNode; +class Comment; +class Frame; +class Connection; +typedef QSharedPointer TextureProjectPtr; +typedef QSharedPointer TextureNodePtr; +typedef QSharedPointer CommentPtr; +typedef QSharedPointer FramePtr; +typedef QSharedPointer ConnectionPtr; + +class Prop; class Project { @@ -23,7 +38,7 @@ class ProjectFile QByteArray contents(); }; -class Texture +class TextureProject : public QEnableSharedFromThis { public: int randomSeed; @@ -34,14 +49,21 @@ class Texture QMap frames; }; -class TextureNode +class TextureNode : public QEnableSharedFromThis { public: QString id; QVector2D pos; + + long randomSeed; + QString exportName; + + QList props; + + void setProp(QString propName, QVariant value); }; -class Comment +class Comment : public QEnableSharedFromThis { public: QString id; @@ -49,7 +71,7 @@ class Comment QVector2D pos; }; -class Frame +class Frame : public QEnableSharedFromThis { public: QString id; @@ -59,7 +81,7 @@ class Frame QVector2D size; }; -class Connection +class Connection : public QEnableSharedFromThis { public: QString id; diff --git a/src/texturelab/project.cpp b/src/texturelab/project.cpp new file mode 100644 index 00000000..3860beb4 --- /dev/null +++ b/src/texturelab/project.cpp @@ -0,0 +1,35 @@ +#include "project.h" +#include +#include + +#include "" + +TextureProjectPtr Project::loadTexture(QString path) +{ + QFile file(path); + file.open(QIODevice::ReadOnly); + QJsonParseError error; + auto json = QJsonDocument::fromJson(file.readAll(), &error); + file.close(); + + if (error.error) + { + // report error + return TextureProjectPtr(nullptr); + } + + TextureProjectPtr texture(new TextureProject()); + + qDebug() << json["libraryVersion"].toString(); + + // create library from version + Library *lib = new LibraryV1(); + + // load nodes + auto nodeArray = json["nodes"].toArray(); + for (auto nodeDef : nodeArray) + { + } + + return texture; +} \ No newline at end of file diff --git a/src/texturelab/project.h b/src/texturelab/project.h new file mode 100644 index 00000000..48a53b0e --- /dev/null +++ b/src/texturelab/project.h @@ -0,0 +1,9 @@ +#pragma once + +#include "models.h" + +class Project +{ +public: + TextureProjectPtr loadTexture(QString path); +}; \ No newline at end of file From 65a2f32e68b27cdf3bea5d5dd0b3fb2d765a2b23 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 8 Oct 2022 01:52:28 -0400 Subject: [PATCH 030/100] add basic project parsing --- src/texturelab/libraries/library.h | 4 ++ src/texturelab/mainwindow.cpp | 23 ++++++++++- src/texturelab/mainwindow.h | 9 ++++ src/texturelab/models.cpp | 27 ++++++++++++ src/texturelab/models.h | 30 +++++++------- src/texturelab/project.cpp | 52 ++++++++++++++++++++++-- src/texturelab/project.h | 2 +- src/texturelab/props.cpp | 5 +++ src/texturelab/props.h | 6 +-- src/texturelab/widgets/graphwidget.cpp | 5 +++ src/texturelab/widgets/graphwidget.h | 5 +++ src/texturelab/widgets/librarywidget.cpp | 2 +- 12 files changed, 145 insertions(+), 25 deletions(-) diff --git a/src/texturelab/libraries/library.h b/src/texturelab/libraries/library.h index 2cd3b802..f34be1cc 100644 --- a/src/texturelab/libraries/library.h +++ b/src/texturelab/libraries/library.h @@ -4,6 +4,10 @@ #include #include #include +#include + +class TextureNode; +typedef QSharedPointer TextureNodePtr; class LibraryEntry { diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index b8c5e31d..405a1e10 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include "DockSplitter.h" #include "DockAreaWidget.h" @@ -12,6 +14,8 @@ #include "widgets/graphwidget.h" #include "widgets/librarywidget.h" +#include "project.h" + MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { @@ -28,7 +32,8 @@ MainWindow::MainWindow(QWidget *parent) void MainWindow::setupMenus() { auto fileMenu = this->menuBar()->addMenu("File"); - fileMenu->addAction("Open Project", []() {}); + fileMenu->addAction("Open Project", [=]() + { this->openProject(); }); fileMenu->addAction("New Project", []() {}); fileMenu->addSeparator(); fileMenu->addAction("Save", []() {}); @@ -124,6 +129,22 @@ ads::CDockAreaWidget *MainWindow::addDock(const QString &title, ads::DockWidgetA return newAreaWidget; } +void MainWindow::openProject() +{ + auto filePath = QFileDialog::getOpenFileName(this, "Open Texture File", "", "Texturelab File (*.texture)"); + + if (filePath.isNull() || filePath.isEmpty()) + { + return; + } + + auto project = Project::loadTexture(filePath); + this->project = project; + + // pass project to graph + this->graphWidget->setTextureProject(project); +} + MainWindow::~MainWindow() { } \ No newline at end of file diff --git a/src/texturelab/mainwindow.h b/src/texturelab/mainwindow.h index 917164ee..180ec80a 100644 --- a/src/texturelab/mainwindow.h +++ b/src/texturelab/mainwindow.h @@ -3,6 +3,7 @@ #include #include +#include #include "DockManager.h" class GraphWidget; @@ -11,6 +12,9 @@ class PropertiesWidget; class View2DWidget; class View3DWidget; +class TextureProject; +typedef QSharedPointer TextureProjectPtr; + class QToolBar; class MainWindow : public QMainWindow { @@ -25,6 +29,9 @@ class MainWindow : public QMainWindow void setupMenus(); void setupDocks(); + // menu callbacks + void openProject(); + ads::CDockAreaWidget *addDock(const QString &title, ads::DockWidgetArea area, QWidget *widget, ads::CDockAreaWidget *areaWidget); private: @@ -37,5 +44,7 @@ class MainWindow : public QMainWindow PropertiesWidget *propWidget; View2DWidget *view2DWidget; View3DWidget *view3DWidget; + + TextureProjectPtr project; }; #endif // MAINWINDOW_H diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index 49259703..40f28af8 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -1 +1,28 @@ #include "models.h" +#include "props.h" + +TextureNodePtr TextureProject::getNodeById(const QString &id) +{ + return nodes[id]; +} + +void TextureProject::addConnection(TextureNodePtr leftNode, TextureNodePtr rightNode, QString rightNodeInput) +{ + auto con = ConnectionPtr(new Connection()); + con->id = createGuid(); + + con->leftNode = leftNode; + con->rightNode = rightNode; + + con->rightNodeInputName = rightNodeInput; + + this->connections[con->id] = con; + + // todo: request updates +} + +void TextureNode::setProp(QString propName, QVariant value) +{ + if (props.contains(propName)) + props[propName]->setValue(value); +} \ No newline at end of file diff --git a/src/texturelab/models.h b/src/texturelab/models.h index ea6a0866..3071ee1e 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -20,11 +20,7 @@ typedef QSharedPointer FramePtr; typedef QSharedPointer ConnectionPtr; class Prop; - -class Project -{ -public: -}; +class Library; enum class PackageFileType { @@ -42,11 +38,17 @@ class TextureProject : public QEnableSharedFromThis { public: int randomSeed; + Library *library; + + QMap nodes; + QMap connections; + QMap comments; + QMap frames; + + TextureNodePtr getNodeById(const QString &id); - QMap nodes; - QMap connections; - QMap comments; - QMap frames; + // todo: make two port variant + void addConnection(TextureNodePtr leftNode, TextureNodePtr rightNode, QString rightNodeInput); }; class TextureNode : public QEnableSharedFromThis @@ -58,7 +60,7 @@ class TextureNode : public QEnableSharedFromThis long randomSeed; QString exportName; - QList props; + QMap props; void setProp(QString propName, QVariant value); }; @@ -86,11 +88,11 @@ class Connection : public QEnableSharedFromThis public: QString id; - QString leftItemId; - QString rightItemId; + TextureNodePtr leftNode; + TextureNodePtr rightNode; - QString leftName; - QString rightName; + QString leftNodeOutputName; + QString rightNodeInputName; }; #endif \ No newline at end of file diff --git a/src/texturelab/project.cpp b/src/texturelab/project.cpp index 3860beb4..fb1fa10a 100644 --- a/src/texturelab/project.cpp +++ b/src/texturelab/project.cpp @@ -1,8 +1,9 @@ #include "project.h" +#include "libraries/library.h" #include #include - -#include "" +#include +#include TextureProjectPtr Project::loadTexture(QString path) { @@ -25,11 +26,56 @@ TextureProjectPtr Project::loadTexture(QString path) // create library from version Library *lib = new LibraryV1(); + // scene objects + auto sceneObj = json["scene"].toObject(); + auto sceneNodesObj = sceneObj["nodes"].toObject(); + // load nodes auto nodeArray = json["nodes"].toArray(); - for (auto nodeDef : nodeArray) + for (auto item : nodeArray) { + auto nodeDef = item.toObject(); + qDebug() << nodeDef; + + auto node = lib->createNode(nodeDef["typeName"].toString()); + node->exportName = nodeDef["exportName"].toString(""); + node->id = nodeDef["id"].toString(); + node->randomSeed = nodeDef["randomSeed"].toInteger(0); + + // get position from scene + // we're converging the scene and designer props into one + auto sceneObj = sceneNodesObj[node->id].toObject(); + auto x = sceneObj["x"].toDouble(); + auto y = sceneObj["y"].toDouble(); + node->pos = QVector2D(x, y); + + // add props + auto propObj = nodeDef["properties"].toObject(); + for (auto key : propObj.keys()) + { + node->setProp(key, propObj[key].toVariant()); + } + + texture->nodes[node->id] = node; } + // load connections + auto conArray = json["connections"].toArray(); + for (auto item : conArray) + { + auto conObj = item.toObject(); + + QString leftNodeId = conObj["leftNodeId"].toString(); + TextureNodePtr leftNode = texture->getNodeById(leftNodeId); + + QString rightNodeId = conObj["rightNodeId"].toString(); + TextureNodePtr rightNode = texture->getNodeById(rightNodeId); + + QString rightNodeInputId = conObj["rightNodeInput"].toString(); + texture->addConnection(leftNode, rightNode, rightNodeInputId); + } + + texture->library = lib; + return texture; } \ No newline at end of file diff --git a/src/texturelab/project.h b/src/texturelab/project.h index 48a53b0e..445fba83 100644 --- a/src/texturelab/project.h +++ b/src/texturelab/project.h @@ -5,5 +5,5 @@ class Project { public: - TextureProjectPtr loadTexture(QString path); + static TextureProjectPtr loadTexture(QString path); }; \ No newline at end of file diff --git a/src/texturelab/props.cpp b/src/texturelab/props.cpp index e261d69e..f0451ae0 100644 --- a/src/texturelab/props.cpp +++ b/src/texturelab/props.cpp @@ -2,6 +2,11 @@ #include +QString createGuid() +{ + return QUuid::createUuid().toString(QUuid::WithoutBraces); +} + QString PropType::toString(Value propType) { switch (propType) diff --git a/src/texturelab/props.h b/src/texturelab/props.h index ce4abb41..b7fb9582 100644 --- a/src/texturelab/props.h +++ b/src/texturelab/props.h @@ -10,11 +10,7 @@ class Prop; // http://techiesolves.blogspot.com/2018/01/base64-qstring-to-qimage-to-qstring-in.html -QString createGuid() -{ - return QUuid::createUuid().toString(QUuid::WithoutBraces); -} - +QString createGuid(); class PropType { public: diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp index 63f894bf..81e43a9f 100644 --- a/src/texturelab/widgets/graphwidget.cpp +++ b/src/texturelab/widgets/graphwidget.cpp @@ -12,4 +12,9 @@ GraphWidget::GraphWidget() : QMainWindow(nullptr) this->setCentralWidget(graph); library = nullptr; +} + +void GraphWidget::setTextureProject(TextureProjectPtr project) +{ + // generate nodes from texture project } \ No newline at end of file diff --git a/src/texturelab/widgets/graphwidget.h b/src/texturelab/widgets/graphwidget.h index 868f7702..c97394e8 100644 --- a/src/texturelab/widgets/graphwidget.h +++ b/src/texturelab/widgets/graphwidget.h @@ -5,11 +5,16 @@ class NodeGraph; class Library; +class TextureProject; +typedef QSharedPointer TextureProjectPtr; + class GraphWidget : public QMainWindow { public: GraphWidget(); + void setTextureProject(TextureProjectPtr project); + NodeGraph *graph; Library *library; }; \ No newline at end of file diff --git a/src/texturelab/widgets/librarywidget.cpp b/src/texturelab/widgets/librarywidget.cpp index 85117ada..fef3792a 100644 --- a/src/texturelab/widgets/librarywidget.cpp +++ b/src/texturelab/widgets/librarywidget.cpp @@ -1,5 +1,5 @@ #include "librarywidget.h" -#include "library.h" +#include "./libraries/library.h" #include #include From 790fa3e7d52fbd84f1219dcfe00bd77f3fbd73d7 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 8 Oct 2022 03:18:25 -0400 Subject: [PATCH 031/100] add formating config --- .clang-format | 1 + 1 file changed, 1 insertion(+) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..9b535b6a --- /dev/null +++ b/.clang-format @@ -0,0 +1 @@ +NamespaceIndentation: None \ No newline at end of file From 71aee1915c2f7cc113c383b03141300c8ae8245f Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 8 Oct 2022 03:18:51 -0400 Subject: [PATCH 032/100] generate nodes in basic project loading --- src/nodegraph/graph/scene.cpp | 691 +++++++++++------------- src/nodegraph/graph/scene.h | 230 ++++---- src/nodegraph/main.cpp | 75 +-- src/nodegraph/nodegraph.cpp | 715 +++++++++++-------------- src/nodegraph/nodegraph.h | 102 ++-- src/texturelab/CMakeLists.txt | 1 + src/texturelab/libraries/library.cpp | 12 + src/texturelab/libraries/library.h | 14 + src/texturelab/libraries/libv2.h | 55 ++ src/texturelab/models.cpp | 7 +- src/texturelab/models.h | 10 + src/texturelab/project.cpp | 4 +- src/texturelab/widgets/graphwidget.cpp | 16 +- src/texturelab/widgets/graphwidget.h | 13 +- 14 files changed, 953 insertions(+), 992 deletions(-) create mode 100644 src/texturelab/libraries/libv2.h diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 46f0af6e..f7f01306 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -1,468 +1,417 @@ #include "scene.h" +#include #include #include -#include #include #include #include #include -Scene::Scene() : QGraphicsScene() -{ -} - -void Scene::addNode(NodePtr node) -{ - this->addItem(node.data()); -} - -void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr rightNode, QString rightInputName) -{ - auto leftPort = leftNode->getOutPortByName(leftOutputName); - auto rightPort = rightNode->getInPortByName(rightInputName); +namespace nodegraph { - // create new connection item from ports - auto conn = new Connection(); - conn->startPort = leftPort; - conn->endPort = rightPort; - conn->updatePosFromPorts(); - conn->updatePathFromPositions(); +Scene::Scene() : QGraphicsScene() {} - ConnectionPtr connPtr(conn); +void Scene::addNode(NodePtr node) { this->addItem(node.data()); } - // also add them to the ports - leftPort->addConnection(connPtr); - rightPort->addConnection(connPtr); +void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, + NodePtr rightNode, QString rightInputName) { + auto leftPort = leftNode->getOutPortByName(leftOutputName); + auto rightPort = rightNode->getInPortByName(rightInputName); - this->addItem(conn); -} + // create new connection item from ports + auto conn = new Connection(); + conn->startPort = leftPort; + conn->endPort = rightPort; + conn->updatePosFromPorts(); + conn->updatePathFromPositions(); -void Scene::removeNode(NodePtr node) -{ - // gather connections - QList cons; - for (auto port : node->getInPorts()) - { - cons.append(port->connections); - } + ConnectionPtr connPtr(conn); - for (auto port : node->getOutPorts()) - { - cons.append(port->connections); - } + // also add them to the ports + leftPort->addConnection(connPtr); + rightPort->addConnection(connPtr); - // remove connections - for (auto con : cons) - { - this->removeConnection(con); - } - - // remove node - node->hide(); // fix display cache issue - this->removeItem(node.data()); + this->addItem(conn); +} - // reshow here in case i forget when re-adding node for - // undo-redo - node->show(); +void Scene::removeNode(NodePtr node) { + // gather connections + QList cons; + for (auto port : node->getInPorts()) { + cons.append(port->connections); + } + + for (auto port : node->getOutPorts()) { + cons.append(port->connections); + } + + // remove connections + for (auto con : cons) { + this->removeConnection(con); + } + + // remove node + node->hide(); // fix display cache issue + this->removeItem(node.data()); + + // reshow here in case i forget when re-adding node for + // undo-redo + node->show(); } -void Scene::removeConnection(ConnectionPtr con) -{ - con->startPort->removeConnection(con); - con->endPort->removeConnection(con); +void Scene::removeConnection(ConnectionPtr con) { + con->startPort->removeConnection(con); + con->endPort->removeConnection(con); - this->removeItem(con.data()); + this->removeItem(con.data()); } -Node::Node() -{ - width = 100; - height = 100; - isHovered = false; +Node::Node() { + width = 100; + height = 100; + isHovered = false; - defaultBorderColor = QColor(0, 0, 0); - highlightBorderColor = QColor(120, 120, 120); - selectedBorderColor = QColor(200, 200, 200); + defaultBorderColor = QColor(0, 0, 0); + highlightBorderColor = QColor(120, 120, 120); + selectedBorderColor = QColor(200, 200, 200); - setFlag(QGraphicsItem::ItemIsMovable, true); - setFlag(QGraphicsItem::ItemIsFocusable, true); - setFlag(QGraphicsItem::ItemIsSelectable, true); - setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); + setFlag(QGraphicsItem::ItemIsMovable, true); + setFlag(QGraphicsItem::ItemIsFocusable, true); + setFlag(QGraphicsItem::ItemIsSelectable, true); + setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); - setCursor(Qt::ClosedHandCursor); + setCursor(Qt::ClosedHandCursor); - text = new QGraphicsTextItem(this); + text = new QGraphicsTextItem(this); - text->setPos(0, 0); - text->setTextWidth(100); - text->setDefaultTextColor(QColor(255, 255, 255)); + text->setPos(0, 0); + text->setTextWidth(100); + text->setDefaultTextColor(QColor(255, 255, 255)); - // center title - setName("Title"); + // center title + setName("Title"); - text->document()->setDocumentMargin(2); + text->document()->setDocumentMargin(2); - QFont font = text->font(); - font.setWeight(QFont::Bold); - font.setPixelSize(12); - text->setFont(font); + QFont font = text->font(); + font.setWeight(QFont::Bold); + font.setPixelSize(12); + text->setFont(font); - QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; - effect->setBlurRadius(20); - effect->setXOffset(0); - effect->setYOffset(0); - effect->setColor(QColor(00, 00, 00, 70)); - setGraphicsEffect(effect); + QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; + effect->setBlurRadius(20); + effect->setXOffset(0); + effect->setYOffset(0); + effect->setColor(QColor(00, 00, 00, 70)); + setGraphicsEffect(effect); - setAcceptHoverEvents(true); - // setAcceptDrops(true); + setAcceptHoverEvents(true); + // setAcceptDrops(true); } -void Node::setName(QString name) -{ - this->name = name; - text->setPlainText(name); - - QTextBlockFormat format; - format.setAlignment(Qt::AlignCenter); - QTextCursor cursor = text->textCursor(); - cursor.select(QTextCursor::Document); - cursor.mergeBlockFormat(format); - cursor.clearSelection(); - text->setTextCursor(cursor); +void Node::setName(QString name) { + this->name = name; + text->setPlainText(name); + + QTextBlockFormat format; + format.setAlignment(Qt::AlignCenter); + QTextCursor cursor = text->textCursor(); + cursor.select(QTextCursor::Document); + cursor.mergeBlockFormat(format); + cursor.clearSelection(); + text->setTextCursor(cursor); } -const QVector Node::getInPorts() const -{ - return inPorts; +const QVector Node::getInPorts() const { return inPorts; } + +const QVector Node::getOutPorts() const { return outPorts; } + +void Node::addInPort(QString name) { + PortPtr port(new Port(this)); + port->name = name; + port->portType = PortType::In; + port->node = this->sharedFromThis(); + inPorts.append(port); + + // top and bottom padding for sockets + const int pad = inPorts.count() < 5 ? 10 : 0; + + // sort in sockets + int incr = (this->height - pad * 2) / inPorts.count(); + int mid = incr / 2.0; + int i = 0; + for (auto port : inPorts) { + int y = pad + i * incr + mid; + int x = 0; + port->setCenter(x, y); + i++; + } } -const QVector Node::getOutPorts() const -{ - return outPorts; +void Node::addOutPort(QString name) { + PortPtr port(new Port(this)); + port->name = name; + port->portType = PortType::Out; + port->node = this->sharedFromThis(); + outPorts.append(port); + + // top and bottom padding for sockets + const int pad = outPorts.count() < 5 ? 10 : 0; + + // sort in sockets + int incr = (this->height - pad * 2) / outPorts.count(); + int mid = incr / 2.0; + int i = 0; + for (auto port : outPorts) { + int y = pad + i * incr + mid; + int x = width; + port->setCenter(x, y); + i++; + } } -void Node::addInPort(QString name) -{ - PortPtr port(new Port(this)); - port->name = name; - port->portType = PortType::In; - port->node = this->sharedFromThis(); - inPorts.append(port); - - // top and bottom padding for sockets - const int pad = inPorts.count() < 5 ? 10 : 0; - - // sort in sockets - int incr = (this->height - pad * 2) / inPorts.count(); - int mid = incr / 2.0; - int i = 0; - for (auto port : inPorts) - { - int y = pad + i * incr + mid; - int x = 0; - port->setCenter(x, y); - i++; - } -} +PortPtr Node::getPortById(QString id) { + for (auto port : inPorts) { + if (port->id() == id) + return port; + } -void Node::addOutPort(QString name) -{ - PortPtr port(new Port(this)); - port->name = name; - port->portType = PortType::Out; - port->node = this->sharedFromThis(); - outPorts.append(port); - - // top and bottom padding for sockets - const int pad = outPorts.count() < 5 ? 10 : 0; - - // sort in sockets - int incr = (this->height - pad * 2) / outPorts.count(); - int mid = incr / 2.0; - int i = 0; - for (auto port : outPorts) - { - int y = pad + i * incr + mid; - int x = width; - port->setCenter(x, y); - i++; - } -} - -PortPtr Node::getPortById(QString id) -{ - for (auto port : inPorts) - { - if (port->id() == id) - return port; - } + for (auto port : outPorts) { + if (port->id() == id) + return port; + } - for (auto port : outPorts) - { - if (port->id() == id) - return port; - } - - Q_ASSERT(false); + Q_ASSERT(false); } -PortPtr Node::getInPortByName(QString name) -{ - for (auto port : inPorts) - { - if (port->name == name) - return port; - } +PortPtr Node::getInPortByName(QString name) { + for (auto port : inPorts) { + if (port->name == name) + return port; + } - Q_ASSERT(false); + Q_ASSERT(false); } -PortPtr Node::getOutPortByName(QString name) -{ - for (auto port : outPorts) - { - if (port->name == name) - return port; - } +PortPtr Node::getOutPortByName(QString name) { + for (auto port : outPorts) { + if (port->name == name) + return port; + } - Q_ASSERT(false); + Q_ASSERT(false); } -QRectF -Node::boundingRect() const -{ - return QRectF(0, 0, 100, 100); -} +QRectF Node::boundingRect() const { return QRectF(0, 0, 100, 100); } // void Node::mouseMoveEvent(QGraphicsSceneMouseEvent *event) // { // QGraphicsObject::mouseMoveEvent(event); // } -void Node::hoverEnterEvent(QGraphicsSceneHoverEvent *event) -{ - this->text->hide(); - this->isHovered = true; - QGraphicsObject::hoverEnterEvent(event); +void Node::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { + this->text->hide(); + this->isHovered = true; + QGraphicsObject::hoverEnterEvent(event); } -void Node::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) -{ - this->text->show(); - this->isHovered = false; - QGraphicsObject::hoverLeaveEvent(event); +void Node::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { + this->text->show(); + this->isHovered = false; + QGraphicsObject::hoverLeaveEvent(event); } -void Node::paint(QPainter *painter, - QStyleOptionGraphicsItem const *option, - QWidget *widget) -{ - const int titleHeight = 20; - const int nodeWidth = width; - const int nodeHeight = height; - const int titleRadius = 4; - const QColor titleColor(0, 0, 0); - - auto rect = boundingRect(); - - QColor borderColor; - if (isSelected()) - borderColor = this->selectedBorderColor; - else if (isHovered) - borderColor = this->highlightBorderColor; - else - borderColor = this->defaultBorderColor; - - // not really needed - // painter->setClipRect(option->exposedRect); - - // smooth rendering - // painter->setRenderHint(QPainter::Antialiasing); - // painter->setRenderHint(QPainter::TextAntialiasing); - - // title tab - // QPainterPath titlePath; - // titlePath.setFillRule(Qt::WindingFill); - // titlePath.addRect(0, 10, width, titleHeight - 10); - // titlePath.addRoundedRect(0, 0, nodeWidth, titleHeight, titleRadius, titleRadius); - // painter->fillPath(titlePath, QBrush(QColor(255, 255, 255))); - - // // draw text node seperator - // QPainterPath block; - // block.setFillRule(Qt::WindingFill); - // block.addRect(0, titleHeight, nodeWidth, 3); - // painter->fillPath(block, QBrush(QColor(30, 30, 30, 160))); - - // QPen pen(QColor(00, 00, 00, 250), .5); - // QPen pen(borderColor, .5); - // painter->setPen(pen); - - // background - QPainterPath bgPath; - bgPath.setFillRule(Qt::WindingFill); - bgPath.addRoundedRect(0, 0, nodeWidth, nodeHeight, titleRadius, titleRadius); - painter->fillPath(bgPath, QBrush(QColor(10, 10, 10, 255))); - - // draw border - painter->setPen(QPen(borderColor, 3)); - painter->drawRoundedRect(rect, titleRadius, titleRadius); - - // draw highlight +void Node::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, + QWidget *widget) { + const int titleHeight = 20; + const int nodeWidth = width; + const int nodeHeight = height; + const int titleRadius = 4; + const QColor titleColor(0, 0, 0); + + auto rect = boundingRect(); + + QColor borderColor; + if (isSelected()) + borderColor = this->selectedBorderColor; + else if (isHovered) + borderColor = this->highlightBorderColor; + else + borderColor = this->defaultBorderColor; + + // not really needed + // painter->setClipRect(option->exposedRect); + + // smooth rendering + // painter->setRenderHint(QPainter::Antialiasing); + // painter->setRenderHint(QPainter::TextAntialiasing); + + // title tab + // QPainterPath titlePath; + // titlePath.setFillRule(Qt::WindingFill); + // titlePath.addRect(0, 10, width, titleHeight - 10); + // titlePath.addRoundedRect(0, 0, nodeWidth, titleHeight, titleRadius, + // titleRadius); painter->fillPath(titlePath, QBrush(QColor(255, 255, 255))); + + // // draw text node seperator + // QPainterPath block; + // block.setFillRule(Qt::WindingFill); + // block.addRect(0, titleHeight, nodeWidth, 3); + // painter->fillPath(block, QBrush(QColor(30, 30, 30, 160))); + + // QPen pen(QColor(00, 00, 00, 250), .5); + // QPen pen(borderColor, .5); + // painter->setPen(pen); + + // background + QPainterPath bgPath; + bgPath.setFillRule(Qt::WindingFill); + bgPath.addRoundedRect(0, 0, nodeWidth, nodeHeight, titleRadius, titleRadius); + painter->fillPath(bgPath, QBrush(QColor(10, 10, 10, 255))); + + // draw border + painter->setPen(QPen(borderColor, 3)); + painter->drawRoundedRect(rect, titleRadius, titleRadius); + + // draw highlight } -QString Port::id() const -{ - return _id; -} +QString Port::id() const { return _id; } -Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) -{ - setCursor(Qt::ClosedHandCursor); +Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) { + setCursor(Qt::ClosedHandCursor); - // this->setFlag(QGraphicsItem::ItemIsSelectable, false); - this->setFlag(QGraphicsItem::ItemSendsScenePositionChanges); + // this->setFlag(QGraphicsItem::ItemIsSelectable, false); + this->setFlag(QGraphicsItem::ItemSendsScenePositionChanges); - _radius = 7; - name = ""; - portType = PortType::In; - _id = QUuid::createUuid().toString(QUuid::WithoutBraces); + _radius = 7; + name = ""; + portType = PortType::In; + _id = QUuid::createUuid().toString(QUuid::WithoutBraces); } -QRectF -Port::boundingRect() const -{ - // return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); +QRectF Port::boundingRect() const { + // return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); - // add extra space for hit testing - return QRectF(-_radius * 2, -_radius * 2, _radius * 4, _radius * 4); + // add extra space for hit testing + return QRectF(-_radius * 2, -_radius * 2, _radius * 4, _radius * 4); } -QRectF -Port::actualRect() const -{ - return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); +QRectF Port::actualRect() const { + return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); } -void Port::setCenter(float x, float y) -{ - // auto rect = this->boundingRect(); - // setPos(QPointF(x - rect.x() / 2, y - rect.y() / 2)); - setPos(QPointF(x, y)); +void Port::setCenter(float x, float y) { + // auto rect = this->boundingRect(); + // setPos(QPointF(x - rect.x() / 2, y - rect.y() / 2)); + setPos(QPointF(x, y)); } -QVariant Port::itemChange(GraphicsItemChange change, const QVariant &value) -{ - if (change == ItemScenePositionHasChanged) - { - for (auto con : connections) - { - con->updatePosFromPorts(); - con->updatePathFromPositions(); - } +QVariant Port::itemChange(GraphicsItemChange change, const QVariant &value) { + if (change == ItemScenePositionHasChanged) { + for (auto con : connections) { + con->updatePosFromPorts(); + con->updatePathFromPositions(); } - return value; + } + return value; } -void Port::removeConnection(ConnectionPtr con) -{ - // todo: make sure this does what it's supposed to do - connections.removeOne(con); +void Port::removeConnection(ConnectionPtr con) { + // todo: make sure this does what it's supposed to do + connections.removeOne(con); } -void Port::paint(QPainter *painter, - QStyleOptionGraphicsItem const *option, - QWidget *widget) -{ - auto rect = actualRect(); +void Port::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, + QWidget *widget) { + auto rect = actualRect(); - QPen pen(QColor(00, 00, 00, 250), 1.0f); - painter->setPen(pen); + QPen pen(QColor(00, 00, 00, 250), 1.0f); + painter->setPen(pen); - // background - QPainterPath bgPath; - bgPath.setFillRule(Qt::WindingFill); - // bgPath.addRoundedRect(-_radius, _radius, rect.width(), rect.height(), rect.width() / 2, rect.height() / 2); - bgPath.addRoundedRect(rect, _radius, _radius); - painter->fillPath(bgPath, QBrush(QColor(170, 170, 170, 255))); + // background + QPainterPath bgPath; + bgPath.setFillRule(Qt::WindingFill); + // bgPath.addRoundedRect(-_radius, _radius, rect.width(), rect.height(), + // rect.width() / 2, rect.height() / 2); + bgPath.addRoundedRect(rect, _radius, _radius); + painter->fillPath(bgPath, QBrush(QColor(170, 170, 170, 255))); - // draw border - painter->setPen(QPen(QColor(0, 0, 0), 3)); - painter->drawRoundedRect(rect, rect.width() / 2, rect.height() / 2); + // draw border + painter->setPen(QPen(QColor(0, 0, 0), 3)); + painter->drawRoundedRect(rect, rect.width() / 2, rect.height() / 2); } -Connection::Connection() -{ - pos1 = QPointF(0, 0); - pos2 = QPointF(0, 0); +Connection::Connection() { + pos1 = QPointF(0, 0); + pos2 = QPointF(0, 0); - connectState = ConnectionState::Complete; + connectState = ConnectionState::Complete; - auto pen = QPen(QColor(200, 200, 200)); - pen.setBrush(QColor(50, 150, 250)); - pen.setCapStyle(Qt::RoundCap); - pen.setWidth(lineThickness); - setPen(pen); + auto pen = QPen(QColor(200, 200, 200)); + pen.setBrush(QColor(50, 150, 250)); + pen.setCapStyle(Qt::RoundCap); + pen.setWidth(lineThickness); + setPen(pen); } -void Connection::updatePosFromPorts() -{ - pos1 = startPort->scenePos(); - pos2 = endPort->scenePos(); +void Connection::updatePosFromPorts() { + pos1 = startPort->scenePos(); + pos2 = endPort->scenePos(); } -void Connection::updatePathFromPositions() -{ - p = new QPainterPath; - p->moveTo(pos1); +void Connection::updatePathFromPositions() { + p = new QPainterPath; + p->moveTo(pos1); - qreal dx = pos2.x() - pos1.x(); - qreal dy = pos2.y() - pos1.y(); + qreal dx = pos2.x() - pos1.x(); + qreal dy = pos2.y() - pos1.y(); - QPointF ctr1(pos1.x() + dx * 0.5, pos1.y()); - QPointF ctr2(pos2.x() - dx * 0.5, pos2.y()); + QPointF ctr1(pos1.x() + dx * 0.5, pos1.y()); + QPointF ctr2(pos2.x() - dx * 0.5, pos2.y()); - p->cubicTo(ctr1, ctr2, pos2); - p->setFillRule(Qt::OddEvenFill); + p->cubicTo(ctr1, ctr2, pos2); + p->setFillRule(Qt::OddEvenFill); - setPath(*p); + setPath(*p); } -void Connection::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) -{ - painter->setRenderHint(QPainter::Antialiasing); - painter->save(); - - if (connectState == ConnectionState::Dragging) - { - QPen pen(QColor(150, 150, 150), lineThickness); - pen.setStyle(Qt::DashLine); - pen.setDashOffset(4); - painter->setPen(pen); - painter->drawPath(*p); - - painter->setPen(QPen(QColor(0, 0, 0), 3)); - painter->setBrush(QBrush(QColor(150, 150, 150))); - painter->drawEllipse(pos1, 7, 7); - - painter->setPen(Qt::NoPen); - painter->drawEllipse(pos2, 6, 6); - } - if (connectState == ConnectionState::Complete) - { - // create gradient for line - QPen pen(QColor(170, 170, 170), lineThickness); - painter->setPen(pen); - painter->drawPath(*p); - - painter->setPen(QPen(QColor(0, 0, 0), 3)); - painter->setBrush(QBrush(QColor(170, 170, 170))); - painter->drawEllipse(pos1, 7, 7); - painter->drawEllipse(pos2, 7, 7); - } +void Connection::paint(QPainter *painter, + const QStyleOptionGraphicsItem *option, + QWidget *widget) { + painter->setRenderHint(QPainter::Antialiasing); + painter->save(); - painter->restore(); + if (connectState == ConnectionState::Dragging) { + QPen pen(QColor(150, 150, 150), lineThickness); + pen.setStyle(Qt::DashLine); + pen.setDashOffset(4); + painter->setPen(pen); + painter->drawPath(*p); + + painter->setPen(QPen(QColor(0, 0, 0), 3)); + painter->setBrush(QBrush(QColor(150, 150, 150))); + painter->drawEllipse(pos1, 7, 7); + + painter->setPen(Qt::NoPen); + painter->drawEllipse(pos2, 6, 6); + } + if (connectState == ConnectionState::Complete) { + // create gradient for line + QPen pen(QColor(170, 170, 170), lineThickness); + painter->setPen(pen); + painter->drawPath(*p); + + painter->setPen(QPen(QColor(0, 0, 0), 3)); + painter->setBrush(QBrush(QColor(170, 170, 170))); + painter->drawEllipse(pos1, 7, 7); + painter->drawEllipse(pos2, 7, 7); + } + + painter->restore(); + + Q_UNUSED(option); + Q_UNUSED(widget); +} - Q_UNUSED(option); - Q_UNUSED(widget); -} \ No newline at end of file +} // namespace nodegraph \ No newline at end of file diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index e7d5afe4..ff3445b9 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -1,16 +1,18 @@ #pragma once -#include #include +#include +#include #include -#include -#include #include -#include +#include +#include class QGraphicsTextItem; class QPainterPath; +namespace nodegraph { + class Node; class Port; class Connection; @@ -19,188 +21,166 @@ typedef QSharedPointer NodePtr; typedef QSharedPointer ConnectionPtr; typedef QSharedPointer PortPtr; -enum class SceneItemType : int -{ - Node = 1, - Port = 2, - Connection = 3 -}; +enum class SceneItemType : int { Node = 1, Port = 2, Connection = 3 }; -class Scene : public QGraphicsScene, public QEnableSharedFromThis -{ +class Scene : public QGraphicsScene, public QEnableSharedFromThis { public: - Scene(); - void addNode(NodePtr node); - void connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr rightNode, QString rightInputName); + Scene(); + void addNode(NodePtr node); + void connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr rightNode, + QString rightInputName); - // this removes the node and associating connections - // and node from scene - void removeNode(NodePtr node); + // this removes the node and associating connections + // and node from scene + void removeNode(NodePtr node); - // removes connection and item from scene - void removeConnection(ConnectionPtr con); + // removes connection and item from scene + void removeConnection(ConnectionPtr con); }; -class Node : public QGraphicsObject, public QEnableSharedFromThis -{ - QString _id; +class Node : public QGraphicsObject, public QEnableSharedFromThis { + QString _id; - int width; - int height; - QGraphicsTextItem *text; - QString name; + int width; + int height; + QGraphicsTextItem *text; + QString name; - bool isHovered; - // bool isSelected; + bool isHovered; + // bool isSelected; - QColor defaultBorderColor; - QColor highlightBorderColor; - QColor selectedBorderColor; + QColor defaultBorderColor; + QColor highlightBorderColor; + QColor selectedBorderColor; public: - QVector inPorts; - QVector outPorts; - explicit Node(); + QVector inPorts; + QVector outPorts; + explicit Node(); - const QString id() const { return _id; } - void setId(const QString &id) { _id = id; } + const QString id() const { return _id; } + void setId(const QString &id) { _id = id; } - const QVector getInPorts() const; - const QVector getOutPorts() const; + const QVector getInPorts() const; + const QVector getOutPorts() const; - void setName(QString name); + void setName(QString name); - void addInPort(QString name); - void addOutPort(QString name); + void addInPort(QString name); + void addOutPort(QString name); - PortPtr getPortById(QString id); + PortPtr getPortById(QString id); - PortPtr getInPortByName(QString name); - PortPtr getOutPortByName(QString name); + PortPtr getInPortByName(QString name); + PortPtr getOutPortByName(QString name); - QRectF - boundingRect() const override; + QRectF boundingRect() const override; - bool hovered() const { return isHovered; }; + bool hovered() const { return isHovered; }; - virtual int type() const override { return (int)SceneItemType::Node; } + virtual int type() const override { return (int)SceneItemType::Node; } protected: - void - paint(QPainter *painter, - QStyleOptionGraphicsItem const *option, - QWidget *widget = 0) override; + void paint(QPainter *painter, QStyleOptionGraphicsItem const *option, + QWidget *widget = 0) override; - // void - // mousePressEvent(QGraphicsSceneMouseEvent *event) override; + // void + // mousePressEvent(QGraphicsSceneMouseEvent *event) override; - // void - // mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; + // void + // mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; - // void - // mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + // void + // mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; - void - hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; - void - hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; - // void - // hoverMoveEvent(QGraphicsSceneHoverEvent *) override; + // void + // hoverMoveEvent(QGraphicsSceneHoverEvent *) override; - // void - // mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; + // void + // mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; }; -enum class PortType : int -{ - Invalid = 0, - In = 1, - Out = 2 -}; +enum class PortType : int { Invalid = 0, In = 1, Out = 2 }; -class Port : public QGraphicsObject, public QEnableSharedFromThis -{ - QGraphicsTextItem *text; - int _radius; - QString _id; +class Port : public QGraphicsObject, public QEnableSharedFromThis { + QGraphicsTextItem *text; + int _radius; + QString _id; public: - NodePtr node; - QVector connections; + NodePtr node; + QVector connections; - PortType portType; - QString name; + PortType portType; + QString name; - QString id() const; - void setId(const QString &id) { _id = id; } + QString id() const; + void setId(const QString &id) { _id = id; } - int radius() const { return _radius; } + int radius() const { return _radius; } - void addConnection(ConnectionPtr con) { connections.append(con); } + void addConnection(ConnectionPtr con) { connections.append(con); } - void removeConnection(ConnectionPtr con); + void removeConnection(ConnectionPtr con); - Port(QGraphicsObject *parent); + Port(QGraphicsObject *parent); - QRectF - boundingRect() const override; + QRectF boundingRect() const override; - QRectF - actualRect() const; + QRectF actualRect() const; - void setCenter(float x, float y); + void setCenter(float x, float y); - QVariant itemChange(GraphicsItemChange change, const QVariant &value); + QVariant itemChange(GraphicsItemChange change, const QVariant &value); - virtual int type() const override { return (int)SceneItemType::Port; } + virtual int type() const override { return (int)SceneItemType::Port; } protected: - void - paint(QPainter *painter, - QStyleOptionGraphicsItem const *option, - QWidget *widget = 0) override; + void paint(QPainter *painter, QStyleOptionGraphicsItem const *option, + QWidget *widget = 0) override; }; -enum class ConnectionState -{ - Dragging, - Complete -}; +enum class ConnectionState { Dragging, Complete }; -class Connection : public QGraphicsPathItem, public QEnableSharedFromThis -{ - friend class Scene; +class Connection : public QGraphicsPathItem, + public QEnableSharedFromThis { + friend class Scene; - QString _id; + QString _id; public: - ConnectionState connectState; + ConnectionState connectState; - PortPtr startPort; - PortPtr endPort; + PortPtr startPort; + PortPtr endPort; - QPointF pos1; - QPointF pos2; + QPointF pos1; + QPointF pos2; - double lineThickness = 4.0; + double lineThickness = 4.0; - virtual int type() const override { return (int)SceneItemType::Connection; } + virtual int type() const override { return (int)SceneItemType::Connection; } public: - explicit Connection(); + explicit Connection(); + + const QString id() const { return _id; } + void setId(const QString &id) { _id = id; } - const QString id() const { return _id; } - void setId(const QString &id) { _id = id; } + void updatePositions(); - void updatePositions(); + void updatePosFromPorts(); + void updatePathFromPositions(); - void updatePosFromPorts(); - void updatePathFromPositions(); + QPainterPath *p; - QPainterPath *p; + // virtual int type() const override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, + QWidget *widget) override; +}; - // virtual int type() const override; - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override; -}; \ No newline at end of file +} // namespace nodegraph \ No newline at end of file diff --git a/src/nodegraph/main.cpp b/src/nodegraph/main.cpp index f6e3b28c..32ae2815 100644 --- a/src/nodegraph/main.cpp +++ b/src/nodegraph/main.cpp @@ -1,53 +1,54 @@ +#include "graph/scene.h" +#include "nodegraph.h" #include #include #include -#include "nodegraph.h" -#include "graph/scene.h" -int main(int argc, char *argv[]) -{ - QApplication a(argc, argv); - QMainWindow w; +using namespace nodegraph; + +int main(int argc, char *argv[]) { + QApplication a(argc, argv); + QMainWindow w; - auto graph = new NodeGraph(&w); + auto graph = new NodeGraph(&w); - // QStackedLayout *layout = new QStackedLayout(&w); - // layout->addWidget(graph); + // QStackedLayout *layout = new QStackedLayout(&w); + // layout->addWidget(graph); - w.setCentralWidget(graph); + w.setCentralWidget(graph); - auto scene = graph->scene(); + auto scene = graph->scene(); - NodePtr node(new Node()); - node->setName("Warp"); - node->addInPort("image"); - node->addInPort("height"); - node->addOutPort("image"); - scene->addNode(node); + NodePtr node(new Node()); + node->setName("Warp"); + node->addInPort("image"); + node->addInPort("height"); + node->addOutPort("image"); + scene->addNode(node); - NodePtr outputNode(new Node()); - outputNode->setName("Floodfill"); - outputNode->addInPort("image"); - outputNode->addOutPort("result"); - outputNode->setPos(200, 150); - scene->addNode(outputNode); + NodePtr outputNode(new Node()); + outputNode->setName("Floodfill"); + outputNode->addInPort("image"); + outputNode->addOutPort("result"); + outputNode->setPos(200, 150); + scene->addNode(outputNode); - scene->connectNodes(node, "image", outputNode, "image"); + scene->connectNodes(node, "image", outputNode, "image"); - NodePtr node2(new Node()); - node2->setName("Stress Test"); - node2->addInPort("image"); - node2->addInPort("image2"); - node2->addInPort("image3"); - node2->addInPort("image4"); - node2->addOutPort("result"); - node2->setPos(320, 0); - scene->addNode(node2); + NodePtr node2(new Node()); + node2->setName("Stress Test"); + node2->addInPort("image"); + node2->addInPort("image2"); + node2->addInPort("image3"); + node2->addInPort("image4"); + node2->addOutPort("result"); + node2->setPos(320, 0); + scene->addNode(node2); - w.resize(800, 600); + w.resize(800, 600); - w.show(); - w.showMaximized(); + w.show(); + w.showMaximized(); - return a.exec(); + return a.exec(); } diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index 59a34d78..bbd526e6 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -1,484 +1,419 @@ #include -#include #include +#include #include -#include #include +#include // #include // #include #include #include -#include #include +#include const QColor BackgroundColor(53, 53, 53); const QColor FineGridColor(60, 60, 60); const QColor CoarseGridColor(25, 25, 25); -#include "nodegraph.h" #include "graph/scene.h" +#include "nodegraph.h" -MouseButtonStates::MouseButtonStates() -{ - reset(); -} +namespace nodegraph { -void MouseButtonStates::reset() -{ - left = false; - middle = false; - right = false; +MouseButtonStates::MouseButtonStates() { reset(); } + +void MouseButtonStates::reset() { + left = false; + middle = false; + right = false; } -NodeGraph:: - NodeGraph(QWidget *parent) - : QGraphicsView(parent) -{ - setDragMode(QGraphicsView::RubberBandDrag); - setRenderHint(QPainter::Antialiasing); +NodeGraph::NodeGraph(QWidget *parent) : QGraphicsView(parent) { + setDragMode(QGraphicsView::RubberBandDrag); + setRenderHint(QPainter::Antialiasing); - // setBackgroundBrush(BackgroundColor); - setBackgroundBrush(QColor(53, 53, 53)); + // setBackgroundBrush(BackgroundColor); + setBackgroundBrush(QColor(53, 53, 53)); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + setTransformationAnchor(QGraphicsView::AnchorUnderMouse); - setCacheMode(QGraphicsView::CacheBackground); - // setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); - setViewportUpdateMode(QGraphicsView::FullViewportUpdate); + setCacheMode(QGraphicsView::CacheBackground); + // setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); + setViewportUpdateMode(QGraphicsView::FullViewportUpdate); - // setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); + // setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); - // auto scene = new QGraphicsScene(); - // scene->addText("Hello World!"); - // setScene(scene); + // auto scene = new QGraphicsScene(); + // scene->addText("Hello World!"); + // setScene(scene); - this->setNodeGraphScene(ScenePtr(new Scene())); - mbStates.reset(); + this->setNodeGraphScene(ScenePtr(new Scene())); + mbStates.reset(); } -void NodeGraph::setNodeGraphScene(ScenePtr scene) -{ - this->_scene = scene; - this->setScene(scene.data()); +void NodeGraph::setNodeGraphScene(ScenePtr scene) { + this->_scene = scene; + this->setScene(scene.data()); - // handle scene's events from within the view - scene->installEventFilter(this); + // handle scene's events from within the view + scene->installEventFilter(this); } -void NodeGraph:: - wheelEvent(QWheelEvent *event) -{ - QPoint delta = event->angleDelta(); +void NodeGraph::wheelEvent(QWheelEvent *event) { + QPoint delta = event->angleDelta(); - if (delta.y() == 0) - { - event->ignore(); - return; - } + if (delta.y() == 0) { + event->ignore(); + return; + } - double const d = delta.y() / std::abs(delta.y()); + double const d = delta.y() / std::abs(delta.y()); - if (d > 0.0) - scaleUp(); - else - scaleDown(); + if (d > 0.0) + scaleUp(); + else + scaleDown(); } -void NodeGraph:: - scaleUp() -{ - double const step = 1.2; - double const factor = std::pow(step, 1.0); +void NodeGraph::scaleUp() { + double const step = 1.2; + double const factor = std::pow(step, 1.0); - QTransform t = transform(); + QTransform t = transform(); - if (t.m11() > 2.0) - return; + if (t.m11() > 2.0) + return; - scale(factor, factor); + scale(factor, factor); } -void NodeGraph:: - scaleDown() -{ - double const step = 1.2; - double const factor = std::pow(step, -1.0); +void NodeGraph::scaleDown() { + double const step = 1.2; + double const factor = std::pow(step, -1.0); - scale(factor, factor); + scale(factor, factor); } -void NodeGraph:: - keyPressEvent(QKeyEvent *event) -{ - if (event->key() == Qt::Key_Delete) - { - // delete items! - auto items = this->_scene->selectedItems(); - for (auto item : items) - { - if (item->type() == (int)SceneItemType::Node) - { - auto node = qgraphicsitem_cast(item); - this->_scene->removeNode(node->sharedFromThis()); - } - } - - // package them and pass them to deletion signal +void NodeGraph::keyPressEvent(QKeyEvent *event) { + if (event->key() == Qt::Key_Delete) { + // delete items! + auto items = this->_scene->selectedItems(); + for (auto item : items) { + if (item->type() == (int)SceneItemType::Node) { + auto node = qgraphicsitem_cast(item); + this->_scene->removeNode(node->sharedFromThis()); + } } - QGraphicsView::keyPressEvent(event); + // package them and pass them to deletion signal + } + + QGraphicsView::keyPressEvent(event); - this->invalidateScene(QRect(-1000, -1000, 1000, 1000)); + this->invalidateScene(QRect(-1000, -1000, 1000, 1000)); } -void NodeGraph:: - keyReleaseEvent(QKeyEvent *event) -{ - switch (event->key()) - { - case Qt::Key_Shift: - // setDragMode(QGraphicsView::ScrollHandDrag); - break; - - default: - break; - } - QGraphicsView::keyReleaseEvent(event); +void NodeGraph::keyReleaseEvent(QKeyEvent *event) { + switch (event->key()) { + case Qt::Key_Shift: + // setDragMode(QGraphicsView::ScrollHandDrag); + break; + + default: + break; + } + QGraphicsView::keyReleaseEvent(event); } -void NodeGraph:: - mousePressEvent(QMouseEvent *event) -{ - if (event->button() == Qt::MiddleButton && scene()->mouseGrabberItem() == nullptr) - { - _clickPos = mapToScene(event->pos()); - setDragMode(QGraphicsView::NoDrag); - } - QGraphicsView::mousePressEvent(event); +void NodeGraph::mousePressEvent(QMouseEvent *event) { + if (event->button() == Qt::MiddleButton && + scene()->mouseGrabberItem() == nullptr) { + _clickPos = mapToScene(event->pos()); + setDragMode(QGraphicsView::NoDrag); + } + QGraphicsView::mousePressEvent(event); } -void NodeGraph:: - mouseMoveEvent(QMouseEvent *event) -{ +void NodeGraph::mouseMoveEvent(QMouseEvent *event) { - if (event->buttons() == Qt::MiddleButton) - { - QPointF difference = _clickPos - mapToScene(event->pos()); - setSceneRect(sceneRect().translated(difference.x(), difference.y())); - } - QGraphicsView::mouseMoveEvent(event); + if (event->buttons() == Qt::MiddleButton) { + QPointF difference = _clickPos - mapToScene(event->pos()); + setSceneRect(sceneRect().translated(difference.x(), difference.y())); + } + QGraphicsView::mouseMoveEvent(event); } -void NodeGraph:: - mouseReleaseEvent(QMouseEvent *event) -{ - if (event->button() == Qt::MiddleButton) - { - setDragMode(QGraphicsView::RubberBandDrag); - } - QGraphicsView::mouseReleaseEvent(event); +void NodeGraph::mouseReleaseEvent(QMouseEvent *event) { + if (event->button() == Qt::MiddleButton) { + setDragMode(QGraphicsView::RubberBandDrag); + } + QGraphicsView::mouseReleaseEvent(event); } -void NodeGraph:: - drawBackground(QPainter *painter, const QRectF &r) -{ - QGraphicsView::drawBackground(painter, r); - painter->setRenderHint(QPainter::Antialiasing); - - auto drawGrid = - [&](double gridStep) - { - QRect windowRect = rect(); - QPointF tl = mapToScene(windowRect.topLeft()); - QPointF br = mapToScene(windowRect.bottomRight()); - - double left = std::floor(tl.x() / gridStep - 0.5); - double right = std::floor(br.x() / gridStep + 1.0); - double bottom = std::floor(tl.y() / gridStep - 0.5); - double top = std::floor(br.y() / gridStep + 1.0); - - // vertical lines - for (int xi = int(left); xi <= int(right); ++xi) - { - QLineF line(xi * gridStep, bottom * gridStep, - xi * gridStep, top * gridStep); - - painter->drawLine(line); - } +void NodeGraph::drawBackground(QPainter *painter, const QRectF &r) { + QGraphicsView::drawBackground(painter, r); + painter->setRenderHint(QPainter::Antialiasing); - // horizontal lines - for (int yi = int(bottom); yi <= int(top); ++yi) - { - QLineF line(left * gridStep, yi * gridStep, - right * gridStep, yi * gridStep); - painter->drawLine(line); - } - }; + auto drawGrid = [&](double gridStep) { + QRect windowRect = rect(); + QPointF tl = mapToScene(windowRect.topLeft()); + QPointF br = mapToScene(windowRect.bottomRight()); - QBrush bBrush = backgroundBrush(); + double left = std::floor(tl.x() / gridStep - 0.5); + double right = std::floor(br.x() / gridStep + 1.0); + double bottom = std::floor(tl.y() / gridStep - 0.5); + double top = std::floor(br.y() / gridStep + 1.0); - QPen pfine(FineGridColor, 1.0); + // vertical lines + for (int xi = int(left); xi <= int(right); ++xi) { + QLineF line(xi * gridStep, bottom * gridStep, xi * gridStep, + top * gridStep); - painter->setPen(pfine); - drawGrid(15); + painter->drawLine(line); + } + + // horizontal lines + for (int yi = int(bottom); yi <= int(top); ++yi) { + QLineF line(left * gridStep, yi * gridStep, right * gridStep, + yi * gridStep); + painter->drawLine(line); + } + }; + + QBrush bBrush = backgroundBrush(); + + QPen pfine(FineGridColor, 1.0); + + painter->setPen(pfine); + drawGrid(15); - QPen p(CoarseGridColor, 1.0); + QPen p(CoarseGridColor, 1.0); - painter->setPen(p); - drawGrid(150); + painter->setPen(p); + drawGrid(150); } -void NodeGraph:: - showEvent(QShowEvent *event) -{ - // _scene->setSceneRect(this->rect()); - QGraphicsView::showEvent(event); +void NodeGraph::showEvent(QShowEvent *event) { + // _scene->setSceneRect(this->rect()); + QGraphicsView::showEvent(event); } -bool NodeGraph::eventFilter(QObject *o, QEvent *e) -{ - QGraphicsSceneMouseEvent *me = (QGraphicsSceneMouseEvent *)e; - if (o == _scene.data()) - { - - switch ((int)e->type()) - { - case QEvent::GraphicsSceneMousePress: - if (this->sceneMousePressEvent(me)) - return true; - break; - case QEvent::GraphicsSceneMouseMove: - if (this->sceneMouseMoveEvent(me)) - return true; - break; - case QEvent::GraphicsSceneMouseRelease: - if (this->sceneMouseReleaseEvent(me)) - return true; - break; - - // case QEvent::GraphicsSceneDrop: - // break; - } +bool NodeGraph::eventFilter(QObject *o, QEvent *e) { + QGraphicsSceneMouseEvent *me = (QGraphicsSceneMouseEvent *)e; + if (o == _scene.data()) { + + switch ((int)e->type()) { + case QEvent::GraphicsSceneMousePress: + if (this->sceneMousePressEvent(me)) + return true; + break; + case QEvent::GraphicsSceneMouseMove: + if (this->sceneMouseMoveEvent(me)) + return true; + break; + case QEvent::GraphicsSceneMouseRelease: + if (this->sceneMouseReleaseEvent(me)) + return true; + break; + + // case QEvent::GraphicsSceneDrop: + // break; } + } - return QObject::eventFilter(o, e); + return QObject::eventFilter(o, e); } // todo: probably best to handle this in the views mousePressEvent -bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) -{ - // qDebug() << "Mouse Press!"; - if (event->button() == Qt::LeftButton) - mbStates.left = true; - if (event->button() == Qt::MiddleButton) - mbStates.middle = true; - if (event->button() == Qt::RightButton) - mbStates.right = true; - - // check for hit socket if left button is pressed - if (mbStates.left) - { - auto scenePos = event->scenePos(); - auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); - if (rawPort) - { - // auto port = rawPort->node->getPortById(rawPort->id()); - // gotta cast to get the non-const version - PortPtr port = ((Port *)rawPort)->sharedFromThis(); - - // are we modifying an existing port with a connection? - if (port->portType == PortType::In) - { - // in-sockets with an active connection are the only - // ones that can be edited, and that's the case here - if (port->connections.count() > 0) - { - // get the connection - auto con = port->connections[0]; - - // remove it - _scene->removeConnection(con); - - // make it activeCon - con->endPort.clear(); - con->pos1 = con->startPort->scenePos(); - con->pos2 = scenePos; - activeCon = con; - activeCon->updatePathFromPositions(); - activeCon->connectState = ConnectionState::Dragging; - - // emit connection removal signal - - this->_scene->addItem(activeCon.data()); - setDragMode(QGraphicsView::NoDrag); - return true; - } - else - { - // allow starting connection from left to right? - } - } - // start new connection - else if (port->portType != PortType::Invalid /* in or out */) - { - activeCon = ConnectionPtr(new Connection()); - activeCon->startPort = port; - activeCon->connectState = ConnectionState::Dragging; - - activeCon->pos1 = port->scenePos(); - activeCon->pos2 = scenePos; - activeCon->updatePathFromPositions(); - - this->_scene->addItem(activeCon.data()); - - // prevent further clicking of other items? - // event->ignore(); - setDragMode(QGraphicsView::NoDrag); - return true; - } - else - { - qDebug() << "trying to hit an Invalid socket"; - } - - this->setDragMode(QGraphicsView::NoDrag); +bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) { + // qDebug() << "Mouse Press!"; + if (event->button() == Qt::LeftButton) + mbStates.left = true; + if (event->button() == Qt::MiddleButton) + mbStates.middle = true; + if (event->button() == Qt::RightButton) + mbStates.right = true; + + // check for hit socket if left button is pressed + if (mbStates.left) { + auto scenePos = event->scenePos(); + auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); + if (rawPort) { + // auto port = rawPort->node->getPortById(rawPort->id()); + // gotta cast to get the non-const version + PortPtr port = ((Port *)rawPort)->sharedFromThis(); + + // are we modifying an existing port with a connection? + if (port->portType == PortType::In) { + // in-sockets with an active connection are the only + // ones that can be edited, and that's the case here + if (port->connections.count() > 0) { + // get the connection + auto con = port->connections[0]; + + // remove it + _scene->removeConnection(con); + + // make it activeCon + con->endPort.clear(); + con->pos1 = con->startPort->scenePos(); + con->pos2 = scenePos; + activeCon = con; + activeCon->updatePathFromPositions(); + activeCon->connectState = ConnectionState::Dragging; + + // emit connection removal signal + + this->_scene->addItem(activeCon.data()); + setDragMode(QGraphicsView::NoDrag); + return true; + } else { + // allow starting connection from left to right? } + } + // start new connection + else if (port->portType != PortType::Invalid /* in or out */) { + activeCon = ConnectionPtr(new Connection()); + activeCon->startPort = port; + activeCon->connectState = ConnectionState::Dragging; + + activeCon->pos1 = port->scenePos(); + activeCon->pos2 = scenePos; + activeCon->updatePathFromPositions(); + + this->_scene->addItem(activeCon.data()); + + // prevent further clicking of other items? + // event->ignore(); + setDragMode(QGraphicsView::NoDrag); + return true; + } else { + qDebug() << "trying to hit an Invalid socket"; + } + + this->setDragMode(QGraphicsView::NoDrag); } + } - return false; + return false; } -bool NodeGraph::sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event) -{ - auto scenePos = event->scenePos(); - if (mbStates.left && !!activeCon) - { - auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); - if (rawPort) - { - // snap if close enough - activeCon->pos2 = rawPort->scenePos(); - } - else - { - activeCon->pos2 = scenePos; - } - activeCon->updatePathFromPositions(); +bool NodeGraph::sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event) { + auto scenePos = event->scenePos(); + if (mbStates.left && !!activeCon) { + auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); + if (rawPort) { + // snap if close enough + activeCon->pos2 = rawPort->scenePos(); + } else { + activeCon->pos2 = scenePos; } + activeCon->updatePathFromPositions(); + } - return false; + return false; } -bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event) -{ - if (event->button() == Qt::LeftButton) - mbStates.left = false; - if (event->button() == Qt::MiddleButton) - mbStates.middle = false; - if (event->button() == Qt::RightButton) - mbStates.right = false; +bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event) { + if (event->button() == Qt::LeftButton) + mbStates.left = false; + if (event->button() == Qt::MiddleButton) + mbStates.middle = false; + if (event->button() == Qt::RightButton) + mbStates.right = false; + + auto scenePos = event->scenePos(); + + if (mbStates.left == false && !!activeCon) { + auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); + if (rawPort) { + // auto hitPort = rawPort->node->getPortById(rawPort->id()); + // gotta cast to get the non-const version + PortPtr hitPort = ((Port *)rawPort)->sharedFromThis(); + + // determine between the in and out sockets + PortPtr leftPort; + PortPtr rightPort; + + if (hitPort->portType == PortType::In) { + leftPort = activeCon->startPort; + rightPort = hitPort; + } else { + leftPort = hitPort; + rightPort = activeCon->startPort; + } + + // check validity of the potential connection + // NOTE: there's still a chance both leftPort and rightPort are + // still the same type or the same port + + bool isConValid = true; + + if (leftPort == rightPort) { + isConValid = false; + qDebug() << "invalid port"; + } + + if (leftPort->portType == rightPort->portType) { + isConValid = false; + qDebug() << "ports are the same"; + } + + // it's okay to check this since the two prior checks + // would have invalidated same-type and same-port connections + // todo: override connection + if (rightPort->connections.count() != 0) { + isConValid = false; + qDebug() << "right port has existing connections"; + } + + // todo: check for cycle + + if (isConValid) { + // actually make connection + _scene->connectNodes(leftPort->node, leftPort->name, rightPort->node, + rightPort->name); + + // todo: emit undo task + } + } - auto scenePos = event->scenePos(); + // remove from scene + _scene->removeItem(activeCon.data()); + activeCon.clear(); + } - if (mbStates.left == false && !!activeCon) - { - auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); - if (rawPort) - { - // auto hitPort = rawPort->node->getPortById(rawPort->id()); - // gotta cast to get the non-const version - PortPtr hitPort = ((Port *)rawPort)->sharedFromThis(); - - // determine between the in and out sockets - PortPtr leftPort; - PortPtr rightPort; - - if (hitPort->portType == PortType::In) - { - leftPort = activeCon->startPort; - rightPort = hitPort; - } - else - { - leftPort = hitPort; - rightPort = activeCon->startPort; - } - - // check validity of the potential connection - // NOTE: there's still a chance both leftPort and rightPort are - // still the same type or the same port - - bool isConValid = true; - - if (leftPort == rightPort) - { - isConValid = false; - qDebug() << "invalid port"; - } - - if (leftPort->portType == rightPort->portType) - { - isConValid = false; - qDebug() << "ports are the same"; - } - - // it's okay to check this since the two prior checks - // would have invalidated same-type and same-port connections - // todo: override connection - if (rightPort->connections.count() != 0) - { - isConValid = false; - qDebug() << "right port has existing connections"; - } - - // todo: check for cycle - - if (isConValid) - { - // actually make connection - _scene->connectNodes(leftPort->node, leftPort->name, rightPort->node, rightPort->name); - - // todo: emit undo task - } - } + // important to reset drag! + this->setDragMode(QGraphicsView::RubberBandDrag); + return false; +} - // remove from scene - _scene->removeItem(activeCon.data()); - activeCon.clear(); - } +const Port *NodeGraph::getPortAtScenePos(float x, float y) const { + auto items = this->_scene->items(QPointF(x, y)); + // auto items = this->items(); + for (auto item : items) { + if (item && item->type() == (int)SceneItemType::Port) + return (const Port *)item; + } - // important to reset drag! - this->setDragMode(QGraphicsView::RubberBandDrag); - return false; + return nullptr; } -const Port *NodeGraph::getPortAtScenePos(float x, float y) const -{ - auto items = this->_scene->items(QPointF(x, y)); - // auto items = this->items(); - for (auto item : items) - { - if (item && item->type() == (int)SceneItemType::Port) - return (const Port *)item; - } - - return nullptr; +NodeGraph::~NodeGraph() { + // remove all items manually otherwise + // smart point destructor of some items + // will cause segfault when cleaning up + // todo: move this to scene items + auto items = this->_scene->items(); + for (auto item : items) + this->_scene->removeItem(item); } -NodeGraph::~NodeGraph() -{ - // remove all items manually otherwise - // smart point destructor of some items - // will cause segfault when cleaning up - // todo: move this to scene items - auto items = this->_scene->items(); - for (auto item : items) - this->_scene->removeItem(item); -} \ No newline at end of file +} // namespace nodegraph \ No newline at end of file diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h index 6136f1e0..7ff31652 100644 --- a/src/nodegraph/nodegraph.h +++ b/src/nodegraph/nodegraph.h @@ -1,9 +1,9 @@ #pragma once -#include -#include -#include #include +#include +#include +#include class QWidget; class QWheelEvent; @@ -12,6 +12,8 @@ class QMouseEvent; class QPainter; class QWheelEvent; class QShowEvent; + +namespace nodegraph { class Scene; class Node; class Connection; @@ -20,87 +22,85 @@ typedef QSharedPointer NodePtr; typedef QSharedPointer ConnectionPtr; class Port; -struct MouseButtonStates -{ - bool left; - bool middle; - bool right; +struct MouseButtonStates { + bool left; + bool middle; + bool right; - MouseButtonStates(); + MouseButtonStates(); - // reset all to false - void reset(); + // reset all to false + void reset(); }; /* This class draws a lot of inspiration from NodeGraphQt https://github.com/jchanvfx/NodeGraphQt/blob/master/NodeGraphQt/widgets/viewer.py */ -class NodeGraph - : public QGraphicsView -{ +class NodeGraph : public QGraphicsView { public: - NodeGraph(QWidget *parent = nullptr); + NodeGraph(QWidget *parent = nullptr); - ScenePtr scene() const { return _scene; } + ScenePtr scene() const { return _scene; } - void scaleUp(); + void scaleUp(); - void scaleDown(); + void scaleDown(); - virtual ~NodeGraph(); + virtual ~NodeGraph(); protected: - void setNodeGraphScene(ScenePtr scene); + void setNodeGraphScene(ScenePtr scene); - void wheelEvent(QWheelEvent *event) override; + void wheelEvent(QWheelEvent *event) override; - void keyPressEvent(QKeyEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; - void keyReleaseEvent(QKeyEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; - void mousePressEvent(QMouseEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; - void mouseMoveEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; - void drawBackground(QPainter *painter, const QRectF &r) override; + void drawBackground(QPainter *painter, const QRectF &r) override; - void showEvent(QShowEvent *event) override; + void showEvent(QShowEvent *event) override; - bool eventFilter(QObject *o, QEvent *e) override; + bool eventFilter(QObject *o, QEvent *e) override; - // events coming from the scene - // void sceneKeyPressEvent(QKeyEvent *event); + // events coming from the scene + // void sceneKeyPressEvent(QKeyEvent *event); - // void sceneKeyReleaseEvent(QKeyEvent *event); + // void sceneKeyReleaseEvent(QKeyEvent *event); - // NOTE: these functions return true if they swallow the event - // this is because they're implemented using eventFilters and - // that's how eventFilters work in qt - bool sceneMousePressEvent(QGraphicsSceneMouseEvent *event); + // NOTE: these functions return true if they swallow the event + // this is because they're implemented using eventFilters and + // that's how eventFilters work in qt + bool sceneMousePressEvent(QGraphicsSceneMouseEvent *event); - bool sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event); + bool sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event); - bool sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event); + bool sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event); - const Port *getPortAtScenePos(float x, float y) const; + const Port *getPortAtScenePos(float x, float y) const; private: - QPointF _clickPos; - ScenePtr _scene; - MouseButtonStates mbStates; - ConnectionPtr activeCon; + QPointF _clickPos; + ScenePtr _scene; + MouseButtonStates mbStates; + ConnectionPtr activeCon; - QList nodes; - QList cons; + QList nodes; + QList cons; signals: - void connectionAdded(ConnectionPtr con); - void connectionRemoved(ConnectionPtr con); - void nodeAdded(NodePtr node); - void nodeRemoved(NodePtr node); + void connectionAdded(ConnectionPtr con); + void connectionRemoved(ConnectionPtr con); + void nodeAdded(NodePtr node); + void nodeRemoved(NodePtr node); - void itemsDeleted(QList nodes, QList cons); -}; \ No newline at end of file + void itemsDeleted(QList nodes, QList cons); +}; +} // namespace nodegraph \ No newline at end of file diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index 15fd8132..25866870 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -24,6 +24,7 @@ set(PROJECT_SOURCES ./project.cpp ./props.h ./props.cpp + ./libraries/libv2.h ./libraries/library.h ./libraries/library.cpp ./widgets/graphwidget.h diff --git a/src/texturelab/libraries/library.cpp b/src/texturelab/libraries/library.cpp index e588d808..a4610eb8 100644 --- a/src/texturelab/libraries/library.cpp +++ b/src/texturelab/libraries/library.cpp @@ -1,5 +1,6 @@ #include "../models.h" #include "library.h" +#include "libv2.h" #include @@ -41,4 +42,15 @@ bool Library::hasNode(QString name) LibraryV1::LibraryV1() : Library() { // add items +} + +Library *createLibraryV2() +{ + auto lib = new Library(); + lib->addNode("polygon", "Polygon", ":nodes/bevel.png"); + lib->addNode("color", "Color", ":nodes/bevel.png"); + lib->addNode("blend", "Blend", ":nodes/bevel.png"); + lib->addNode("output", "Output", ":nodes/bevel.png"); + + return lib; } \ No newline at end of file diff --git a/src/texturelab/libraries/library.h b/src/texturelab/libraries/library.h index f34be1cc..9e159147 100644 --- a/src/texturelab/libraries/library.h +++ b/src/texturelab/libraries/library.h @@ -26,8 +26,22 @@ class Library void addNode(QString name, QString displayName, QString iconPath, std::function factoryFunction); bool hasNode(QString name); + + template + void addNode(QString name, + QString displayName, + QString iconPath) + { + // https://stackoverflow.com/a/22934960 + static_assert(std::is_base_of::value, "type parameter of this class must derive from TextureNode"); + + this->addNode(name, displayName, iconPath, [=]() + { return TextureNodePtr(new T); }); + } }; +Library *createLibraryV2(); + class LibraryV1 : public Library { public: diff --git a/src/texturelab/libraries/libv2.h b/src/texturelab/libraries/libv2.h new file mode 100644 index 00000000..01629e3e --- /dev/null +++ b/src/texturelab/libraries/libv2.h @@ -0,0 +1,55 @@ +#pragma once + +#include "../models.h" + +class PolygonNode : public TextureNode +{ +public: + virtual void init() override + { + this->title = "Polygon"; + + // todo: add props + } +}; + +class ColorNode : public TextureNode +{ +public: + virtual void init() override + { + this->title = "Color"; + + this->addInput("image"); + + // todo: add props + } +}; + +class BlendNode : public TextureNode +{ +public: + virtual void init() override + { + this->title = "Blend"; + + this->addInput("colorA"); + this->addInput("colorB"); + this->addInput("opacity"); + + // todo: add props + } +}; + +class OutputNode : public TextureNode +{ +public: + virtual void init() override + { + this->title = "Blend"; + + this->addInput("image"); + + // todo: add props + } +}; \ No newline at end of file diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index 40f28af8..bb25ea79 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -8,7 +8,7 @@ TextureNodePtr TextureProject::getNodeById(const QString &id) void TextureProject::addConnection(TextureNodePtr leftNode, TextureNodePtr rightNode, QString rightNodeInput) { - auto con = ConnectionPtr(new Connection()); + QSharedPointer con(new Connection()); con->id = createGuid(); con->leftNode = leftNode; @@ -21,6 +21,11 @@ void TextureProject::addConnection(TextureNodePtr leftNode, TextureNodePtr right // todo: request updates } +void TextureNode::addInput(const QString &inputName) +{ + inputs.append(inputName); +} + void TextureNode::setProp(QString propName, QVariant value) { if (props.contains(propName)) diff --git a/src/texturelab/models.h b/src/texturelab/models.h index 3071ee1e..cc66b3d8 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -55,14 +55,24 @@ class TextureNode : public QEnableSharedFromThis { public: QString id; + QString title; + QVector2D pos; + QList inputs; + long randomSeed; QString exportName; QMap props; + virtual void init(){}; + + void addInput(const QString &inputName); + void setProp(QString propName, QVariant value); + + // add prop functions }; class Comment : public QEnableSharedFromThis diff --git a/src/texturelab/project.cpp b/src/texturelab/project.cpp index fb1fa10a..b99c00a4 100644 --- a/src/texturelab/project.cpp +++ b/src/texturelab/project.cpp @@ -24,7 +24,8 @@ TextureProjectPtr Project::loadTexture(QString path) qDebug() << json["libraryVersion"].toString(); // create library from version - Library *lib = new LibraryV1(); + // Library *lib = new LibraryV1(); + Library *lib = createLibraryV2(); // scene objects auto sceneObj = json["scene"].toObject(); @@ -35,7 +36,6 @@ TextureProjectPtr Project::loadTexture(QString path) for (auto item : nodeArray) { auto nodeDef = item.toObject(); - qDebug() << nodeDef; auto node = lib->createNode(nodeDef["typeName"].toString()); node->exportName = nodeDef["exportName"].toString(""); diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp index 81e43a9f..1104b853 100644 --- a/src/texturelab/widgets/graphwidget.cpp +++ b/src/texturelab/widgets/graphwidget.cpp @@ -1,20 +1,18 @@ #include "graphwidget.h" #include -#include #include #include +#include #include "nodegraph.h" -GraphWidget::GraphWidget() : QMainWindow(nullptr) -{ - graph = new NodeGraph(this); - this->setCentralWidget(graph); +GraphWidget::GraphWidget() : QMainWindow(nullptr) { + graph = new nodegraph::NodeGraph(this); + this->setCentralWidget(graph); - library = nullptr; + library = nullptr; } -void GraphWidget::setTextureProject(TextureProjectPtr project) -{ - // generate nodes from texture project +void GraphWidget::setTextureProject(TextureProjectPtr project) { + // generate nodes from texture project } \ No newline at end of file diff --git a/src/texturelab/widgets/graphwidget.h b/src/texturelab/widgets/graphwidget.h index c97394e8..5d7e5b29 100644 --- a/src/texturelab/widgets/graphwidget.h +++ b/src/texturelab/widgets/graphwidget.h @@ -2,19 +2,20 @@ #include +namespace nodegraph { class NodeGraph; +} class Library; class TextureProject; typedef QSharedPointer TextureProjectPtr; -class GraphWidget : public QMainWindow -{ +class GraphWidget : public QMainWindow { public: - GraphWidget(); + GraphWidget(); - void setTextureProject(TextureProjectPtr project); + void setTextureProject(TextureProjectPtr project); - NodeGraph *graph; - Library *library; + nodegraph::NodeGraph *graph; + Library *library; }; \ No newline at end of file From 23594ff8b258bcd34093c695eaf61541fcdbf1a2 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 8 Oct 2022 05:34:05 -0400 Subject: [PATCH 033/100] generate nodegraph from loaded texture --- .clang-format | 4 +- src/nodegraph/graph/scene.cpp | 578 ++++++++++++------------ src/nodegraph/graph/scene.h | 205 +++++---- src/nodegraph/nodegraph.cpp | 596 +++++++++++++------------ src/nodegraph/nodegraph.h | 93 ++-- src/texturelab/mainwindow.cpp | 71 ++- src/texturelab/project.cpp | 22 +- src/texturelab/widgets/graphwidget.cpp | 44 +- src/texturelab/widgets/graphwidget.h | 7 +- 9 files changed, 844 insertions(+), 776 deletions(-) diff --git a/.clang-format b/.clang-format index 9b535b6a..c2f4632e 100644 --- a/.clang-format +++ b/.clang-format @@ -1 +1,3 @@ -NamespaceIndentation: None \ No newline at end of file +# https://github.com/microsoft/vscode-cpptools/issues/932 +NamespaceIndentation: None +IndentWidth: 4 \ No newline at end of file diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index f7f01306..e10f0854 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -9,117 +9,129 @@ namespace nodegraph { -Scene::Scene() : QGraphicsScene() {} +Scene::Scene() : QGraphicsScene() { + this->id = QUuid::createUuid().toString(QUuid::WithoutBraces); +} + +ScenePtr Scene::create() { return ScenePtr(new Scene()); } -void Scene::addNode(NodePtr node) { this->addItem(node.data()); } +void Scene::addNode(NodePtr node) { + this->addItem(node.data()); + nodes[node->id()] = node; +} void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr rightNode, QString rightInputName) { - auto leftPort = leftNode->getOutPortByName(leftOutputName); - auto rightPort = rightNode->getInPortByName(rightInputName); + auto leftPort = leftNode->getOutPortByName(leftOutputName); + qDebug() << rightNode->getInPorts(); + auto rightPort = rightNode->getInPortByName(rightInputName); - // create new connection item from ports - auto conn = new Connection(); - conn->startPort = leftPort; - conn->endPort = rightPort; - conn->updatePosFromPorts(); - conn->updatePathFromPositions(); + // create new connection item from ports + auto conn = new Connection(); + conn->startPort = leftPort; + conn->endPort = rightPort; + conn->updatePosFromPorts(); + conn->updatePathFromPositions(); - ConnectionPtr connPtr(conn); + ConnectionPtr connPtr(conn); - // also add them to the ports - leftPort->addConnection(connPtr); - rightPort->addConnection(connPtr); + // also add them to the ports + leftPort->addConnection(connPtr); + rightPort->addConnection(connPtr); - this->addItem(conn); + this->addItem(conn); } +NodePtr Scene::getNodeById(QString id) { return nodes[id]; } + void Scene::removeNode(NodePtr node) { - // gather connections - QList cons; - for (auto port : node->getInPorts()) { - cons.append(port->connections); - } - - for (auto port : node->getOutPorts()) { - cons.append(port->connections); - } - - // remove connections - for (auto con : cons) { - this->removeConnection(con); - } - - // remove node - node->hide(); // fix display cache issue - this->removeItem(node.data()); - - // reshow here in case i forget when re-adding node for - // undo-redo - node->show(); + // gather connections + QList cons; + for (auto port : node->getInPorts()) { + cons.append(port->connections); + } + + for (auto port : node->getOutPorts()) { + cons.append(port->connections); + } + + // remove connections + for (auto con : cons) { + this->removeConnection(con); + } + + // remove node + node->hide(); // fix display cache issue + this->removeItem(node.data()); + + // reshow here in case i forget when re-adding node for + // undo-redo + node->show(); } void Scene::removeConnection(ConnectionPtr con) { - con->startPort->removeConnection(con); - con->endPort->removeConnection(con); + con->startPort->removeConnection(con); + con->endPort->removeConnection(con); - this->removeItem(con.data()); + this->removeItem(con.data()); } Node::Node() { - width = 100; - height = 100; - isHovered = false; + width = 100; + height = 100; + isHovered = false; - defaultBorderColor = QColor(0, 0, 0); - highlightBorderColor = QColor(120, 120, 120); - selectedBorderColor = QColor(200, 200, 200); + defaultBorderColor = QColor(0, 0, 0); + highlightBorderColor = QColor(120, 120, 120); + selectedBorderColor = QColor(200, 200, 200); - setFlag(QGraphicsItem::ItemIsMovable, true); - setFlag(QGraphicsItem::ItemIsFocusable, true); - setFlag(QGraphicsItem::ItemIsSelectable, true); - setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); + setFlag(QGraphicsItem::ItemIsMovable, true); + setFlag(QGraphicsItem::ItemIsFocusable, true); + setFlag(QGraphicsItem::ItemIsSelectable, true); + setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true); - setCursor(Qt::ClosedHandCursor); + setCursor(Qt::ClosedHandCursor); - text = new QGraphicsTextItem(this); + text = new QGraphicsTextItem(this); - text->setPos(0, 0); - text->setTextWidth(100); - text->setDefaultTextColor(QColor(255, 255, 255)); + text->setPos(0, 0); + text->setTextWidth(100); + text->setDefaultTextColor(QColor(255, 255, 255)); - // center title - setName("Title"); + // center title + setName("Title"); - text->document()->setDocumentMargin(2); + text->document()->setDocumentMargin(2); - QFont font = text->font(); - font.setWeight(QFont::Bold); - font.setPixelSize(12); - text->setFont(font); + QFont font = text->font(); + font.setWeight(QFont::Bold); + font.setPixelSize(12); + text->setFont(font); - QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; - effect->setBlurRadius(20); - effect->setXOffset(0); - effect->setYOffset(0); - effect->setColor(QColor(00, 00, 00, 70)); - setGraphicsEffect(effect); + QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; + effect->setBlurRadius(20); + effect->setXOffset(0); + effect->setYOffset(0); + effect->setColor(QColor(00, 00, 00, 70)); + setGraphicsEffect(effect); - setAcceptHoverEvents(true); - // setAcceptDrops(true); + setAcceptHoverEvents(true); + // setAcceptDrops(true); } +NodePtr Node::create() { return NodePtr(new Node()); } + void Node::setName(QString name) { - this->name = name; - text->setPlainText(name); - - QTextBlockFormat format; - format.setAlignment(Qt::AlignCenter); - QTextCursor cursor = text->textCursor(); - cursor.select(QTextCursor::Document); - cursor.mergeBlockFormat(format); - cursor.clearSelection(); - text->setTextCursor(cursor); + this->name = name; + text->setPlainText(name); + + QTextBlockFormat format; + format.setAlignment(Qt::AlignCenter); + QTextCursor cursor = text->textCursor(); + cursor.select(QTextCursor::Document); + cursor.mergeBlockFormat(format); + cursor.clearSelection(); + text->setTextCursor(cursor); } const QVector Node::getInPorts() const { return inPorts; } @@ -127,79 +139,79 @@ const QVector Node::getInPorts() const { return inPorts; } const QVector Node::getOutPorts() const { return outPorts; } void Node::addInPort(QString name) { - PortPtr port(new Port(this)); - port->name = name; - port->portType = PortType::In; - port->node = this->sharedFromThis(); - inPorts.append(port); - - // top and bottom padding for sockets - const int pad = inPorts.count() < 5 ? 10 : 0; - - // sort in sockets - int incr = (this->height - pad * 2) / inPorts.count(); - int mid = incr / 2.0; - int i = 0; - for (auto port : inPorts) { - int y = pad + i * incr + mid; - int x = 0; - port->setCenter(x, y); - i++; - } + PortPtr port(new Port(this)); + port->name = name; + port->portType = PortType::In; + port->node = this->sharedFromThis(); + inPorts.append(port); + + // top and bottom padding for sockets + const int pad = inPorts.count() < 5 ? 10 : 0; + + // sort in sockets + int incr = (this->height - pad * 2) / inPorts.count(); + int mid = incr / 2.0; + int i = 0; + for (auto port : inPorts) { + int y = pad + i * incr + mid; + int x = 0; + port->setCenter(x, y); + i++; + } } void Node::addOutPort(QString name) { - PortPtr port(new Port(this)); - port->name = name; - port->portType = PortType::Out; - port->node = this->sharedFromThis(); - outPorts.append(port); - - // top and bottom padding for sockets - const int pad = outPorts.count() < 5 ? 10 : 0; - - // sort in sockets - int incr = (this->height - pad * 2) / outPorts.count(); - int mid = incr / 2.0; - int i = 0; - for (auto port : outPorts) { - int y = pad + i * incr + mid; - int x = width; - port->setCenter(x, y); - i++; - } + PortPtr port(new Port(this)); + port->name = name; + port->portType = PortType::Out; + port->node = this->sharedFromThis(); + outPorts.append(port); + + // top and bottom padding for sockets + const int pad = outPorts.count() < 5 ? 10 : 0; + + // sort in sockets + int incr = (this->height - pad * 2) / outPorts.count(); + int mid = incr / 2.0; + int i = 0; + for (auto port : outPorts) { + int y = pad + i * incr + mid; + int x = width; + port->setCenter(x, y); + i++; + } } PortPtr Node::getPortById(QString id) { - for (auto port : inPorts) { - if (port->id() == id) - return port; - } + for (auto port : inPorts) { + if (port->id() == id) + return port; + } - for (auto port : outPorts) { - if (port->id() == id) - return port; - } + for (auto port : outPorts) { + if (port->id() == id) + return port; + } - Q_ASSERT(false); + Q_ASSERT(false); } PortPtr Node::getInPortByName(QString name) { - for (auto port : inPorts) { - if (port->name == name) - return port; - } + for (auto port : inPorts) { + if (port->name == name) + return port; + } - Q_ASSERT(false); + Q_ASSERT(false); } PortPtr Node::getOutPortByName(QString name) { - for (auto port : outPorts) { - if (port->name == name) - return port; - } + for (auto port : outPorts) { + if (port->name == name) + return port; + } - Q_ASSERT(false); + Q_ASSERT(false); } QRectF Node::boundingRect() const { return QRectF(0, 0, 100, 100); } @@ -210,208 +222,210 @@ QRectF Node::boundingRect() const { return QRectF(0, 0, 100, 100); } // } void Node::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { - this->text->hide(); - this->isHovered = true; - QGraphicsObject::hoverEnterEvent(event); + this->text->hide(); + this->isHovered = true; + QGraphicsObject::hoverEnterEvent(event); } void Node::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { - this->text->show(); - this->isHovered = false; - QGraphicsObject::hoverLeaveEvent(event); + this->text->show(); + this->isHovered = false; + QGraphicsObject::hoverLeaveEvent(event); } void Node::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, QWidget *widget) { - const int titleHeight = 20; - const int nodeWidth = width; - const int nodeHeight = height; - const int titleRadius = 4; - const QColor titleColor(0, 0, 0); - - auto rect = boundingRect(); - - QColor borderColor; - if (isSelected()) - borderColor = this->selectedBorderColor; - else if (isHovered) - borderColor = this->highlightBorderColor; - else - borderColor = this->defaultBorderColor; - - // not really needed - // painter->setClipRect(option->exposedRect); - - // smooth rendering - // painter->setRenderHint(QPainter::Antialiasing); - // painter->setRenderHint(QPainter::TextAntialiasing); - - // title tab - // QPainterPath titlePath; - // titlePath.setFillRule(Qt::WindingFill); - // titlePath.addRect(0, 10, width, titleHeight - 10); - // titlePath.addRoundedRect(0, 0, nodeWidth, titleHeight, titleRadius, - // titleRadius); painter->fillPath(titlePath, QBrush(QColor(255, 255, 255))); - - // // draw text node seperator - // QPainterPath block; - // block.setFillRule(Qt::WindingFill); - // block.addRect(0, titleHeight, nodeWidth, 3); - // painter->fillPath(block, QBrush(QColor(30, 30, 30, 160))); - - // QPen pen(QColor(00, 00, 00, 250), .5); - // QPen pen(borderColor, .5); - // painter->setPen(pen); - - // background - QPainterPath bgPath; - bgPath.setFillRule(Qt::WindingFill); - bgPath.addRoundedRect(0, 0, nodeWidth, nodeHeight, titleRadius, titleRadius); - painter->fillPath(bgPath, QBrush(QColor(10, 10, 10, 255))); - - // draw border - painter->setPen(QPen(borderColor, 3)); - painter->drawRoundedRect(rect, titleRadius, titleRadius); - - // draw highlight + const int titleHeight = 20; + const int nodeWidth = width; + const int nodeHeight = height; + const int titleRadius = 4; + const QColor titleColor(0, 0, 0); + + auto rect = boundingRect(); + + QColor borderColor; + if (isSelected()) + borderColor = this->selectedBorderColor; + else if (isHovered) + borderColor = this->highlightBorderColor; + else + borderColor = this->defaultBorderColor; + + // not really needed + // painter->setClipRect(option->exposedRect); + + // smooth rendering + // painter->setRenderHint(QPainter::Antialiasing); + // painter->setRenderHint(QPainter::TextAntialiasing); + + // title tab + // QPainterPath titlePath; + // titlePath.setFillRule(Qt::WindingFill); + // titlePath.addRect(0, 10, width, titleHeight - 10); + // titlePath.addRoundedRect(0, 0, nodeWidth, titleHeight, titleRadius, + // titleRadius); painter->fillPath(titlePath, QBrush(QColor(255, 255, + // 255))); + + // // draw text node seperator + // QPainterPath block; + // block.setFillRule(Qt::WindingFill); + // block.addRect(0, titleHeight, nodeWidth, 3); + // painter->fillPath(block, QBrush(QColor(30, 30, 30, 160))); + + // QPen pen(QColor(00, 00, 00, 250), .5); + // QPen pen(borderColor, .5); + // painter->setPen(pen); + + // background + QPainterPath bgPath; + bgPath.setFillRule(Qt::WindingFill); + bgPath.addRoundedRect(0, 0, nodeWidth, nodeHeight, titleRadius, + titleRadius); + painter->fillPath(bgPath, QBrush(QColor(10, 10, 10, 255))); + + // draw border + painter->setPen(QPen(borderColor, 3)); + painter->drawRoundedRect(rect, titleRadius, titleRadius); + + // draw highlight } QString Port::id() const { return _id; } Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) { - setCursor(Qt::ClosedHandCursor); + setCursor(Qt::ClosedHandCursor); - // this->setFlag(QGraphicsItem::ItemIsSelectable, false); - this->setFlag(QGraphicsItem::ItemSendsScenePositionChanges); + // this->setFlag(QGraphicsItem::ItemIsSelectable, false); + this->setFlag(QGraphicsItem::ItemSendsScenePositionChanges); - _radius = 7; - name = ""; - portType = PortType::In; - _id = QUuid::createUuid().toString(QUuid::WithoutBraces); + _radius = 7; + name = ""; + portType = PortType::In; + _id = QUuid::createUuid().toString(QUuid::WithoutBraces); } QRectF Port::boundingRect() const { - // return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); + // return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); - // add extra space for hit testing - return QRectF(-_radius * 2, -_radius * 2, _radius * 4, _radius * 4); + // add extra space for hit testing + return QRectF(-_radius * 2, -_radius * 2, _radius * 4, _radius * 4); } QRectF Port::actualRect() const { - return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); + return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); } void Port::setCenter(float x, float y) { - // auto rect = this->boundingRect(); - // setPos(QPointF(x - rect.x() / 2, y - rect.y() / 2)); - setPos(QPointF(x, y)); + // auto rect = this->boundingRect(); + // setPos(QPointF(x - rect.x() / 2, y - rect.y() / 2)); + setPos(QPointF(x, y)); } QVariant Port::itemChange(GraphicsItemChange change, const QVariant &value) { - if (change == ItemScenePositionHasChanged) { - for (auto con : connections) { - con->updatePosFromPorts(); - con->updatePathFromPositions(); + if (change == ItemScenePositionHasChanged) { + for (auto con : connections) { + con->updatePosFromPorts(); + con->updatePathFromPositions(); + } } - } - return value; + return value; } void Port::removeConnection(ConnectionPtr con) { - // todo: make sure this does what it's supposed to do - connections.removeOne(con); + // todo: make sure this does what it's supposed to do + connections.removeOne(con); } void Port::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, QWidget *widget) { - auto rect = actualRect(); - - QPen pen(QColor(00, 00, 00, 250), 1.0f); - painter->setPen(pen); - - // background - QPainterPath bgPath; - bgPath.setFillRule(Qt::WindingFill); - // bgPath.addRoundedRect(-_radius, _radius, rect.width(), rect.height(), - // rect.width() / 2, rect.height() / 2); - bgPath.addRoundedRect(rect, _radius, _radius); - painter->fillPath(bgPath, QBrush(QColor(170, 170, 170, 255))); - - // draw border - painter->setPen(QPen(QColor(0, 0, 0), 3)); - painter->drawRoundedRect(rect, rect.width() / 2, rect.height() / 2); + auto rect = actualRect(); + + QPen pen(QColor(00, 00, 00, 250), 1.0f); + painter->setPen(pen); + + // background + QPainterPath bgPath; + bgPath.setFillRule(Qt::WindingFill); + // bgPath.addRoundedRect(-_radius, _radius, rect.width(), rect.height(), + // rect.width() / 2, rect.height() / 2); + bgPath.addRoundedRect(rect, _radius, _radius); + painter->fillPath(bgPath, QBrush(QColor(170, 170, 170, 255))); + + // draw border + painter->setPen(QPen(QColor(0, 0, 0), 3)); + painter->drawRoundedRect(rect, rect.width() / 2, rect.height() / 2); } Connection::Connection() { - pos1 = QPointF(0, 0); - pos2 = QPointF(0, 0); + pos1 = QPointF(0, 0); + pos2 = QPointF(0, 0); - connectState = ConnectionState::Complete; + connectState = ConnectionState::Complete; - auto pen = QPen(QColor(200, 200, 200)); - pen.setBrush(QColor(50, 150, 250)); - pen.setCapStyle(Qt::RoundCap); - pen.setWidth(lineThickness); - setPen(pen); + auto pen = QPen(QColor(200, 200, 200)); + pen.setBrush(QColor(50, 150, 250)); + pen.setCapStyle(Qt::RoundCap); + pen.setWidth(lineThickness); + setPen(pen); } void Connection::updatePosFromPorts() { - pos1 = startPort->scenePos(); - pos2 = endPort->scenePos(); + pos1 = startPort->scenePos(); + pos2 = endPort->scenePos(); } void Connection::updatePathFromPositions() { - p = new QPainterPath; - p->moveTo(pos1); + p = new QPainterPath; + p->moveTo(pos1); - qreal dx = pos2.x() - pos1.x(); - qreal dy = pos2.y() - pos1.y(); + qreal dx = pos2.x() - pos1.x(); + qreal dy = pos2.y() - pos1.y(); - QPointF ctr1(pos1.x() + dx * 0.5, pos1.y()); - QPointF ctr2(pos2.x() - dx * 0.5, pos2.y()); + QPointF ctr1(pos1.x() + dx * 0.5, pos1.y()); + QPointF ctr2(pos2.x() - dx * 0.5, pos2.y()); - p->cubicTo(ctr1, ctr2, pos2); - p->setFillRule(Qt::OddEvenFill); + p->cubicTo(ctr1, ctr2, pos2); + p->setFillRule(Qt::OddEvenFill); - setPath(*p); + setPath(*p); } void Connection::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { - painter->setRenderHint(QPainter::Antialiasing); - painter->save(); - - if (connectState == ConnectionState::Dragging) { - QPen pen(QColor(150, 150, 150), lineThickness); - pen.setStyle(Qt::DashLine); - pen.setDashOffset(4); - painter->setPen(pen); - painter->drawPath(*p); - - painter->setPen(QPen(QColor(0, 0, 0), 3)); - painter->setBrush(QBrush(QColor(150, 150, 150))); - painter->drawEllipse(pos1, 7, 7); - - painter->setPen(Qt::NoPen); - painter->drawEllipse(pos2, 6, 6); - } - if (connectState == ConnectionState::Complete) { - // create gradient for line - QPen pen(QColor(170, 170, 170), lineThickness); - painter->setPen(pen); - painter->drawPath(*p); - - painter->setPen(QPen(QColor(0, 0, 0), 3)); - painter->setBrush(QBrush(QColor(170, 170, 170))); - painter->drawEllipse(pos1, 7, 7); - painter->drawEllipse(pos2, 7, 7); - } + painter->setRenderHint(QPainter::Antialiasing); + painter->save(); + + if (connectState == ConnectionState::Dragging) { + QPen pen(QColor(150, 150, 150), lineThickness); + pen.setStyle(Qt::DashLine); + pen.setDashOffset(4); + painter->setPen(pen); + painter->drawPath(*p); + + painter->setPen(QPen(QColor(0, 0, 0), 3)); + painter->setBrush(QBrush(QColor(150, 150, 150))); + painter->drawEllipse(pos1, 7, 7); + + painter->setPen(Qt::NoPen); + painter->drawEllipse(pos2, 6, 6); + } + if (connectState == ConnectionState::Complete) { + // create gradient for line + QPen pen(QColor(170, 170, 170), lineThickness); + painter->setPen(pen); + painter->drawPath(*p); + + painter->setPen(QPen(QColor(0, 0, 0), 3)); + painter->setBrush(QBrush(QColor(170, 170, 170))); + painter->drawEllipse(pos1, 7, 7); + painter->drawEllipse(pos2, 7, 7); + } - painter->restore(); + painter->restore(); - Q_UNUSED(option); - Q_UNUSED(widget); + Q_UNUSED(option); + Q_UNUSED(widget); } } // namespace nodegraph \ No newline at end of file diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index ff3445b9..97651d33 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -16,171 +17,181 @@ namespace nodegraph { class Node; class Port; class Connection; +class Scene; typedef QSharedPointer NodePtr; typedef QSharedPointer ConnectionPtr; typedef QSharedPointer PortPtr; +typedef QSharedPointer ScenePtr; enum class SceneItemType : int { Node = 1, Port = 2, Connection = 3 }; class Scene : public QGraphicsScene, public QEnableSharedFromThis { -public: - Scene(); - void addNode(NodePtr node); - void connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr rightNode, - QString rightInputName); - - // this removes the node and associating connections - // and node from scene - void removeNode(NodePtr node); - - // removes connection and item from scene - void removeConnection(ConnectionPtr con); + public: + Scene(); + static ScenePtr create(); + + void addNode(NodePtr node); + NodePtr getNodeById(QString id); + + void connectNodes(NodePtr leftNode, QString leftOutputName, + NodePtr rightNode, QString rightInputName); + + // this removes the node and associating connections + // and node from scene + void removeNode(NodePtr node); + + // removes connection and item from scene + void removeConnection(ConnectionPtr con); + + QMap nodes; + QString id; }; class Node : public QGraphicsObject, public QEnableSharedFromThis { - QString _id; + QString _id; - int width; - int height; - QGraphicsTextItem *text; - QString name; + int width; + int height; + QGraphicsTextItem *text; + QString name; - bool isHovered; - // bool isSelected; + bool isHovered; + // bool isSelected; - QColor defaultBorderColor; - QColor highlightBorderColor; - QColor selectedBorderColor; + QColor defaultBorderColor; + QColor highlightBorderColor; + QColor selectedBorderColor; -public: - QVector inPorts; - QVector outPorts; - explicit Node(); + public: + QVector inPorts; + QVector outPorts; + explicit Node(); + static NodePtr create(); - const QString id() const { return _id; } - void setId(const QString &id) { _id = id; } + const QString id() const { return _id; } + void setId(const QString &id) { _id = id; } - const QVector getInPorts() const; - const QVector getOutPorts() const; + const QVector getInPorts() const; + const QVector getOutPorts() const; - void setName(QString name); + void setName(QString name); - void addInPort(QString name); - void addOutPort(QString name); + void addInPort(QString name); + void addOutPort(QString name); - PortPtr getPortById(QString id); + PortPtr getPortById(QString id); - PortPtr getInPortByName(QString name); - PortPtr getOutPortByName(QString name); + PortPtr getInPortByName(QString name); + PortPtr getOutPortByName(QString name); - QRectF boundingRect() const override; + QRectF boundingRect() const override; - bool hovered() const { return isHovered; }; + bool hovered() const { return isHovered; }; - virtual int type() const override { return (int)SceneItemType::Node; } + virtual int type() const override { return (int)SceneItemType::Node; } -protected: - void paint(QPainter *painter, QStyleOptionGraphicsItem const *option, - QWidget *widget = 0) override; + protected: + void paint(QPainter *painter, QStyleOptionGraphicsItem const *option, + QWidget *widget = 0) override; - // void - // mousePressEvent(QGraphicsSceneMouseEvent *event) override; + // void + // mousePressEvent(QGraphicsSceneMouseEvent *event) override; - // void - // mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; + // void + // mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; - // void - // mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + // void + // mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; - void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; - void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; - // void - // hoverMoveEvent(QGraphicsSceneHoverEvent *) override; + // void + // hoverMoveEvent(QGraphicsSceneHoverEvent *) override; - // void - // mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; + // void + // mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; }; enum class PortType : int { Invalid = 0, In = 1, Out = 2 }; class Port : public QGraphicsObject, public QEnableSharedFromThis { - QGraphicsTextItem *text; - int _radius; - QString _id; + QGraphicsTextItem *text; + int _radius; + QString _id; -public: - NodePtr node; - QVector connections; + public: + NodePtr node; + QVector connections; - PortType portType; - QString name; + PortType portType; + QString name; - QString id() const; - void setId(const QString &id) { _id = id; } + QString id() const; + void setId(const QString &id) { _id = id; } - int radius() const { return _radius; } + int radius() const { return _radius; } - void addConnection(ConnectionPtr con) { connections.append(con); } + void addConnection(ConnectionPtr con) { connections.append(con); } - void removeConnection(ConnectionPtr con); + void removeConnection(ConnectionPtr con); - Port(QGraphicsObject *parent); + Port(QGraphicsObject *parent); - QRectF boundingRect() const override; + QRectF boundingRect() const override; - QRectF actualRect() const; + QRectF actualRect() const; - void setCenter(float x, float y); + void setCenter(float x, float y); - QVariant itemChange(GraphicsItemChange change, const QVariant &value); + QVariant itemChange(GraphicsItemChange change, const QVariant &value); - virtual int type() const override { return (int)SceneItemType::Port; } + virtual int type() const override { return (int)SceneItemType::Port; } -protected: - void paint(QPainter *painter, QStyleOptionGraphicsItem const *option, - QWidget *widget = 0) override; + protected: + void paint(QPainter *painter, QStyleOptionGraphicsItem const *option, + QWidget *widget = 0) override; }; enum class ConnectionState { Dragging, Complete }; class Connection : public QGraphicsPathItem, public QEnableSharedFromThis { - friend class Scene; + friend class Scene; - QString _id; + QString _id; -public: - ConnectionState connectState; + public: + ConnectionState connectState; - PortPtr startPort; - PortPtr endPort; + PortPtr startPort; + PortPtr endPort; - QPointF pos1; - QPointF pos2; + QPointF pos1; + QPointF pos2; - double lineThickness = 4.0; + double lineThickness = 4.0; - virtual int type() const override { return (int)SceneItemType::Connection; } + virtual int type() const override { return (int)SceneItemType::Connection; } -public: - explicit Connection(); + public: + explicit Connection(); - const QString id() const { return _id; } - void setId(const QString &id) { _id = id; } + const QString id() const { return _id; } + void setId(const QString &id) { _id = id; } - void updatePositions(); + void updatePositions(); - void updatePosFromPorts(); - void updatePathFromPositions(); + void updatePosFromPorts(); + void updatePathFromPositions(); - QPainterPath *p; + QPainterPath *p; - // virtual int type() const override; - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, - QWidget *widget) override; + // virtual int type() const override; + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, + QWidget *widget) override; }; } // namespace nodegraph \ No newline at end of file diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index bbd526e6..96fae908 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -27,393 +27,399 @@ namespace nodegraph { MouseButtonStates::MouseButtonStates() { reset(); } void MouseButtonStates::reset() { - left = false; - middle = false; - right = false; + left = false; + middle = false; + right = false; } NodeGraph::NodeGraph(QWidget *parent) : QGraphicsView(parent) { - setDragMode(QGraphicsView::RubberBandDrag); - setRenderHint(QPainter::Antialiasing); + setDragMode(QGraphicsView::RubberBandDrag); + setRenderHint(QPainter::Antialiasing); - // setBackgroundBrush(BackgroundColor); - setBackgroundBrush(QColor(53, 53, 53)); + // setBackgroundBrush(BackgroundColor); + setBackgroundBrush(QColor(53, 53, 53)); - setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + setTransformationAnchor(QGraphicsView::AnchorUnderMouse); - setCacheMode(QGraphicsView::CacheBackground); - // setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); - setViewportUpdateMode(QGraphicsView::FullViewportUpdate); + setCacheMode(QGraphicsView::CacheBackground); + // setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); + setViewportUpdateMode(QGraphicsView::FullViewportUpdate); - // setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); + // setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers))); - // auto scene = new QGraphicsScene(); - // scene->addText("Hello World!"); - // setScene(scene); + // auto scene = new QGraphicsScene(); + // scene->addText("Hello World!"); + // setScene(scene); - this->setNodeGraphScene(ScenePtr(new Scene())); - mbStates.reset(); + this->setNodeGraphScene(ScenePtr(new Scene())); + mbStates.reset(); } -void NodeGraph::setNodeGraphScene(ScenePtr scene) { - this->_scene = scene; - this->setScene(scene.data()); +void NodeGraph::setNodeGraphScene(const ScenePtr &scene) { + + // properly cleanup old scene + if (!!this->_scene) { + this->setScene(nullptr); + } + + this->_scene = scene; + this->setScene(scene.data()); - // handle scene's events from within the view - scene->installEventFilter(this); + // handle scene's events from within the view + scene->installEventFilter(this); } void NodeGraph::wheelEvent(QWheelEvent *event) { - QPoint delta = event->angleDelta(); + QPoint delta = event->angleDelta(); - if (delta.y() == 0) { - event->ignore(); - return; - } + if (delta.y() == 0) { + event->ignore(); + return; + } - double const d = delta.y() / std::abs(delta.y()); + double const d = delta.y() / std::abs(delta.y()); - if (d > 0.0) - scaleUp(); - else - scaleDown(); + if (d > 0.0) + scaleUp(); + else + scaleDown(); } void NodeGraph::scaleUp() { - double const step = 1.2; - double const factor = std::pow(step, 1.0); + double const step = 1.2; + double const factor = std::pow(step, 1.0); - QTransform t = transform(); + QTransform t = transform(); - if (t.m11() > 2.0) - return; + if (t.m11() > 2.0) + return; - scale(factor, factor); + scale(factor, factor); } void NodeGraph::scaleDown() { - double const step = 1.2; - double const factor = std::pow(step, -1.0); + double const step = 1.2; + double const factor = std::pow(step, -1.0); - scale(factor, factor); + scale(factor, factor); } void NodeGraph::keyPressEvent(QKeyEvent *event) { - if (event->key() == Qt::Key_Delete) { - // delete items! - auto items = this->_scene->selectedItems(); - for (auto item : items) { - if (item->type() == (int)SceneItemType::Node) { - auto node = qgraphicsitem_cast(item); - this->_scene->removeNode(node->sharedFromThis()); - } - } + if (event->key() == Qt::Key_Delete) { + // delete items! + auto items = this->_scene->selectedItems(); + for (auto item : items) { + if (item->type() == (int)SceneItemType::Node) { + auto node = qgraphicsitem_cast(item); + this->_scene->removeNode(node->sharedFromThis()); + } + } - // package them and pass them to deletion signal - } + // package them and pass them to deletion signal + } - QGraphicsView::keyPressEvent(event); + QGraphicsView::keyPressEvent(event); - this->invalidateScene(QRect(-1000, -1000, 1000, 1000)); + this->invalidateScene(QRect(-1000, -1000, 1000, 1000)); } void NodeGraph::keyReleaseEvent(QKeyEvent *event) { - switch (event->key()) { - case Qt::Key_Shift: - // setDragMode(QGraphicsView::ScrollHandDrag); - break; - - default: - break; - } - QGraphicsView::keyReleaseEvent(event); + switch (event->key()) { + case Qt::Key_Shift: + // setDragMode(QGraphicsView::ScrollHandDrag); + break; + + default: + break; + } + QGraphicsView::keyReleaseEvent(event); } void NodeGraph::mousePressEvent(QMouseEvent *event) { - if (event->button() == Qt::MiddleButton && - scene()->mouseGrabberItem() == nullptr) { - _clickPos = mapToScene(event->pos()); - setDragMode(QGraphicsView::NoDrag); - } - QGraphicsView::mousePressEvent(event); + if (event->button() == Qt::MiddleButton && + scene()->mouseGrabberItem() == nullptr) { + _clickPos = mapToScene(event->pos()); + setDragMode(QGraphicsView::NoDrag); + } + QGraphicsView::mousePressEvent(event); } void NodeGraph::mouseMoveEvent(QMouseEvent *event) { - if (event->buttons() == Qt::MiddleButton) { - QPointF difference = _clickPos - mapToScene(event->pos()); - setSceneRect(sceneRect().translated(difference.x(), difference.y())); - } - QGraphicsView::mouseMoveEvent(event); + if (event->buttons() == Qt::MiddleButton) { + QPointF difference = _clickPos - mapToScene(event->pos()); + setSceneRect(sceneRect().translated(difference.x(), difference.y())); + } + QGraphicsView::mouseMoveEvent(event); } void NodeGraph::mouseReleaseEvent(QMouseEvent *event) { - if (event->button() == Qt::MiddleButton) { - setDragMode(QGraphicsView::RubberBandDrag); - } - QGraphicsView::mouseReleaseEvent(event); + if (event->button() == Qt::MiddleButton) { + setDragMode(QGraphicsView::RubberBandDrag); + } + QGraphicsView::mouseReleaseEvent(event); } void NodeGraph::drawBackground(QPainter *painter, const QRectF &r) { - QGraphicsView::drawBackground(painter, r); - painter->setRenderHint(QPainter::Antialiasing); + QGraphicsView::drawBackground(painter, r); + painter->setRenderHint(QPainter::Antialiasing); - auto drawGrid = [&](double gridStep) { - QRect windowRect = rect(); - QPointF tl = mapToScene(windowRect.topLeft()); - QPointF br = mapToScene(windowRect.bottomRight()); + auto drawGrid = [&](double gridStep) { + QRect windowRect = rect(); + QPointF tl = mapToScene(windowRect.topLeft()); + QPointF br = mapToScene(windowRect.bottomRight()); - double left = std::floor(tl.x() / gridStep - 0.5); - double right = std::floor(br.x() / gridStep + 1.0); - double bottom = std::floor(tl.y() / gridStep - 0.5); - double top = std::floor(br.y() / gridStep + 1.0); + double left = std::floor(tl.x() / gridStep - 0.5); + double right = std::floor(br.x() / gridStep + 1.0); + double bottom = std::floor(tl.y() / gridStep - 0.5); + double top = std::floor(br.y() / gridStep + 1.0); - // vertical lines - for (int xi = int(left); xi <= int(right); ++xi) { - QLineF line(xi * gridStep, bottom * gridStep, xi * gridStep, - top * gridStep); + // vertical lines + for (int xi = int(left); xi <= int(right); ++xi) { + QLineF line(xi * gridStep, bottom * gridStep, xi * gridStep, + top * gridStep); - painter->drawLine(line); - } + painter->drawLine(line); + } - // horizontal lines - for (int yi = int(bottom); yi <= int(top); ++yi) { - QLineF line(left * gridStep, yi * gridStep, right * gridStep, - yi * gridStep); - painter->drawLine(line); - } - }; + // horizontal lines + for (int yi = int(bottom); yi <= int(top); ++yi) { + QLineF line(left * gridStep, yi * gridStep, right * gridStep, + yi * gridStep); + painter->drawLine(line); + } + }; - QBrush bBrush = backgroundBrush(); + QBrush bBrush = backgroundBrush(); - QPen pfine(FineGridColor, 1.0); + QPen pfine(FineGridColor, 1.0); - painter->setPen(pfine); - drawGrid(15); + painter->setPen(pfine); + drawGrid(15); - QPen p(CoarseGridColor, 1.0); + QPen p(CoarseGridColor, 1.0); - painter->setPen(p); - drawGrid(150); + painter->setPen(p); + drawGrid(150); } void NodeGraph::showEvent(QShowEvent *event) { - // _scene->setSceneRect(this->rect()); - QGraphicsView::showEvent(event); + // _scene->setSceneRect(this->rect()); + QGraphicsView::showEvent(event); } bool NodeGraph::eventFilter(QObject *o, QEvent *e) { - QGraphicsSceneMouseEvent *me = (QGraphicsSceneMouseEvent *)e; - if (o == _scene.data()) { - - switch ((int)e->type()) { - case QEvent::GraphicsSceneMousePress: - if (this->sceneMousePressEvent(me)) - return true; - break; - case QEvent::GraphicsSceneMouseMove: - if (this->sceneMouseMoveEvent(me)) - return true; - break; - case QEvent::GraphicsSceneMouseRelease: - if (this->sceneMouseReleaseEvent(me)) - return true; - break; - - // case QEvent::GraphicsSceneDrop: - // break; + QGraphicsSceneMouseEvent *me = (QGraphicsSceneMouseEvent *)e; + if (o == _scene.data()) { + + switch ((int)e->type()) { + case QEvent::GraphicsSceneMousePress: + if (this->sceneMousePressEvent(me)) + return true; + break; + case QEvent::GraphicsSceneMouseMove: + if (this->sceneMouseMoveEvent(me)) + return true; + break; + case QEvent::GraphicsSceneMouseRelease: + if (this->sceneMouseReleaseEvent(me)) + return true; + break; + + // case QEvent::GraphicsSceneDrop: + // break; + } } - } - return QObject::eventFilter(o, e); + return QObject::eventFilter(o, e); } // todo: probably best to handle this in the views mousePressEvent bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) { - // qDebug() << "Mouse Press!"; - if (event->button() == Qt::LeftButton) - mbStates.left = true; - if (event->button() == Qt::MiddleButton) - mbStates.middle = true; - if (event->button() == Qt::RightButton) - mbStates.right = true; - - // check for hit socket if left button is pressed - if (mbStates.left) { - auto scenePos = event->scenePos(); - auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); - if (rawPort) { - // auto port = rawPort->node->getPortById(rawPort->id()); - // gotta cast to get the non-const version - PortPtr port = ((Port *)rawPort)->sharedFromThis(); - - // are we modifying an existing port with a connection? - if (port->portType == PortType::In) { - // in-sockets with an active connection are the only - // ones that can be edited, and that's the case here - if (port->connections.count() > 0) { - // get the connection - auto con = port->connections[0]; - - // remove it - _scene->removeConnection(con); - - // make it activeCon - con->endPort.clear(); - con->pos1 = con->startPort->scenePos(); - con->pos2 = scenePos; - activeCon = con; - activeCon->updatePathFromPositions(); - activeCon->connectState = ConnectionState::Dragging; - - // emit connection removal signal - - this->_scene->addItem(activeCon.data()); - setDragMode(QGraphicsView::NoDrag); - return true; - } else { - // allow starting connection from left to right? + // qDebug() << "Mouse Press!"; + if (event->button() == Qt::LeftButton) + mbStates.left = true; + if (event->button() == Qt::MiddleButton) + mbStates.middle = true; + if (event->button() == Qt::RightButton) + mbStates.right = true; + + // check for hit socket if left button is pressed + if (mbStates.left) { + auto scenePos = event->scenePos(); + auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); + if (rawPort) { + // auto port = rawPort->node->getPortById(rawPort->id()); + // gotta cast to get the non-const version + PortPtr port = ((Port *)rawPort)->sharedFromThis(); + + // are we modifying an existing port with a connection? + if (port->portType == PortType::In) { + // in-sockets with an active connection are the only + // ones that can be edited, and that's the case here + if (port->connections.count() > 0) { + // get the connection + auto con = port->connections[0]; + + // remove it + _scene->removeConnection(con); + + // make it activeCon + con->endPort.clear(); + con->pos1 = con->startPort->scenePos(); + con->pos2 = scenePos; + activeCon = con; + activeCon->updatePathFromPositions(); + activeCon->connectState = ConnectionState::Dragging; + + // emit connection removal signal + + this->_scene->addItem(activeCon.data()); + setDragMode(QGraphicsView::NoDrag); + return true; + } else { + // allow starting connection from left to right? + } + } + // start new connection + else if (port->portType != PortType::Invalid /* in or out */) { + activeCon = ConnectionPtr(new Connection()); + activeCon->startPort = port; + activeCon->connectState = ConnectionState::Dragging; + + activeCon->pos1 = port->scenePos(); + activeCon->pos2 = scenePos; + activeCon->updatePathFromPositions(); + + this->_scene->addItem(activeCon.data()); + + // prevent further clicking of other items? + // event->ignore(); + setDragMode(QGraphicsView::NoDrag); + return true; + } else { + qDebug() << "trying to hit an Invalid socket"; + } + + this->setDragMode(QGraphicsView::NoDrag); } - } - // start new connection - else if (port->portType != PortType::Invalid /* in or out */) { - activeCon = ConnectionPtr(new Connection()); - activeCon->startPort = port; - activeCon->connectState = ConnectionState::Dragging; - - activeCon->pos1 = port->scenePos(); - activeCon->pos2 = scenePos; - activeCon->updatePathFromPositions(); - - this->_scene->addItem(activeCon.data()); - - // prevent further clicking of other items? - // event->ignore(); - setDragMode(QGraphicsView::NoDrag); - return true; - } else { - qDebug() << "trying to hit an Invalid socket"; - } - - this->setDragMode(QGraphicsView::NoDrag); } - } - return false; + return false; } bool NodeGraph::sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event) { - auto scenePos = event->scenePos(); - if (mbStates.left && !!activeCon) { - auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); - if (rawPort) { - // snap if close enough - activeCon->pos2 = rawPort->scenePos(); - } else { - activeCon->pos2 = scenePos; + auto scenePos = event->scenePos(); + if (mbStates.left && !!activeCon) { + auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); + if (rawPort) { + // snap if close enough + activeCon->pos2 = rawPort->scenePos(); + } else { + activeCon->pos2 = scenePos; + } + activeCon->updatePathFromPositions(); } - activeCon->updatePathFromPositions(); - } - return false; + return false; } bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event) { - if (event->button() == Qt::LeftButton) - mbStates.left = false; - if (event->button() == Qt::MiddleButton) - mbStates.middle = false; - if (event->button() == Qt::RightButton) - mbStates.right = false; - - auto scenePos = event->scenePos(); - - if (mbStates.left == false && !!activeCon) { - auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); - if (rawPort) { - // auto hitPort = rawPort->node->getPortById(rawPort->id()); - // gotta cast to get the non-const version - PortPtr hitPort = ((Port *)rawPort)->sharedFromThis(); - - // determine between the in and out sockets - PortPtr leftPort; - PortPtr rightPort; - - if (hitPort->portType == PortType::In) { - leftPort = activeCon->startPort; - rightPort = hitPort; - } else { - leftPort = hitPort; - rightPort = activeCon->startPort; - } - - // check validity of the potential connection - // NOTE: there's still a chance both leftPort and rightPort are - // still the same type or the same port - - bool isConValid = true; - - if (leftPort == rightPort) { - isConValid = false; - qDebug() << "invalid port"; - } - - if (leftPort->portType == rightPort->portType) { - isConValid = false; - qDebug() << "ports are the same"; - } - - // it's okay to check this since the two prior checks - // would have invalidated same-type and same-port connections - // todo: override connection - if (rightPort->connections.count() != 0) { - isConValid = false; - qDebug() << "right port has existing connections"; - } - - // todo: check for cycle - - if (isConValid) { - // actually make connection - _scene->connectNodes(leftPort->node, leftPort->name, rightPort->node, - rightPort->name); - - // todo: emit undo task - } - } + if (event->button() == Qt::LeftButton) + mbStates.left = false; + if (event->button() == Qt::MiddleButton) + mbStates.middle = false; + if (event->button() == Qt::RightButton) + mbStates.right = false; + + auto scenePos = event->scenePos(); + + if (mbStates.left == false && !!activeCon) { + auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); + if (rawPort) { + // auto hitPort = rawPort->node->getPortById(rawPort->id()); + // gotta cast to get the non-const version + PortPtr hitPort = ((Port *)rawPort)->sharedFromThis(); + + // determine between the in and out sockets + PortPtr leftPort; + PortPtr rightPort; + + if (hitPort->portType == PortType::In) { + leftPort = activeCon->startPort; + rightPort = hitPort; + } else { + leftPort = hitPort; + rightPort = activeCon->startPort; + } + + // check validity of the potential connection + // NOTE: there's still a chance both leftPort and rightPort are + // still the same type or the same port + + bool isConValid = true; + + if (leftPort == rightPort) { + isConValid = false; + qDebug() << "invalid port"; + } + + if (leftPort->portType == rightPort->portType) { + isConValid = false; + qDebug() << "ports are the same"; + } + + // it's okay to check this since the two prior checks + // would have invalidated same-type and same-port connections + // todo: override connection + if (rightPort->connections.count() != 0) { + isConValid = false; + qDebug() << "right port has existing connections"; + } + + // todo: check for cycle + + if (isConValid) { + // actually make connection + _scene->connectNodes(leftPort->node, leftPort->name, + rightPort->node, rightPort->name); + + // todo: emit undo task + } + } - // remove from scene - _scene->removeItem(activeCon.data()); - activeCon.clear(); - } + // remove from scene + _scene->removeItem(activeCon.data()); + activeCon.clear(); + } - // important to reset drag! - this->setDragMode(QGraphicsView::RubberBandDrag); - return false; + // important to reset drag! + this->setDragMode(QGraphicsView::RubberBandDrag); + return false; } const Port *NodeGraph::getPortAtScenePos(float x, float y) const { - auto items = this->_scene->items(QPointF(x, y)); - // auto items = this->items(); - for (auto item : items) { - if (item && item->type() == (int)SceneItemType::Port) - return (const Port *)item; - } - - return nullptr; + auto items = this->_scene->items(QPointF(x, y)); + // auto items = this->items(); + for (auto item : items) { + if (item && item->type() == (int)SceneItemType::Port) + return (const Port *)item; + } + + return nullptr; } NodeGraph::~NodeGraph() { - // remove all items manually otherwise - // smart point destructor of some items - // will cause segfault when cleaning up - // todo: move this to scene items - auto items = this->_scene->items(); - for (auto item : items) - this->_scene->removeItem(item); + // remove all items manually otherwise + // smart point destructor of some items + // will cause segfault when cleaning up + // todo: move this to scene items + auto items = this->_scene->items(); + for (auto item : items) + this->_scene->removeItem(item); } } // namespace nodegraph \ No newline at end of file diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h index 7ff31652..3f31d5b3 100644 --- a/src/nodegraph/nodegraph.h +++ b/src/nodegraph/nodegraph.h @@ -23,14 +23,14 @@ typedef QSharedPointer ConnectionPtr; class Port; struct MouseButtonStates { - bool left; - bool middle; - bool right; + bool left; + bool middle; + bool right; - MouseButtonStates(); + MouseButtonStates(); - // reset all to false - void reset(); + // reset all to false + void reset(); }; /* @@ -38,69 +38,68 @@ This class draws a lot of inspiration from NodeGraphQt https://github.com/jchanvfx/NodeGraphQt/blob/master/NodeGraphQt/widgets/viewer.py */ class NodeGraph : public QGraphicsView { -public: - NodeGraph(QWidget *parent = nullptr); + public: + NodeGraph(QWidget *parent = nullptr); - ScenePtr scene() const { return _scene; } + ScenePtr scene() const { return _scene; } + void setNodeGraphScene(const ScenePtr &scene); - void scaleUp(); + void scaleUp(); - void scaleDown(); + void scaleDown(); - virtual ~NodeGraph(); + virtual ~NodeGraph(); -protected: - void setNodeGraphScene(ScenePtr scene); + protected: + void wheelEvent(QWheelEvent *event) override; - void wheelEvent(QWheelEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; - void keyPressEvent(QKeyEvent *event) override; + void keyReleaseEvent(QKeyEvent *event) override; - void keyReleaseEvent(QKeyEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; - void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; - void mouseMoveEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; - void mouseReleaseEvent(QMouseEvent *event) override; + void drawBackground(QPainter *painter, const QRectF &r) override; - void drawBackground(QPainter *painter, const QRectF &r) override; + void showEvent(QShowEvent *event) override; - void showEvent(QShowEvent *event) override; + bool eventFilter(QObject *o, QEvent *e) override; - bool eventFilter(QObject *o, QEvent *e) override; + // events coming from the scene + // void sceneKeyPressEvent(QKeyEvent *event); - // events coming from the scene - // void sceneKeyPressEvent(QKeyEvent *event); + // void sceneKeyReleaseEvent(QKeyEvent *event); - // void sceneKeyReleaseEvent(QKeyEvent *event); + // NOTE: these functions return true if they swallow the event + // this is because they're implemented using eventFilters and + // that's how eventFilters work in qt + bool sceneMousePressEvent(QGraphicsSceneMouseEvent *event); - // NOTE: these functions return true if they swallow the event - // this is because they're implemented using eventFilters and - // that's how eventFilters work in qt - bool sceneMousePressEvent(QGraphicsSceneMouseEvent *event); + bool sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event); - bool sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event); + bool sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event); - bool sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event); + const Port *getPortAtScenePos(float x, float y) const; - const Port *getPortAtScenePos(float x, float y) const; + private: + QPointF _clickPos; + ScenePtr _scene; + MouseButtonStates mbStates; + ConnectionPtr activeCon; -private: - QPointF _clickPos; - ScenePtr _scene; - MouseButtonStates mbStates; - ConnectionPtr activeCon; + QList nodes; + QList cons; - QList nodes; - QList cons; + signals: + void connectionAdded(ConnectionPtr con); + void connectionRemoved(ConnectionPtr con); + void nodeAdded(NodePtr node); + void nodeRemoved(NodePtr node); -signals: - void connectionAdded(ConnectionPtr con); - void connectionRemoved(ConnectionPtr con); - void nodeAdded(NodePtr node); - void nodeRemoved(NodePtr node); - - void itemsDeleted(QList nodes, QList cons); + void itemsDeleted(QList nodes, QList cons); }; } // namespace nodegraph \ No newline at end of file diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 405a1e10..b8c9a277 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -1,24 +1,22 @@ #include "mainwindow.h" -#include -#include +#include #include -#include +#include #include -#include +#include #include +#include -#include "DockSplitter.h" #include "DockAreaWidget.h" +#include "DockSplitter.h" #include "widgets/graphwidget.h" #include "widgets/librarywidget.h" #include "project.h" -MainWindow::MainWindow(QWidget *parent) - : QMainWindow(parent) -{ +MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { resize(1280, 720); this->setupMenus(); @@ -29,11 +27,9 @@ MainWindow::MainWindow(QWidget *parent) this->setupDocks(); } -void MainWindow::setupMenus() -{ +void MainWindow::setupMenus() { auto fileMenu = this->menuBar()->addMenu("File"); - fileMenu->addAction("Open Project", [=]() - { this->openProject(); }); + fileMenu->addAction("Open Project", [=]() { this->openProject(); }); fileMenu->addAction("New Project", []() {}); fileMenu->addSeparator(); fileMenu->addAction("Save", []() {}); @@ -54,8 +50,7 @@ void MainWindow::setupMenus() optionsMenu->addAction("About", []() {}); } -void MainWindow::setupToolbar() -{ +void MainWindow::setupToolbar() { // https://www.setnode.com/blog/right-aligning-a-button-in-a-qtoolbar/ toolBar = this->addToolBar("main toolbar"); @@ -83,58 +78,62 @@ void MainWindow::setupToolbar() pass ratios as fractions, the function handles the actual width calculation setWidgetRatiosInArea(myArea, { 1.0f/5.0f, 1.0f/5.0f, 1.0f/5.0f }) */ -void setWidgetRatiosInArea(ads::CDockAreaWidget *area, const QList &ratios) -{ +void setWidgetRatiosInArea(ads::CDockAreaWidget *area, + const QList &ratios) { auto splitter = ads::internal::findParent(area); - if (splitter) - { + if (splitter) { int width = splitter->width(); QList finalRatios; - for (auto ratio : ratios) - { + for (auto ratio : ratios) { finalRatios.append(ratio * width); } splitter->setSizes(finalRatios); } } -void MainWindow::setupDocks() -{ +void MainWindow::setupDocks() { setDockNestingEnabled(true); // https://forum.qt.io/topic/3055/mainwindow-layout-problem-with-qdockwidget/17 // graph goes in the center - auto graphArea = addDock("Graph", ads::CenterDockWidgetArea, new GraphWidget(), nullptr); - auto leftArea = addDock("2D View", ads::LeftDockWidgetArea, new QWidget(this), graphArea); - auto rightArea = addDock("Properties", ads::RightDockWidgetArea, new QWidget(this), graphArea); + this->graphWidget = new GraphWidget(); + auto graphArea = + addDock("Graph", ads::CenterDockWidgetArea, graphWidget, nullptr); + auto leftArea = addDock("2D View", ads::LeftDockWidgetArea, + new QWidget(this), graphArea); + auto rightArea = addDock("Properties", ads::RightDockWidgetArea, + new QWidget(this), graphArea); setWidgetRatiosInArea(graphArea, {1.0f / 5, 3.0f / 5, 1.0f / 5}); addDock("3D View", ads::BottomDockWidgetArea, new QWidget(this), leftArea); - addDock("Library", ads::BottomDockWidgetArea, new LibraryWidget(), rightArea); + addDock("Library", ads::BottomDockWidgetArea, new LibraryWidget(), + rightArea); setWidgetRatiosInArea(leftArea, {0.5f, 0.5f}); setWidgetRatiosInArea(rightArea, {0.5f, 0.5f}); } -ads::CDockAreaWidget *MainWindow::addDock(const QString &title, ads::DockWidgetArea area, QWidget *widget, ads::CDockAreaWidget *areaWidget) -{ +ads::CDockAreaWidget *MainWindow::addDock(const QString &title, + ads::DockWidgetArea area, + QWidget *widget, + ads::CDockAreaWidget *areaWidget) { ads::CDockWidget *dockWidget = new ads::CDockWidget(title); if (widget != nullptr) dockWidget->setWidget(widget); - auto newAreaWidget = dockManager->addDockWidget(area, dockWidget, areaWidget); + auto newAreaWidget = + dockManager->addDockWidget(area, dockWidget, areaWidget); return newAreaWidget; } -void MainWindow::openProject() -{ - auto filePath = QFileDialog::getOpenFileName(this, "Open Texture File", "", "Texturelab File (*.texture)"); +void MainWindow::openProject() { + auto filePath = QFileDialog::getOpenFileName(this, "Open Texture File", "", + "Texturelab File (*.texture)"); - if (filePath.isNull() || filePath.isEmpty()) - { + if (filePath.isNull() || filePath.isEmpty()) { return; } @@ -145,6 +144,4 @@ void MainWindow::openProject() this->graphWidget->setTextureProject(project); } -MainWindow::~MainWindow() -{ -} \ No newline at end of file +MainWindow::~MainWindow() {} \ No newline at end of file diff --git a/src/texturelab/project.cpp b/src/texturelab/project.cpp index b99c00a4..271f1eef 100644 --- a/src/texturelab/project.cpp +++ b/src/texturelab/project.cpp @@ -1,27 +1,25 @@ #include "project.h" #include "libraries/library.h" -#include #include #include +#include #include -TextureProjectPtr Project::loadTexture(QString path) -{ +TextureProjectPtr Project::loadTexture(QString path) { QFile file(path); file.open(QIODevice::ReadOnly); QJsonParseError error; auto json = QJsonDocument::fromJson(file.readAll(), &error); file.close(); - if (error.error) - { + if (error.error) { // report error return TextureProjectPtr(nullptr); } TextureProjectPtr texture(new TextureProject()); - qDebug() << json["libraryVersion"].toString(); + // qDebug() << json["libraryVersion"].toString(); // create library from version // Library *lib = new LibraryV1(); @@ -33,8 +31,7 @@ TextureProjectPtr Project::loadTexture(QString path) // load nodes auto nodeArray = json["nodes"].toArray(); - for (auto item : nodeArray) - { + for (auto item : nodeArray) { auto nodeDef = item.toObject(); auto node = lib->createNode(nodeDef["typeName"].toString()); @@ -51,18 +48,19 @@ TextureProjectPtr Project::loadTexture(QString path) // add props auto propObj = nodeDef["properties"].toObject(); - for (auto key : propObj.keys()) - { + for (auto key : propObj.keys()) { node->setProp(key, propObj[key].toVariant()); } + // todo: put this in the appropriate place + node->init(); + texture->nodes[node->id] = node; } // load connections auto conArray = json["connections"].toArray(); - for (auto item : conArray) - { + for (auto item : conArray) { auto conObj = item.toObject(); QString leftNodeId = conObj["leftNodeId"].toString(); diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp index 1104b853..82961083 100644 --- a/src/texturelab/widgets/graphwidget.cpp +++ b/src/texturelab/widgets/graphwidget.cpp @@ -4,15 +4,51 @@ #include #include +#include "./models.h" +#include "graph/scene.h" #include "nodegraph.h" GraphWidget::GraphWidget() : QMainWindow(nullptr) { - graph = new nodegraph::NodeGraph(this); - this->setCentralWidget(graph); + graph = new nodegraph::NodeGraph(this); + this->setCentralWidget(graph); - library = nullptr; + library = nullptr; } void GraphWidget::setTextureProject(TextureProjectPtr project) { - // generate nodes from texture project + // generate nodes from texture project + + // auto scene = graph->scene(); + // auto scene = nodegraph::Scene::create(); + auto scene = new nodegraph::Scene(); + + // add nodes + for (auto node : project->nodes) { + auto gnode = nodegraph::Node::create(); + gnode->setName(node->title); + for (auto input : node->inputs) { + gnode->addInPort(input); + } + + gnode->setId(node->id); + gnode->addOutPort("output"); + gnode->setPos(node->pos.x(), node->pos.y()); + + scene->addNode(gnode); + } + + // add connections + for (auto con : project->connections) { + auto leftNode = scene->getNodeById(con->leftNode->id); + auto rightNode = scene->getNodeById(con->rightNode->id); + + scene->connectNodes(leftNode, "output", rightNode, + con->rightNodeInputName); + } + + // todo: add frames + // todo: add comments + // todo: add navigations + + graph->setNodeGraphScene(nodegraph::ScenePtr(scene)); } \ No newline at end of file diff --git a/src/texturelab/widgets/graphwidget.h b/src/texturelab/widgets/graphwidget.h index 5d7e5b29..4bfcd418 100644 --- a/src/texturelab/widgets/graphwidget.h +++ b/src/texturelab/widgets/graphwidget.h @@ -1,10 +1,14 @@ #pragma once #include +#include namespace nodegraph { class NodeGraph; -} +class Scene; +typedef QSharedPointer ScenePtr; + +} // namespace nodegraph class Library; class TextureProject; @@ -18,4 +22,5 @@ class GraphWidget : public QMainWindow { nodegraph::NodeGraph *graph; Library *library; + nodegraph::ScenePtr scene; }; \ No newline at end of file From e174571a09743ada090d37c21f019ea10e12034f Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 8 Oct 2022 16:34:33 -0400 Subject: [PATCH 034/100] add stroutrup brace formatting --- .clang-format | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.clang-format b/.clang-format index c2f4632e..05082f85 100644 --- a/.clang-format +++ b/.clang-format @@ -1,3 +1,8 @@ # https://github.com/microsoft/vscode-cpptools/issues/932 NamespaceIndentation: None -IndentWidth: 4 \ No newline at end of file +IndentWidth: 4 +AccessModifierOffset: -4 +PointerAlignment: Left + +# https://stackoverflow.com/questions/29477654/how-to-make-clang-format-add-new-line-before-opening-brace-of-a-function +BreakBeforeBraces: Stroustrup From c9b2bb76b039e5531ead67cc24fc39f717ae4c3a Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 8 Oct 2022 16:34:52 -0400 Subject: [PATCH 035/100] add dropping from library to graph --- src/nodegraph/nodegraph.cpp | 89 ++++++++++++++++-------- src/nodegraph/nodegraph.h | 46 +++++++----- src/texturelab/CMakeLists.txt | 1 + src/texturelab/libraries/library.cpp | 25 +++---- src/texturelab/libraries/libv2.h | 26 +++---- src/texturelab/mainwindow.cpp | 47 +++++++++---- src/texturelab/mainwindow.h | 33 +++++---- src/texturelab/models.cpp | 29 +++++++- src/texturelab/models.h | 49 ++++++------- src/texturelab/project.cpp | 8 +-- src/texturelab/utils.h | 12 ++++ src/texturelab/widgets/graphwidget.cpp | 86 ++++++++++++++++++----- src/texturelab/widgets/graphwidget.h | 21 ++++-- src/texturelab/widgets/librarywidget.cpp | 71 +++++++++++++++---- src/texturelab/widgets/librarywidget.h | 33 +++++++-- 15 files changed, 390 insertions(+), 186 deletions(-) create mode 100644 src/texturelab/utils.h diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index 96fae908..a15ecd04 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -26,13 +26,15 @@ namespace nodegraph { MouseButtonStates::MouseButtonStates() { reset(); } -void MouseButtonStates::reset() { +void MouseButtonStates::reset() +{ left = false; middle = false; right = false; } -NodeGraph::NodeGraph(QWidget *parent) : QGraphicsView(parent) { +NodeGraph::NodeGraph(QWidget* parent) : QGraphicsView(parent) +{ setDragMode(QGraphicsView::RubberBandDrag); setRenderHint(QPainter::Antialiasing); @@ -54,13 +56,16 @@ NodeGraph::NodeGraph(QWidget *parent) : QGraphicsView(parent) { // scene->addText("Hello World!"); // setScene(scene); + setAcceptDrops(true); + this->setNodeGraphScene(ScenePtr(new Scene())); mbStates.reset(); } -void NodeGraph::setNodeGraphScene(const ScenePtr &scene) { +void NodeGraph::setNodeGraphScene(const ScenePtr& scene) +{ - // properly cleanup old scene + // properly cleanup old scene if (!!this->_scene) { this->setScene(nullptr); } @@ -72,7 +77,8 @@ void NodeGraph::setNodeGraphScene(const ScenePtr &scene) { scene->installEventFilter(this); } -void NodeGraph::wheelEvent(QWheelEvent *event) { +void NodeGraph::wheelEvent(QWheelEvent* event) +{ QPoint delta = event->angleDelta(); if (delta.y() == 0) { @@ -88,7 +94,8 @@ void NodeGraph::wheelEvent(QWheelEvent *event) { scaleDown(); } -void NodeGraph::scaleUp() { +void NodeGraph::scaleUp() +{ double const step = 1.2; double const factor = std::pow(step, 1.0); @@ -100,20 +107,22 @@ void NodeGraph::scaleUp() { scale(factor, factor); } -void NodeGraph::scaleDown() { +void NodeGraph::scaleDown() +{ double const step = 1.2; double const factor = std::pow(step, -1.0); scale(factor, factor); } -void NodeGraph::keyPressEvent(QKeyEvent *event) { +void NodeGraph::keyPressEvent(QKeyEvent* event) +{ if (event->key() == Qt::Key_Delete) { // delete items! auto items = this->_scene->selectedItems(); for (auto item : items) { if (item->type() == (int)SceneItemType::Node) { - auto node = qgraphicsitem_cast(item); + auto node = qgraphicsitem_cast(item); this->_scene->removeNode(node->sharedFromThis()); } } @@ -126,7 +135,8 @@ void NodeGraph::keyPressEvent(QKeyEvent *event) { this->invalidateScene(QRect(-1000, -1000, 1000, 1000)); } -void NodeGraph::keyReleaseEvent(QKeyEvent *event) { +void NodeGraph::keyReleaseEvent(QKeyEvent* event) +{ switch (event->key()) { case Qt::Key_Shift: // setDragMode(QGraphicsView::ScrollHandDrag); @@ -138,7 +148,8 @@ void NodeGraph::keyReleaseEvent(QKeyEvent *event) { QGraphicsView::keyReleaseEvent(event); } -void NodeGraph::mousePressEvent(QMouseEvent *event) { +void NodeGraph::mousePressEvent(QMouseEvent* event) +{ if (event->button() == Qt::MiddleButton && scene()->mouseGrabberItem() == nullptr) { _clickPos = mapToScene(event->pos()); @@ -147,7 +158,8 @@ void NodeGraph::mousePressEvent(QMouseEvent *event) { QGraphicsView::mousePressEvent(event); } -void NodeGraph::mouseMoveEvent(QMouseEvent *event) { +void NodeGraph::mouseMoveEvent(QMouseEvent* event) +{ if (event->buttons() == Qt::MiddleButton) { QPointF difference = _clickPos - mapToScene(event->pos()); @@ -156,14 +168,16 @@ void NodeGraph::mouseMoveEvent(QMouseEvent *event) { QGraphicsView::mouseMoveEvent(event); } -void NodeGraph::mouseReleaseEvent(QMouseEvent *event) { +void NodeGraph::mouseReleaseEvent(QMouseEvent* event) +{ if (event->button() == Qt::MiddleButton) { setDragMode(QGraphicsView::RubberBandDrag); } QGraphicsView::mouseReleaseEvent(event); } -void NodeGraph::drawBackground(QPainter *painter, const QRectF &r) { +void NodeGraph::drawBackground(QPainter* painter, const QRectF& r) +{ QGraphicsView::drawBackground(painter, r); painter->setRenderHint(QPainter::Antialiasing); @@ -206,13 +220,15 @@ void NodeGraph::drawBackground(QPainter *painter, const QRectF &r) { drawGrid(150); } -void NodeGraph::showEvent(QShowEvent *event) { +void NodeGraph::showEvent(QShowEvent* event) +{ // _scene->setSceneRect(this->rect()); QGraphicsView::showEvent(event); } -bool NodeGraph::eventFilter(QObject *o, QEvent *e) { - QGraphicsSceneMouseEvent *me = (QGraphicsSceneMouseEvent *)e; +bool NodeGraph::eventFilter(QObject* o, QEvent* e) +{ + QGraphicsSceneMouseEvent* me = (QGraphicsSceneMouseEvent*)e; if (o == _scene.data()) { switch ((int)e->type()) { @@ -238,7 +254,8 @@ bool NodeGraph::eventFilter(QObject *o, QEvent *e) { } // todo: probably best to handle this in the views mousePressEvent -bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) { +bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent* event) +{ // qDebug() << "Mouse Press!"; if (event->button() == Qt::LeftButton) mbStates.left = true; @@ -254,7 +271,7 @@ bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) { if (rawPort) { // auto port = rawPort->node->getPortById(rawPort->id()); // gotta cast to get the non-const version - PortPtr port = ((Port *)rawPort)->sharedFromThis(); + PortPtr port = ((Port*)rawPort)->sharedFromThis(); // are we modifying an existing port with a connection? if (port->portType == PortType::In) { @@ -280,7 +297,8 @@ bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) { this->_scene->addItem(activeCon.data()); setDragMode(QGraphicsView::NoDrag); return true; - } else { + } + else { // allow starting connection from left to right? } } @@ -300,7 +318,8 @@ bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) { // event->ignore(); setDragMode(QGraphicsView::NoDrag); return true; - } else { + } + else { qDebug() << "trying to hit an Invalid socket"; } @@ -311,14 +330,16 @@ bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent *event) { return false; } -bool NodeGraph::sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event) { +bool NodeGraph::sceneMouseMoveEvent(QGraphicsSceneMouseEvent* event) +{ auto scenePos = event->scenePos(); if (mbStates.left && !!activeCon) { auto rawPort = this->getPortAtScenePos(scenePos.x(), scenePos.y()); if (rawPort) { // snap if close enough activeCon->pos2 = rawPort->scenePos(); - } else { + } + else { activeCon->pos2 = scenePos; } activeCon->updatePathFromPositions(); @@ -327,7 +348,8 @@ bool NodeGraph::sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event) { return false; } -bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event) { +bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent* event) +{ if (event->button() == Qt::LeftButton) mbStates.left = false; if (event->button() == Qt::MiddleButton) @@ -342,7 +364,7 @@ bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (rawPort) { // auto hitPort = rawPort->node->getPortById(rawPort->id()); // gotta cast to get the non-const version - PortPtr hitPort = ((Port *)rawPort)->sharedFromThis(); + PortPtr hitPort = ((Port*)rawPort)->sharedFromThis(); // determine between the in and out sockets PortPtr leftPort; @@ -351,7 +373,8 @@ bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event) { if (hitPort->portType == PortType::In) { leftPort = activeCon->startPort; rightPort = hitPort; - } else { + } + else { leftPort = hitPort; rightPort = activeCon->startPort; } @@ -401,18 +424,26 @@ bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event) { return false; } -const Port *NodeGraph::getPortAtScenePos(float x, float y) const { +void NodeGraph::dragEnterEvent(QDragEnterEvent* evt) { evt->ignore(); } + +void NodeGraph::dragMoveEvent(QDragMoveEvent* evt) { evt->ignore(); } + +void NodeGraph::dropEvent(QDropEvent* evt) { evt->ignore(); } + +const Port* NodeGraph::getPortAtScenePos(float x, float y) const +{ auto items = this->_scene->items(QPointF(x, y)); // auto items = this->items(); for (auto item : items) { if (item && item->type() == (int)SceneItemType::Port) - return (const Port *)item; + return (const Port*)item; } return nullptr; } -NodeGraph::~NodeGraph() { +NodeGraph::~NodeGraph() +{ // remove all items manually otherwise // smart point destructor of some items // will cause segfault when cleaning up diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h index 3f31d5b3..c2477e03 100644 --- a/src/nodegraph/nodegraph.h +++ b/src/nodegraph/nodegraph.h @@ -38,11 +38,11 @@ This class draws a lot of inspiration from NodeGraphQt https://github.com/jchanvfx/NodeGraphQt/blob/master/NodeGraphQt/widgets/viewer.py */ class NodeGraph : public QGraphicsView { - public: - NodeGraph(QWidget *parent = nullptr); +public: + NodeGraph(QWidget* parent = nullptr); ScenePtr scene() const { return _scene; } - void setNodeGraphScene(const ScenePtr &scene); + void setNodeGraphScene(const ScenePtr& scene); void scaleUp(); @@ -50,24 +50,24 @@ class NodeGraph : public QGraphicsView { virtual ~NodeGraph(); - protected: - void wheelEvent(QWheelEvent *event) override; +protected: + void wheelEvent(QWheelEvent* event) override; - void keyPressEvent(QKeyEvent *event) override; + void keyPressEvent(QKeyEvent* event) override; - void keyReleaseEvent(QKeyEvent *event) override; + void keyReleaseEvent(QKeyEvent* event) override; - void mousePressEvent(QMouseEvent *event) override; + void mousePressEvent(QMouseEvent* event) override; - void mouseMoveEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent* event) override; - void mouseReleaseEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent* event) override; - void drawBackground(QPainter *painter, const QRectF &r) override; + void drawBackground(QPainter* painter, const QRectF& r) override; - void showEvent(QShowEvent *event) override; + void showEvent(QShowEvent* event) override; - bool eventFilter(QObject *o, QEvent *e) override; + bool eventFilter(QObject* o, QEvent* e) override; // events coming from the scene // void sceneKeyPressEvent(QKeyEvent *event); @@ -77,15 +77,23 @@ class NodeGraph : public QGraphicsView { // NOTE: these functions return true if they swallow the event // this is because they're implemented using eventFilters and // that's how eventFilters work in qt - bool sceneMousePressEvent(QGraphicsSceneMouseEvent *event); + bool sceneMousePressEvent(QGraphicsSceneMouseEvent* event); - bool sceneMouseMoveEvent(QGraphicsSceneMouseEvent *event); + bool sceneMouseMoveEvent(QGraphicsSceneMouseEvent* event); - bool sceneMouseReleaseEvent(QGraphicsSceneMouseEvent *event); + bool sceneMouseReleaseEvent(QGraphicsSceneMouseEvent* event); - const Port *getPortAtScenePos(float x, float y) const; + // allow drag and drop + // https://stackoverflow.com/a/7210404 + // must ignore the events in nodegraph so they + // propagate to the parent widget + void dragEnterEvent(QDragEnterEvent* evt); + void dragMoveEvent(QDragMoveEvent* event); + void dropEvent(QDropEvent* event); - private: + const Port* getPortAtScenePos(float x, float y) const; + +private: QPointF _clickPos; ScenePtr _scene; MouseButtonStates mbStates; @@ -94,7 +102,7 @@ class NodeGraph : public QGraphicsView { QList nodes; QList cons; - signals: +signals: void connectionAdded(ConnectionPtr con); void connectionRemoved(ConnectionPtr con); void nodeAdded(NodePtr node); diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index 25866870..bd60970e 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -18,6 +18,7 @@ set(PROJECT_SOURCES ./main.cpp ./mainwindow.cpp ./mainwindow.h + ./utils.h ./models.h ./models.cpp ./project.h diff --git a/src/texturelab/libraries/library.cpp b/src/texturelab/libraries/library.cpp index a4610eb8..e001972c 100644 --- a/src/texturelab/libraries/library.cpp +++ b/src/texturelab/libraries/library.cpp @@ -1,17 +1,19 @@ -#include "../models.h" #include "library.h" +#include "../models.h" #include "libv2.h" #include TextureNodePtr Library::createNode(QString name) { - if (this->items.contains(name)) - { - auto &item = items[name]; - if (item.name == name) - { + if (this->items.contains(name)) { + auto& item = items[name]; + if (item.name == name) { auto node = item.factoryFunction(); + + // todo: put this in the appropriate place + node->init(); + return node; } } @@ -19,9 +21,7 @@ TextureNodePtr Library::createNode(QString name) return TextureNodePtr(nullptr); } -void Library::addNode(QString name, - QString displayName, - QString iconPath, +void Library::addNode(QString name, QString displayName, QString iconPath, std::function factoryFunction) { @@ -34,17 +34,14 @@ void Library::addNode(QString name, items[name] = entry; } -bool Library::hasNode(QString name) -{ - return items.contains(name); -} +bool Library::hasNode(QString name) { return items.contains(name); } LibraryV1::LibraryV1() : Library() { // add items } -Library *createLibraryV2() +Library* createLibraryV2() { auto lib = new Library(); lib->addNode("polygon", "Polygon", ":nodes/bevel.png"); diff --git a/src/texturelab/libraries/libv2.h b/src/texturelab/libraries/libv2.h index 01629e3e..b1a4cc51 100644 --- a/src/texturelab/libraries/libv2.h +++ b/src/texturelab/libraries/libv2.h @@ -2,22 +2,18 @@ #include "../models.h" -class PolygonNode : public TextureNode -{ +class PolygonNode : public TextureNode { public: - virtual void init() override - { + virtual void init() override { this->title = "Polygon"; // todo: add props } }; -class ColorNode : public TextureNode -{ +class ColorNode : public TextureNode { public: - virtual void init() override - { + virtual void init() override { this->title = "Color"; this->addInput("image"); @@ -26,11 +22,9 @@ class ColorNode : public TextureNode } }; -class BlendNode : public TextureNode -{ +class BlendNode : public TextureNode { public: - virtual void init() override - { + virtual void init() override { this->title = "Blend"; this->addInput("colorA"); @@ -41,12 +35,10 @@ class BlendNode : public TextureNode } }; -class OutputNode : public TextureNode -{ +class OutputNode : public TextureNode { public: - virtual void init() override - { - this->title = "Blend"; + virtual void init() override { + this->title = "Output"; this->addInput("image"); diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index b8c9a277..705cbed6 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -16,7 +16,8 @@ #include "project.h" -MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { +MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) +{ resize(1280, 720); this->setupMenus(); @@ -25,9 +26,21 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->dockManager = new ads::CDockManager(this); this->setupDocks(); + + // set default empty project + auto project = TextureProject::createEmpty(); + this->setProject(project); +} + +void MainWindow::setProject(TextureProjectPtr project) +{ + this->project = project; + this->graphWidget->setTextureProject(project); + this->libraryWidget->setLibrary(project->library); } -void MainWindow::setupMenus() { +void MainWindow::setupMenus() +{ auto fileMenu = this->menuBar()->addMenu("File"); fileMenu->addAction("Open Project", [=]() { this->openProject(); }); fileMenu->addAction("New Project", []() {}); @@ -50,11 +63,12 @@ void MainWindow::setupMenus() { optionsMenu->addAction("About", []() {}); } -void MainWindow::setupToolbar() { +void MainWindow::setupToolbar() +{ // https://www.setnode.com/blog/right-aligning-a-button-in-a-qtoolbar/ toolBar = this->addToolBar("main toolbar"); - QWidget *spacer = new QWidget(); + QWidget* spacer = new QWidget(); spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); // undo redo @@ -78,9 +92,10 @@ void MainWindow::setupToolbar() { pass ratios as fractions, the function handles the actual width calculation setWidgetRatiosInArea(myArea, { 1.0f/5.0f, 1.0f/5.0f, 1.0f/5.0f }) */ -void setWidgetRatiosInArea(ads::CDockAreaWidget *area, - const QList &ratios) { - auto splitter = ads::internal::findParent(area); +void setWidgetRatiosInArea(ads::CDockAreaWidget* area, + const QList& ratios) +{ + auto splitter = ads::internal::findParent(area); if (splitter) { int width = splitter->width(); @@ -92,7 +107,8 @@ void setWidgetRatiosInArea(ads::CDockAreaWidget *area, } } -void MainWindow::setupDocks() { +void MainWindow::setupDocks() +{ setDockNestingEnabled(true); // https://forum.qt.io/topic/3055/mainwindow-layout-problem-with-qdockwidget/17 @@ -106,20 +122,22 @@ void MainWindow::setupDocks() { auto rightArea = addDock("Properties", ads::RightDockWidgetArea, new QWidget(this), graphArea); + this->libraryWidget = new LibraryWidget(); setWidgetRatiosInArea(graphArea, {1.0f / 5, 3.0f / 5, 1.0f / 5}); addDock("3D View", ads::BottomDockWidgetArea, new QWidget(this), leftArea); - addDock("Library", ads::BottomDockWidgetArea, new LibraryWidget(), + addDock("Library", ads::BottomDockWidgetArea, this->libraryWidget, rightArea); setWidgetRatiosInArea(leftArea, {0.5f, 0.5f}); setWidgetRatiosInArea(rightArea, {0.5f, 0.5f}); } -ads::CDockAreaWidget *MainWindow::addDock(const QString &title, +ads::CDockAreaWidget* MainWindow::addDock(const QString& title, ads::DockWidgetArea area, - QWidget *widget, - ads::CDockAreaWidget *areaWidget) { - ads::CDockWidget *dockWidget = new ads::CDockWidget(title); + QWidget* widget, + ads::CDockAreaWidget* areaWidget) +{ + ads::CDockWidget* dockWidget = new ads::CDockWidget(title); if (widget != nullptr) dockWidget->setWidget(widget); @@ -129,7 +147,8 @@ ads::CDockAreaWidget *MainWindow::addDock(const QString &title, return newAreaWidget; } -void MainWindow::openProject() { +void MainWindow::openProject() +{ auto filePath = QFileDialog::getOpenFileName(this, "Open Texture File", "", "Texturelab File (*.texture)"); diff --git a/src/texturelab/mainwindow.h b/src/texturelab/mainwindow.h index 180ec80a..a0eea97d 100644 --- a/src/texturelab/mainwindow.h +++ b/src/texturelab/mainwindow.h @@ -1,10 +1,10 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H +#include "DockManager.h" #include -#include #include -#include "DockManager.h" +#include class GraphWidget; class LibraryWidget; @@ -16,12 +16,11 @@ class TextureProject; typedef QSharedPointer TextureProjectPtr; class QToolBar; -class MainWindow : public QMainWindow -{ +class MainWindow : public QMainWindow { Q_OBJECT public: - MainWindow(QWidget *parent = nullptr); + MainWindow(QWidget* parent = nullptr); ~MainWindow(); protected: @@ -32,18 +31,22 @@ class MainWindow : public QMainWindow // menu callbacks void openProject(); - ads::CDockAreaWidget *addDock(const QString &title, ads::DockWidgetArea area, QWidget *widget, ads::CDockAreaWidget *areaWidget); + void setProject(TextureProjectPtr project); + + ads::CDockAreaWidget* addDock(const QString& title, + ads::DockWidgetArea area, QWidget* widget, + ads::CDockAreaWidget* areaWidget); private: - ads::CDockManager *dockManager; - QToolBar *toolBar; - QWidget *editor; - - GraphWidget *graphWidget; - LibraryWidget *libraryWidget; - PropertiesWidget *propWidget; - View2DWidget *view2DWidget; - View3DWidget *view3DWidget; + ads::CDockManager* dockManager; + QToolBar* toolBar; + QWidget* editor; + + GraphWidget* graphWidget; + LibraryWidget* libraryWidget; + PropertiesWidget* propWidget; + View2DWidget* view2DWidget; + View3DWidget* view3DWidget; TextureProjectPtr project; }; diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index bb25ea79..a6304bc7 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -1,12 +1,21 @@ #include "models.h" +#include "libraries/library.h" #include "props.h" -TextureNodePtr TextureProject::getNodeById(const QString &id) +TextureNodePtr TextureProject::getNodeById(const QString& id) { return nodes[id]; } -void TextureProject::addConnection(TextureNodePtr leftNode, TextureNodePtr rightNode, QString rightNodeInput) +void TextureProject::addNode(const TextureNodePtr& node) +{ + // todo: check if node already exists + this->nodes[node->id] = node; +} + +void TextureProject::addConnection(TextureNodePtr leftNode, + TextureNodePtr rightNode, + QString rightNodeInput) { QSharedPointer con(new Connection()); con->id = createGuid(); @@ -21,7 +30,21 @@ void TextureProject::addConnection(TextureNodePtr leftNode, TextureNodePtr right // todo: request updates } -void TextureNode::addInput(const QString &inputName) +TextureProjectPtr TextureProject::createEmpty(Library* library) +{ + auto project = new TextureProject(); + project->randomSeed = 0; + if (library != nullptr) + project->library = library; + else + project->library = createLibraryV2(); + + return TextureProjectPtr(project); +} + +TextureNode::TextureNode() { id = createGuid(); } + +void TextureNode::addInput(const QString& inputName) { inputs.append(inputName); } diff --git a/src/texturelab/models.h b/src/texturelab/models.h index cc66b3d8..9c6c7579 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -1,12 +1,12 @@ #ifndef MODELS_H #define MODELS_H -#include -#include +#include #include -#include +#include #include -#include +#include +#include class TextureProject; class TextureNode; @@ -22,37 +22,35 @@ typedef QSharedPointer ConnectionPtr; class Prop; class Library; -enum class PackageFileType -{ - Texture, - Image -}; +enum class PackageFileType { Texture, Image }; -class ProjectFile -{ +class ProjectFile { public: QByteArray contents(); }; -class TextureProject : public QEnableSharedFromThis -{ +class TextureProject : public QEnableSharedFromThis { public: int randomSeed; - Library *library; + Library* library = nullptr; QMap nodes; QMap connections; QMap comments; QMap frames; - TextureNodePtr getNodeById(const QString &id); + TextureNodePtr getNodeById(const QString& id); + + void addNode(const TextureNodePtr& node); // todo: make two port variant - void addConnection(TextureNodePtr leftNode, TextureNodePtr rightNode, QString rightNodeInput); + void addConnection(TextureNodePtr leftNode, TextureNodePtr rightNode, + QString rightNodeInput); + + static TextureProjectPtr createEmpty(Library* library = nullptr); }; -class TextureNode : public QEnableSharedFromThis -{ +class TextureNode : public QEnableSharedFromThis { public: QString id; QString title; @@ -64,27 +62,27 @@ class TextureNode : public QEnableSharedFromThis long randomSeed; QString exportName; - QMap props; + QMap props; + + TextureNode(); virtual void init(){}; - void addInput(const QString &inputName); + void addInput(const QString& inputName); void setProp(QString propName, QVariant value); // add prop functions }; -class Comment : public QEnableSharedFromThis -{ +class Comment : public QEnableSharedFromThis { public: QString id; QString text; QVector2D pos; }; -class Frame : public QEnableSharedFromThis -{ +class Frame : public QEnableSharedFromThis { public: QString id; QString text; @@ -93,8 +91,7 @@ class Frame : public QEnableSharedFromThis QVector2D size; }; -class Connection : public QEnableSharedFromThis -{ +class Connection : public QEnableSharedFromThis { public: QString id; diff --git a/src/texturelab/project.cpp b/src/texturelab/project.cpp index 271f1eef..f5d0dea9 100644 --- a/src/texturelab/project.cpp +++ b/src/texturelab/project.cpp @@ -5,7 +5,8 @@ #include #include -TextureProjectPtr Project::loadTexture(QString path) { +TextureProjectPtr Project::loadTexture(QString path) +{ QFile file(path); file.open(QIODevice::ReadOnly); QJsonParseError error; @@ -23,7 +24,7 @@ TextureProjectPtr Project::loadTexture(QString path) { // create library from version // Library *lib = new LibraryV1(); - Library *lib = createLibraryV2(); + Library* lib = createLibraryV2(); // scene objects auto sceneObj = json["scene"].toObject(); @@ -52,9 +53,6 @@ TextureProjectPtr Project::loadTexture(QString path) { node->setProp(key, propObj[key].toVariant()); } - // todo: put this in the appropriate place - node->init(); - texture->nodes[node->id] = node; } diff --git a/src/texturelab/utils.h b/src/texturelab/utils.h new file mode 100644 index 00000000..8bbc3aa6 --- /dev/null +++ b/src/texturelab/utils.h @@ -0,0 +1,12 @@ +#pragma once + +#include + +enum class Roles : int { + ItemType = Qt::UserRole + 1, + IdentityData = Qt::UserRole + 2, + + LibraryItemName = Qt::UserRole + 10 +}; + +const QString LIBRARY_ITEM_MIME_FORMAT = "texturelab/library-item"; \ No newline at end of file diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp index 82961083..63ec1c26 100644 --- a/src/texturelab/widgets/graphwidget.cpp +++ b/src/texturelab/widgets/graphwidget.cpp @@ -1,40 +1,41 @@ #include "graphwidget.h" +#include #include #include #include +#include #include #include "./models.h" +#include "./utils.h" #include "graph/scene.h" +#include "libraries/library.h" +#include "librarywidget.h" #include "nodegraph.h" -GraphWidget::GraphWidget() : QMainWindow(nullptr) { +GraphWidget::GraphWidget() : QMainWindow(nullptr) +{ graph = new nodegraph::NodeGraph(this); this->setCentralWidget(graph); - library = nullptr; + this->setAcceptDrops(true); + + // library = nullptr; } -void GraphWidget::setTextureProject(TextureProjectPtr project) { +void GraphWidget::setTextureProject(TextureProjectPtr project) +{ // generate nodes from texture project // auto scene = graph->scene(); - // auto scene = nodegraph::Scene::create(); - auto scene = new nodegraph::Scene(); + auto scene = nodegraph::Scene::create(); + // auto scene = new nodegraph::Scene(); + this->scene = scene; + this->project = project; // add nodes for (auto node : project->nodes) { - auto gnode = nodegraph::Node::create(); - gnode->setName(node->title); - for (auto input : node->inputs) { - gnode->addInPort(input); - } - - gnode->setId(node->id); - gnode->addOutPort("output"); - gnode->setPos(node->pos.x(), node->pos.y()); - - scene->addNode(gnode); + this->addNode(node); } // add connections @@ -50,5 +51,56 @@ void GraphWidget::setTextureProject(TextureProjectPtr project) { // todo: add comments // todo: add navigations - graph->setNodeGraphScene(nodegraph::ScenePtr(scene)); + // graph->setNodeGraphScene(nodegraph::ScenePtr(scene)); + graph->setNodeGraphScene(scene); +} + +void GraphWidget::addNode(const TextureNodePtr& node) +{ + auto gnode = nodegraph::Node::create(); + gnode->setName(node->title); + for (auto input : node->inputs) { + gnode->addInPort(input); + } + + gnode->setId(node->id); + gnode->addOutPort("output"); + gnode->setPos(node->pos.x(), node->pos.y()); + + scene->addNode(gnode); +} + +void GraphWidget::dragEnterEvent(QDragEnterEvent* evt) +{ + // qDebug() << "Drag enter"; + evt->acceptProposedAction(); +} + +void GraphWidget::dragMoveEvent(QDragMoveEvent* evt) +{ + // qDebug() << "drag move"; + evt->acceptProposedAction(); +} + +void GraphWidget::dropEvent(QDropEvent* evt) +{ + auto mimeData = evt->mimeData(); + if (mimeData->hasFormat(LIBRARY_ITEM_MIME_FORMAT)) { + // auto data = qobject_cast(mimeData); + auto data = (const LibraryItemMimeData*)mimeData; + + // qDebug() << data->libraryItemName; + // create node from library + auto node = project->library->createNode(data->libraryItemName); + + auto scenePos = this->graph->mapToScene(evt->position().toPoint()); + node->pos = QVector2D(scenePos) - QVector2D(50, 50); + + this->project->addNode(node); + this->addNode(node); + + evt->accept(); + } + // mimeData->formats().contains() + // if (mimeData->data("ITEM_TYPE").toStdString() == "") } \ No newline at end of file diff --git a/src/texturelab/widgets/graphwidget.h b/src/texturelab/widgets/graphwidget.h index 4bfcd418..af21d764 100644 --- a/src/texturelab/widgets/graphwidget.h +++ b/src/texturelab/widgets/graphwidget.h @@ -3,6 +3,7 @@ #include #include +class QDragEnterEvent; namespace nodegraph { class NodeGraph; class Scene; @@ -12,15 +13,25 @@ typedef QSharedPointer ScenePtr; class Library; class TextureProject; +class TextureNode; typedef QSharedPointer TextureProjectPtr; +typedef QSharedPointer TextureNodePtr; class GraphWidget : public QMainWindow { public: - GraphWidget(); + GraphWidget(); - void setTextureProject(TextureProjectPtr project); + void setTextureProject(TextureProjectPtr project); - nodegraph::NodeGraph *graph; - Library *library; - nodegraph::ScenePtr scene; + void dragEnterEvent(QDragEnterEvent* evt); + void dragMoveEvent(QDragMoveEvent* event); + void dropEvent(QDropEvent* event); + + nodegraph::NodeGraph* graph; + // Library* library; + nodegraph::ScenePtr scene; + TextureProjectPtr project; + +protected: + void addNode(const TextureNodePtr& node); }; \ No newline at end of file diff --git a/src/texturelab/widgets/librarywidget.cpp b/src/texturelab/widgets/librarywidget.cpp index fef3792a..844162e7 100644 --- a/src/texturelab/widgets/librarywidget.cpp +++ b/src/texturelab/widgets/librarywidget.cpp @@ -1,13 +1,26 @@ #include "librarywidget.h" +#include "../utils.h" #include "./libraries/library.h" -#include #include -#include -#include #include -#include #include +#include +#include +#include +#include +#include + +// https://doc.qt.io/qt-6/qmimedata.html +// subclassing QMimeData is cleaner + +bool LibraryItemMimeData::hasFormat(const QString& format) const +{ + if (format == LIBRARY_ITEM_MIME_FORMAT) + return true; + + return false; +} LibraryWidget::LibraryWidget() : QWidget() { @@ -18,8 +31,8 @@ LibraryWidget::LibraryWidget() : QWidget() searchBar = new QLineEdit(this); searchBar->setPlaceholderText("search"); searchBar->setAlignment(Qt::AlignLeft); - connect(searchBar, &QLineEdit::textChanged, [=](QString text) - { qDebug() << "search changed"; }); + connect(searchBar, &QLineEdit::textChanged, + [=](QString text) { qDebug() << "search changed"; }); this->layout()->addWidget(searchBar); @@ -31,20 +44,27 @@ LibraryWidget::LibraryWidget() : QWidget() this->setLibrary(nullptr); } -void LibraryWidget::setLibrary(Library *lib) +void LibraryWidget::setLibrary(Library* lib) { QSize currentSize = QSize(90, 90); - // for (auto &libraryItem : lib->items) - for (int i = 0; i < 10; i++) - { - QListWidgetItem *item = new QListWidgetItem; - item->setData(Qt::DisplayRole, "Node"); + this->listWidget->clear(); + + if (!lib) + return; + + for (auto& libraryItem : lib->items) { + // for (int i = 0; i < 10; i++) { + QListWidgetItem* item = new QListWidgetItem; + item->setData(Qt::DisplayRole, libraryItem.name); + item->setData((int)Roles::ItemType, "LibraryItem"); + item->setData((int)Roles::LibraryItemName, libraryItem.name); // item->setData(Qt::DisplayRole, libraryItem.name); item->setSizeHint(currentSize); item->setTextAlignment(Qt::AlignCenter); item->setFlags(item->flags() | Qt::ItemIsEditable); - item->setIcon(QIcon(":nodes/bevel.png")); + // item->setIcon(QIcon(":nodes/bevel.png")); + item->setIcon(libraryItem.icon); this->listWidget->addItem(item); } @@ -59,7 +79,9 @@ LibraryListWidget::LibraryListWidget() : QListWidget() setMouseTracking(true); setEditTriggers(QAbstractItemView::NoEditTriggers); - setDragDropMode(QAbstractItemView::DragOnly); + setDragDropMode(QAbstractItemView::DragDrop); + setDragEnabled(true); + setResizeMode(QListWidget::Adjust); setDefaultDropAction(Qt::CopyAction); setSelectionMode(QAbstractItemView::SingleSelection); @@ -75,6 +97,25 @@ LibraryListWidget::LibraryListWidget() : QListWidget() setDropIndicatorShown(true); setStyleSheet( - "QListView::item{ border-radius: 2px; border: 0px solid rgba(0,0,0,1); margin-left: 6px; }" + "QListView::item{ border-radius: 2px; border: 0px solid rgba(0,0,0,1); " + "margin-left: 6px; }" "QListView::item:hover{border: 1px solid rgba(50,150,250,1); }"); +} + +QMimeData* +LibraryListWidget::mimeData(const QList& items) const +{ + // QMimeData* data = new QMimeData(); + // // set text for item + // data->setText(items[0]->data(Qt::DisplayRole).toString()); + // data->setData("ITEM_TYPE", "LIBRARY_ITEM"); + + auto itemName = items[0]->data((int)Roles::LibraryItemName).toString(); + // data->setData("LIBRARY_ITEM_NAME", itemName); + qDebug() << "Mime Data Dragging: " << itemName; + + auto mimeData = new LibraryItemMimeData(); + mimeData->libraryItemName = itemName; + + return mimeData; } \ No newline at end of file diff --git a/src/texturelab/widgets/librarywidget.h b/src/texturelab/widgets/librarywidget.h index 62083f6a..141bc5a5 100644 --- a/src/texturelab/widgets/librarywidget.h +++ b/src/texturelab/widgets/librarywidget.h @@ -2,25 +2,44 @@ #include #include +#include class Library; class LibraryListWidget; class QLineEdit; // https://stackoverflow.com/questions/37331270/how-to-create-grid-style-qlistwidget -class LibraryWidget : public QWidget -{ +class LibraryWidget : public QWidget { // Q_OBJECT public: LibraryWidget(); - void setLibrary(Library *lib); + void setLibrary(Library* lib); - LibraryListWidget *listWidget; - QLineEdit *searchBar; + LibraryListWidget* listWidget; + QLineEdit* searchBar; }; -class LibraryListWidget : public QListWidget -{ +class LibraryItemMimeData : public QMimeData { + Q_OBJECT + +public: + QString libraryItemName; + + virtual bool hasFormat(const QString& format) const override; +}; + +class LibraryListWidget : public QListWidget { public: LibraryListWidget(); + +protected: + // https://stackoverflow.com/questions/4295838/how-to-implement-drag-in-a-qlistwidget-that-contains-files + // QStringList mimeTypes() const + // { + // QStringList qstrList; + // qstrList.append("texturelab/library-item"); + // return qstrList; + // } + + QMimeData* mimeData(const QList& items) const; }; \ No newline at end of file From 8e3baa316559444f0dbb84ce3371f5d0bd169daa Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 8 Oct 2022 17:04:12 -0400 Subject: [PATCH 036/100] detach scene items from parent on deletion to prevent segfaulting --- src/nodegraph/graph/scene.cpp | 121 +++++++++++++++++++++++++--------- src/nodegraph/graph/scene.h | 56 +++++++++------- src/nodegraph/nodegraph.cpp | 11 +--- 3 files changed, 122 insertions(+), 66 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index e10f0854..2c134466 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -9,19 +9,22 @@ namespace nodegraph { -Scene::Scene() : QGraphicsScene() { +Scene::Scene() : QGraphicsScene() +{ this->id = QUuid::createUuid().toString(QUuid::WithoutBraces); } ScenePtr Scene::create() { return ScenePtr(new Scene()); } -void Scene::addNode(NodePtr node) { +void Scene::addNode(NodePtr node) +{ this->addItem(node.data()); nodes[node->id()] = node; } void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, - NodePtr rightNode, QString rightInputName) { + NodePtr rightNode, QString rightInputName) +{ auto leftPort = leftNode->getOutPortByName(leftOutputName); qDebug() << rightNode->getInPorts(); auto rightPort = rightNode->getInPortByName(rightInputName); @@ -44,7 +47,8 @@ void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, NodePtr Scene::getNodeById(QString id) { return nodes[id]; } -void Scene::removeNode(NodePtr node) { +void Scene::removeNode(NodePtr node) +{ // gather connections QList cons; for (auto port : node->getInPorts()) { @@ -69,14 +73,26 @@ void Scene::removeNode(NodePtr node) { node->show(); } -void Scene::removeConnection(ConnectionPtr con) { +void Scene::removeConnection(ConnectionPtr con) +{ con->startPort->removeConnection(con); con->endPort->removeConnection(con); this->removeItem(con.data()); } -Node::Node() { +Scene::~Scene() +{ + // remove all items manually otherwise + // smart point destructor of some items + // will cause segfault when cleaning up + auto items = this->items(); + for (auto item : items) + this->removeItem(item); +} + +Node::Node() +{ width = 100; height = 100; isHovered = false; @@ -108,7 +124,7 @@ Node::Node() { font.setPixelSize(12); text->setFont(font); - QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; + QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect; effect->setBlurRadius(20); effect->setXOffset(0); effect->setYOffset(0); @@ -121,7 +137,8 @@ Node::Node() { NodePtr Node::create() { return NodePtr(new Node()); } -void Node::setName(QString name) { +void Node::setName(QString name) +{ this->name = name; text->setPlainText(name); @@ -138,7 +155,8 @@ const QVector Node::getInPorts() const { return inPorts; } const QVector Node::getOutPorts() const { return outPorts; } -void Node::addInPort(QString name) { +void Node::addInPort(QString name) +{ PortPtr port(new Port(this)); port->name = name; port->portType = PortType::In; @@ -160,7 +178,8 @@ void Node::addInPort(QString name) { } } -void Node::addOutPort(QString name) { +void Node::addOutPort(QString name) +{ PortPtr port(new Port(this)); port->name = name; port->portType = PortType::Out; @@ -182,7 +201,8 @@ void Node::addOutPort(QString name) { } } -PortPtr Node::getPortById(QString id) { +PortPtr Node::getPortById(QString id) +{ for (auto port : inPorts) { if (port->id() == id) return port; @@ -196,7 +216,8 @@ PortPtr Node::getPortById(QString id) { Q_ASSERT(false); } -PortPtr Node::getInPortByName(QString name) { +PortPtr Node::getInPortByName(QString name) +{ for (auto port : inPorts) { if (port->name == name) return port; @@ -205,7 +226,8 @@ PortPtr Node::getInPortByName(QString name) { Q_ASSERT(false); } -PortPtr Node::getOutPortByName(QString name) { +PortPtr Node::getOutPortByName(QString name) +{ for (auto port : outPorts) { if (port->name == name) return port; @@ -221,20 +243,23 @@ QRectF Node::boundingRect() const { return QRectF(0, 0, 100, 100); } // QGraphicsObject::mouseMoveEvent(event); // } -void Node::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { +void Node::hoverEnterEvent(QGraphicsSceneHoverEvent* event) +{ this->text->hide(); this->isHovered = true; QGraphicsObject::hoverEnterEvent(event); } -void Node::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { +void Node::hoverLeaveEvent(QGraphicsSceneHoverEvent* event) +{ this->text->show(); this->isHovered = false; QGraphicsObject::hoverLeaveEvent(event); } -void Node::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, - QWidget *widget) { +void Node::paint(QPainter* painter, QStyleOptionGraphicsItem const* option, + QWidget* widget) +{ const int titleHeight = 20; const int nodeWidth = width; const int nodeHeight = height; @@ -290,9 +315,18 @@ void Node::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, // draw highlight } +Node::~Node() +{ + // remove ownership from scene else scene will try to + // clean it up after it's been deleted + if (this->scene()) + this->scene()->removeItem(this); +} + QString Port::id() const { return _id; } -Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) { +Port::Port(QGraphicsObject* parent) : QGraphicsObject(parent) +{ setCursor(Qt::ClosedHandCursor); // this->setFlag(QGraphicsItem::ItemIsSelectable, false); @@ -304,24 +338,28 @@ Port::Port(QGraphicsObject *parent) : QGraphicsObject(parent) { _id = QUuid::createUuid().toString(QUuid::WithoutBraces); } -QRectF Port::boundingRect() const { +QRectF Port::boundingRect() const +{ // return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); // add extra space for hit testing return QRectF(-_radius * 2, -_radius * 2, _radius * 4, _radius * 4); } -QRectF Port::actualRect() const { +QRectF Port::actualRect() const +{ return QRectF(-_radius, -_radius, _radius * 2, _radius * 2); } -void Port::setCenter(float x, float y) { +void Port::setCenter(float x, float y) +{ // auto rect = this->boundingRect(); // setPos(QPointF(x - rect.x() / 2, y - rect.y() / 2)); setPos(QPointF(x, y)); } -QVariant Port::itemChange(GraphicsItemChange change, const QVariant &value) { +QVariant Port::itemChange(GraphicsItemChange change, const QVariant& value) +{ if (change == ItemScenePositionHasChanged) { for (auto con : connections) { con->updatePosFromPorts(); @@ -331,13 +369,15 @@ QVariant Port::itemChange(GraphicsItemChange change, const QVariant &value) { return value; } -void Port::removeConnection(ConnectionPtr con) { +void Port::removeConnection(ConnectionPtr con) +{ // todo: make sure this does what it's supposed to do connections.removeOne(con); } -void Port::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, - QWidget *widget) { +void Port::paint(QPainter* painter, QStyleOptionGraphicsItem const* option, + QWidget* widget) +{ auto rect = actualRect(); QPen pen(QColor(00, 00, 00, 250), 1.0f); @@ -356,7 +396,16 @@ void Port::paint(QPainter *painter, QStyleOptionGraphicsItem const *option, painter->drawRoundedRect(rect, rect.width() / 2, rect.height() / 2); } -Connection::Connection() { +Port::~Port() +{ + // remove ownership from scene else scene will try to + // clean it up after it's been deleted + if (this->scene()) + this->scene()->removeItem(this); +} + +Connection::Connection() +{ pos1 = QPointF(0, 0); pos2 = QPointF(0, 0); @@ -369,12 +418,14 @@ Connection::Connection() { setPen(pen); } -void Connection::updatePosFromPorts() { +void Connection::updatePosFromPorts() +{ pos1 = startPort->scenePos(); pos2 = endPort->scenePos(); } -void Connection::updatePathFromPositions() { +void Connection::updatePathFromPositions() +{ p = new QPainterPath; p->moveTo(pos1); @@ -390,9 +441,9 @@ void Connection::updatePathFromPositions() { setPath(*p); } -void Connection::paint(QPainter *painter, - const QStyleOptionGraphicsItem *option, - QWidget *widget) { +void Connection::paint(QPainter* painter, + const QStyleOptionGraphicsItem* option, QWidget* widget) +{ painter->setRenderHint(QPainter::Antialiasing); painter->save(); @@ -428,4 +479,12 @@ void Connection::paint(QPainter *painter, Q_UNUSED(widget); } +Connection::~Connection() +{ + // remove ownership from scene else scene will try to + // clean it up after it's been deleted + if (this->scene()) + this->scene()->removeItem(this); +} + } // namespace nodegraph \ No newline at end of file diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index 97651d33..50265d56 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -27,7 +27,10 @@ typedef QSharedPointer ScenePtr; enum class SceneItemType : int { Node = 1, Port = 2, Connection = 3 }; class Scene : public QGraphicsScene, public QEnableSharedFromThis { - public: +public: + QMap nodes; + QString id; + Scene(); static ScenePtr create(); @@ -44,8 +47,7 @@ class Scene : public QGraphicsScene, public QEnableSharedFromThis { // removes connection and item from scene void removeConnection(ConnectionPtr con); - QMap nodes; - QString id; + ~Scene(); }; class Node : public QGraphicsObject, public QEnableSharedFromThis { @@ -53,7 +55,7 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { int width; int height; - QGraphicsTextItem *text; + QGraphicsTextItem* text; QString name; bool isHovered; @@ -63,14 +65,14 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { QColor highlightBorderColor; QColor selectedBorderColor; - public: +public: QVector inPorts; QVector outPorts; explicit Node(); static NodePtr create(); const QString id() const { return _id; } - void setId(const QString &id) { _id = id; } + void setId(const QString& id) { _id = id; } const QVector getInPorts() const; const QVector getOutPorts() const; @@ -90,10 +92,11 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { bool hovered() const { return isHovered; }; virtual int type() const override { return (int)SceneItemType::Node; } + virtual ~Node(); - protected: - void paint(QPainter *painter, QStyleOptionGraphicsItem const *option, - QWidget *widget = 0) override; +protected: + void paint(QPainter* painter, QStyleOptionGraphicsItem const* option, + QWidget* widget = 0) override; // void // mousePressEvent(QGraphicsSceneMouseEvent *event) override; @@ -104,9 +107,9 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { // void // mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; - void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override; + void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override; - void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override; + void hoverLeaveEvent(QGraphicsSceneHoverEvent* event) override; // void // hoverMoveEvent(QGraphicsSceneHoverEvent *) override; @@ -118,11 +121,11 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { enum class PortType : int { Invalid = 0, In = 1, Out = 2 }; class Port : public QGraphicsObject, public QEnableSharedFromThis { - QGraphicsTextItem *text; + QGraphicsTextItem* text; int _radius; QString _id; - public: +public: NodePtr node; QVector connections; @@ -130,7 +133,7 @@ class Port : public QGraphicsObject, public QEnableSharedFromThis { QString name; QString id() const; - void setId(const QString &id) { _id = id; } + void setId(const QString& id) { _id = id; } int radius() const { return _radius; } @@ -138,7 +141,7 @@ class Port : public QGraphicsObject, public QEnableSharedFromThis { void removeConnection(ConnectionPtr con); - Port(QGraphicsObject *parent); + Port(QGraphicsObject* parent); QRectF boundingRect() const override; @@ -146,13 +149,14 @@ class Port : public QGraphicsObject, public QEnableSharedFromThis { void setCenter(float x, float y); - QVariant itemChange(GraphicsItemChange change, const QVariant &value); + QVariant itemChange(GraphicsItemChange change, const QVariant& value); virtual int type() const override { return (int)SceneItemType::Port; } + virtual ~Port(); - protected: - void paint(QPainter *painter, QStyleOptionGraphicsItem const *option, - QWidget *widget = 0) override; +protected: + void paint(QPainter* painter, QStyleOptionGraphicsItem const* option, + QWidget* widget = 0) override; }; enum class ConnectionState { Dragging, Complete }; @@ -163,7 +167,7 @@ class Connection : public QGraphicsPathItem, QString _id; - public: +public: ConnectionState connectState; PortPtr startPort; @@ -176,22 +180,24 @@ class Connection : public QGraphicsPathItem, virtual int type() const override { return (int)SceneItemType::Connection; } - public: +public: explicit Connection(); const QString id() const { return _id; } - void setId(const QString &id) { _id = id; } + void setId(const QString& id) { _id = id; } void updatePositions(); void updatePosFromPorts(); void updatePathFromPositions(); - QPainterPath *p; + QPainterPath* p; // virtual int type() const override; - void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, - QWidget *widget) override; + void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, + QWidget* widget) override; + + virtual ~Connection(); }; } // namespace nodegraph \ No newline at end of file diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index a15ecd04..41b3aadf 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -442,15 +442,6 @@ const Port* NodeGraph::getPortAtScenePos(float x, float y) const return nullptr; } -NodeGraph::~NodeGraph() -{ - // remove all items manually otherwise - // smart point destructor of some items - // will cause segfault when cleaning up - // todo: move this to scene items - auto items = this->_scene->items(); - for (auto item : items) - this->_scene->removeItem(item); -} +NodeGraph::~NodeGraph() {} } // namespace nodegraph \ No newline at end of file From 6d5124fc0e38b511f733a6a2f9d6cf41d0b7cabc Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 8 Oct 2022 20:56:23 -0400 Subject: [PATCH 037/100] add new project action --- src/texturelab/mainwindow.cpp | 8 ++++---- src/texturelab/mainwindow.h | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 705cbed6..5c82c2d8 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -43,7 +43,7 @@ void MainWindow::setupMenus() { auto fileMenu = this->menuBar()->addMenu("File"); fileMenu->addAction("Open Project", [=]() { this->openProject(); }); - fileMenu->addAction("New Project", []() {}); + fileMenu->addAction("New Project", [=]() { this->newProject(); }); fileMenu->addSeparator(); fileMenu->addAction("Save", []() {}); fileMenu->addAction("Save As...", []() {}); @@ -157,10 +157,10 @@ void MainWindow::openProject() } auto project = Project::loadTexture(filePath); - this->project = project; - // pass project to graph - this->graphWidget->setTextureProject(project); + setProject(project); } +void MainWindow::newProject() { setProject(TextureProject::createEmpty()); } + MainWindow::~MainWindow() {} \ No newline at end of file diff --git a/src/texturelab/mainwindow.h b/src/texturelab/mainwindow.h index a0eea97d..74814e1c 100644 --- a/src/texturelab/mainwindow.h +++ b/src/texturelab/mainwindow.h @@ -30,6 +30,7 @@ class MainWindow : public QMainWindow { // menu callbacks void openProject(); + void newProject(); void setProject(TextureProjectPtr project); From 6afdc18adcf47b00f2fc6cd7f9b2f424e30dcd86 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 8 Oct 2022 20:56:32 -0400 Subject: [PATCH 038/100] add icons for other nodes --- src/texturelab/assets.qrc | 3 +++ src/texturelab/libraries/library.cpp | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/texturelab/assets.qrc b/src/texturelab/assets.qrc index 71135891..5a85331a 100644 --- a/src/texturelab/assets.qrc +++ b/src/texturelab/assets.qrc @@ -1,5 +1,8 @@ ../../public/assets/nodes/bevel.png + ../../public/assets/nodes/color.png + ../../public/assets/nodes/blend.png + ../../public/assets/nodes/output.png \ No newline at end of file diff --git a/src/texturelab/libraries/library.cpp b/src/texturelab/libraries/library.cpp index e001972c..0aafa6ed 100644 --- a/src/texturelab/libraries/library.cpp +++ b/src/texturelab/libraries/library.cpp @@ -45,9 +45,9 @@ Library* createLibraryV2() { auto lib = new Library(); lib->addNode("polygon", "Polygon", ":nodes/bevel.png"); - lib->addNode("color", "Color", ":nodes/bevel.png"); - lib->addNode("blend", "Blend", ":nodes/bevel.png"); - lib->addNode("output", "Output", ":nodes/bevel.png"); + lib->addNode("color", "Color", ":nodes/color.png"); + lib->addNode("blend", "Blend", ":nodes/blend.png"); + lib->addNode("output", "Output", ":nodes/output.png"); return lib; } \ No newline at end of file From 5841d4992ba5ad8b01438fe71d1a2d6970bb8563 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 23 Oct 2022 00:02:24 -0400 Subject: [PATCH 039/100] add test renderer --- src/texturelab/CMakeLists.txt | 8 +- src/texturelab/graphics/texturerenderer.cpp | 293 ++++++++++++++++++++ src/texturelab/graphics/texturerenderer.h | 47 ++++ src/texturelab/mainwindow.cpp | 6 + src/texturelab/models.h | 3 + 5 files changed, 354 insertions(+), 3 deletions(-) create mode 100644 src/texturelab/graphics/texturerenderer.cpp create mode 100644 src/texturelab/graphics/texturerenderer.h diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index bd60970e..a53223d5 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -11,8 +11,8 @@ set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) +find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets OpenGL) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets OpenGL) set(PROJECT_SOURCES ./main.cpp @@ -38,6 +38,8 @@ set(PROJECT_SOURCES ./widgets/view2dwidget.cpp ./widgets/view3dwidget.h ./widgets/view3dwidget.cpp + ./graphics/texturerenderer.h + ./graphics/texturerenderer.cpp ) set(PROJECT_RESOURCES @@ -56,7 +58,7 @@ else() ) endif() -target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets qtadvanceddocking nodegraph) +target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::OpenGL qtadvanceddocking nodegraph) target_include_directories(texturelab PUBLIC ../ads/src ../nodegraph diff --git a/src/texturelab/graphics/texturerenderer.cpp b/src/texturelab/graphics/texturerenderer.cpp new file mode 100644 index 00000000..0869515d --- /dev/null +++ b/src/texturelab/graphics/texturerenderer.cpp @@ -0,0 +1,293 @@ +#include "texturerenderer.h" +// #include "../models.h" + +// https://forum.qt.io/topic/84779/how-to-create-a-qoffscreensurface-correctly/4 +// #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// Qt6 only!! +#include +// #include +// #include + +enum class VertexUsage : int { + Position = 0, + Color = 1, + TexCoord0 = 2, + TexCoord1 = 3, + TexCoord2 = 4, + TexCoord3 = 5, + Normal = 6, + Tangent = 7, + Count = 8 +}; + +const int TEXTURE_SIZE = 1024; + +// https://github.com/cromop/mOffscreenRendering/blob/master/OGLWidget.cpp +// https://github.com/florianblume/Qt3D-OffscreenRenderer/blob/master/offscreensurfaceframegraph.h +// https://stackoverflow.com/questions/60515589/offscreen-render-with-qoffscreensurface-using-docker +void TextureRenderer::testRendering() +{ + // create shader + QOpenGLShader* vshader = new QOpenGLShader(QOpenGLShader::Vertex); + QOpenGLShader* fshader = new QOpenGLShader(QOpenGLShader::Fragment); + auto program = new QOpenGLShaderProgram; + + QString vSource = R""""( + #version 150 core + + in vec3 a_pos; + in vec2 a_texCoord; + + out vec2 v_texCoord; + + void main() + { + v_texCoord = a_texCoord*vec2(1,1); + gl_Position = vec4(a_pos,1); + } + )""""; + + QString fSource = R""""( + #version 150 core + + in vec2 v_texCoord; + + out vec4 fragColor; + + void main() + { + vec4 col = vec4(v_texCoord.x, v_texCoord.y, 1.0, 1.0); + + fragColor = col; + } + )""""; + + if (!vshader->compileSourceCode(vSource)) { + qDebug() << "VERTEX SHADER ERROR"; + qDebug() << vshader->log(); + } + + if (!fshader->compileSourceCode(fSource)) { + qDebug() << "FRAGMENT SHADER ERROR"; + qDebug() << fshader->log(); + } + + program->removeAllShaders(); + + program->addShader(vshader); + program->addShader(fshader); + + program->bindAttributeLocation("a_pos", (int)VertexUsage::Position); + program->bindAttributeLocation("a_color", (int)VertexUsage::Color); + program->bindAttributeLocation("a_texCoord", (int)VertexUsage::TexCoord0); + + if (!program->link()) { + qDebug() << "SHADER LINK ERROR"; + qDebug() << program->log(); + } + + // render quad (bind vbo, shader, vbo, etc) + fbo->bind(); + gl->glViewport(0, 0, TEXTURE_SIZE, TEXTURE_SIZE); + + gl->glClearColor(0, 0, 0, 1); + gl->glClearDepth(0); + gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + vao->bind(); + + program->bind(); + + vbo->bind(); + gl->glEnableVertexAttribArray((int)VertexUsage::Position); + gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, GL_FALSE, + 5 * sizeof(float), nullptr); + gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, + GL_FALSE, 5 * sizeof(float), + reinterpret_cast(3 * sizeof(float))); + + gl->glDrawArrays(GL_TRIANGLES, 0, 6); + + vbo->release(); + + gl->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); + + // grab pixels to pixmap + auto img = fbo->toImage(); + img.save("./render.png"); + + // save to desktop +} + +void TextureRenderer::setup() +{ + // create surface + surface = new QOffscreenSurface(); + // QSurfaceFormat format = QSurfaceFormat::defaultFormat(); + // format.setMajorVersion(3); + // format.setMinorVersion(2); + + QSurfaceFormat format; + format.setDepthBufferSize(32); + format.setMajorVersion(3); + format.setMinorVersion(2); + format.setProfile(QSurfaceFormat::CoreProfile); + format.setSamples(1); + format.setSwapInterval(0); + format.setOption(QSurfaceFormat::DebugContext); // for debugging + + surface->setFormat(format); + surface->create(); + + // create context + ctx = new QOpenGLContext(); + ctx->setFormat(format); + if (!ctx->create()) { + qFatal("unable to create surface!"); + } + + ctx->makeCurrent(surface); + + // https://doc-snapshots.qt.io/qt6-dev/gui-changes-qt6.html + gl = QOpenGLVersionFunctionsFactory::get(ctx); + if (!gl) { + qFatal("Could not obtain required OpenGL context version"); + } + + // setup debugging + QOpenGLDebugLogger* logger = new QOpenGLDebugLogger(); + logger->initialize(); + + QObject::connect(logger, &QOpenGLDebugLogger::messageLogged, + [=](const QOpenGLDebugMessage& debugMessage) { + qDebug() << debugMessage; + }); + + logger->startLogging(); + + gl->initializeOpenGLFunctions(); + + // simple setup + gl->glViewport(0, 0, TEXTURE_SIZE, TEXTURE_SIZE); + gl->glDisable(GL_BLEND); + gl->glDisable(GL_DEPTH_TEST); + gl->glDisable(GL_CULL_FACE); + + // setup vbo + vao = new QOpenGLVertexArrayObject; + if (vao->create()) + vao->bind(); + + // setup vertex array + QVector data; + // TRIANGLE 1 + data.append(-1); + data.append(-1); + data.append(0); + + data.append(0); + data.append(0); + + data.append(1); + data.append(-1); + data.append(0); + + data.append(1); + data.append(0); + + data.append(-1); + data.append(1); + data.append(0); + + data.append(0); + data.append(1); + + // TRIANGLE 2 + data.append(-1); + data.append(1); + data.append(0); + + data.append(0); + data.append(1); + + data.append(1); + data.append(-1); + data.append(0); + + data.append(1); + data.append(0); + + data.append(1); + data.append(1); + data.append(0); + + data.append(1); + data.append(1); + + vbo = new QOpenGLBuffer; + vbo->create(); + vbo->bind(); + vbo->allocate(data.constData(), data.count() * sizeof(float)); + vbo->release(); + + // create fbo + // https://doc.qt.io/qt-6/qopenglframebufferobject.html + // https://www.qt.io/blog/2015/09/21/using-modern-opengl-es-features-with-qopenglframebufferobject-in-qt-5-6 + fbo = new QOpenGLFramebufferObject(TEXTURE_SIZE, TEXTURE_SIZE); + if (!fbo->isValid()) { + qFatal("FBO could not be created"); + } +} + +TextureRenderer::TextureRenderer() { this->setup(); } + +// void TextureRenderer::setProject(TextureProjectPtr project) +// { +// this->project = project; +// } + +// void TextureRenderer::update() +// { +// if (!project) +// return; + +// // check for nodes that need updating and update +// for (auto& node : project->nodes) { +// if (!node->isGraphicsInitialized()) { +// // create texture +// createNodeTexture(node); +// } + +// // if the resolution has changed, resize texture +// if (project->textureWidth != node->texture->width || +// project->textureHeight != node->texture->height) { +// // resize +// resizeNodeTexture(node); +// } + +// // if (node->needsUpdate()) { + +// // // process +// // } +// } + +// // todo: use quota +// while (true) { +// auto& nextNode = getNextNodeToBeUpdated(project); +// if (!nextNode) +// break; + +// renderNode(nextNode); +// } +// } \ No newline at end of file diff --git a/src/texturelab/graphics/texturerenderer.h b/src/texturelab/graphics/texturerenderer.h new file mode 100644 index 00000000..39d555f1 --- /dev/null +++ b/src/texturelab/graphics/texturerenderer.h @@ -0,0 +1,47 @@ +#pragma once + +#include +#include + +class QOffscreenSurface; +class QOpenGLContext; +class QOpenGLFunctions_3_2_Core; +class QOpenGLVertexArrayObject; +class QOpenGLBuffer; +class QOpenGLShader; +class QOpenGLFramebufferObject; + +class TextureProject; +typedef QSharedPointer TextureProjectPtr; + +// https://stackoverflow.com/questions/31323749/easiest-way-for-offscreen-rendering-with-qopenglwidget +class TextureRenderer { + QOffscreenSurface* surface; + QOpenGLContext* ctx; + QOpenGLFunctions_3_2_Core* gl; + QOpenGLVertexArrayObject* vao; + QOpenGLBuffer* vbo; + QOpenGLShader* vshader; + QOpenGLShader* fshader; + QOpenGLFramebufferObject* fbo; + +public: + TextureRenderer(); + void setup(); + void setProject(TextureProjectPtr project); + void update(); + void testRendering(); + + TextureProjectPtr project; +}; + +// note: there's no specified fbo limit +// https://stackoverflow.com/a/41164761 +class NodeTexture { +public: + // texture id + int width; + int height; + + QPixmap thumbnail; +}; \ No newline at end of file diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 5c82c2d8..1d153c20 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -16,6 +16,8 @@ #include "project.h" +#include "graphics/texturerenderer.h" + MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) { resize(1280, 720); @@ -30,6 +32,10 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) // set default empty project auto project = TextureProject::createEmpty(); this->setProject(project); + + // test texture rendering + auto renderer = new TextureRenderer(); + renderer->testRendering(); } void MainWindow::setProject(TextureProjectPtr project) diff --git a/src/texturelab/models.h b/src/texturelab/models.h index 9c6c7579..da5287fd 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -32,6 +32,9 @@ class ProjectFile { class TextureProject : public QEnableSharedFromThis { public: int randomSeed; + int textureWidth; + int textureHeight; + Library* library = nullptr; QMap nodes; From 438c782e09273eed6d28e55716d436896e101750 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sat, 29 Oct 2022 18:57:19 -0400 Subject: [PATCH 040/100] add shader compilaton --- src/texturelab/graphics/texturerenderer.cpp | 438 ++++++++++++++++++-- src/texturelab/graphics/texturerenderer.h | 21 +- src/texturelab/models.cpp | 21 +- src/texturelab/models.h | 20 + 4 files changed, 459 insertions(+), 41 deletions(-) diff --git a/src/texturelab/graphics/texturerenderer.cpp b/src/texturelab/graphics/texturerenderer.cpp index 0869515d..630a890e 100644 --- a/src/texturelab/graphics/texturerenderer.cpp +++ b/src/texturelab/graphics/texturerenderer.cpp @@ -18,6 +18,8 @@ // #include // #include +#include "models.h" + enum class VertexUsage : int { Position = 0, Color = 1, @@ -252,42 +254,400 @@ void TextureRenderer::setup() TextureRenderer::TextureRenderer() { this->setup(); } -// void TextureRenderer::setProject(TextureProjectPtr project) -// { -// this->project = project; -// } - -// void TextureRenderer::update() -// { -// if (!project) -// return; - -// // check for nodes that need updating and update -// for (auto& node : project->nodes) { -// if (!node->isGraphicsInitialized()) { -// // create texture -// createNodeTexture(node); -// } - -// // if the resolution has changed, resize texture -// if (project->textureWidth != node->texture->width || -// project->textureHeight != node->texture->height) { -// // resize -// resizeNodeTexture(node); -// } - -// // if (node->needsUpdate()) { - -// // // process -// // } -// } - -// // todo: use quota -// while (true) { -// auto& nextNode = getNextNodeToBeUpdated(project); -// if (!nextNode) -// break; - -// renderNode(nextNode); -// } -// } \ No newline at end of file +void TextureRenderer::setProject(TextureProjectPtr project) +{ + this->project = project; +} + +void TextureRenderer::update() +{ + if (!project) + return; + + ctx->makeCurrent(surface); + + // check for nodes that need updating and update + for (auto& node : project->nodes) { + if (!node->isGraphicsResourcesInitialized()) { + // create texture + initializeNodeGraphicsResources(node); + } + + // if the resolution has changed, resize texture + if (project->textureWidth != node->textureWidth || + project->textureHeight != node->textureHeight) { + // resize + // resizeNodeTexture(node); + node->textureWidth = project->textureWidth; + node->textureHeight = project->textureHeight; + node->texture = new QOpenGLFramebufferObject(node->textureWidth, + node->textureHeight); + + // clear pixmap and emit thumbnail changed? + } + + // if (node->needsUpdate()) { + + // // process + // } + } + + // todo: use quota + while (true) { + auto nextNode = getNextUpdatableNode(); + if (!nextNode) + break; + + renderNode(nextNode); + } + + ctx->doneCurrent(); +} + +void TextureRenderer::initializeNodeGraphicsResources( + const TextureNodePtr& node) +{ + ctx->makeCurrent(surface); + + // create fbo + node->texture = new QOpenGLFramebufferObject(project->textureWidth, + project->textureWidth); + + // build and compile shaders + node->shader = buildShaderForNode(node); +} + +void TextureRenderer::renderNode(const TextureNodePtr& node) +{ + node->texture->bind(); + gl->glViewport(0, 0, node->textureWidth, node->textureHeight); + + gl->glClearColor(0, 0, 0, 1); + gl->glClearDepth(0); + gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + vao->bind(); + + node->shader->bind(); + + // clear all inputs + int texIndex = 0; + for (auto input : node->inputs) { + gl->glActiveTexture(GL_TEXTURE0 + texIndex); + gl->glBindTexture(GL_TEXTURE_2D, 0); + + // gl->glUniform1i(node->shader->uniformLocation(input), 0); + node->shader->setUniformValue(input.toStdString().c_str(), 0); + node->shader->setUniformValue( + (input + "_connected").toStdString().c_str(), 0); + + texIndex++; + } + + // pass inputs + // auto nodeInputs = this->project->getNodeDependencies(node->id); + // texIndex = 0; + // for (auto inputNode : nodeInputs) { + // gl->glActiveTexture(GL_TEXTURE0 + texIndex); + // inputNode->texture->bind(); + + // // todo: get node input name!! + + // // gl->glUniform1i(node->shader->uniformLocation(input), 0); + // node->shader->setUniformValue(input.toStdString().c_str(), 0); + // node->shader->setUniformValue( + // (input + "_connected").toStdString().c_str(), 0); + + // texIndex++; + // } + + // render triangles + vbo->bind(); + gl->glEnableVertexAttribArray((int)VertexUsage::Position); + gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, GL_FALSE, + 5 * sizeof(float), nullptr); + gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, + GL_FALSE, 5 * sizeof(float), + reinterpret_cast(3 * sizeof(float))); + + gl->glDrawArrays(GL_TRIANGLES, 0, 6); + + vbo->release(); + + // gl->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); + node->texture->release(); + + // grab pixels to pixmap + auto img = node->texture->toImage(); + img.save("/home/nicolas/Desktop/" + node->id + ".png"); +} + +TextureNodePtr TextureRenderer::getNextUpdatableNode() const +{ + // for each node, if node is dirty and all deps are + // non-dirty the this is a valid node + + for (auto node : project->nodes) { + if (!node->isDirty) + continue; + + auto hasCleanDeps = true; + + // we have a dirty node, check if all deps are clean + auto deps = project->getNodeDependencies(node->id); + for (auto dep : deps) { + if (!dep->isDirty) { + hasCleanDeps = false; + break; + } + } + + if (hasCleanDeps) { + return node; + } + } + + return TextureNodePtr(nullptr); +} + +QOpenGLShaderProgram* +TextureRenderer::buildShaderForNode(const TextureNodePtr& node) +{ + QOpenGLShader* vshader = new QOpenGLShader(QOpenGLShader::Vertex); + QOpenGLShader* fshader = new QOpenGLShader(QOpenGLShader::Fragment); + auto program = new QOpenGLShaderProgram; + + QString vSource = R""""( + #version 150 core + + precision highp float; + + in vec3 a_pos; + in vec2 a_texCoord; + + out vec2 v_texCoord; + + void main() + { + v_texCoord = a_texCoord; + gl_Position = vec4(a_pos,1); + } + )""""; + + QString fSource = R""""( + #version 150 core + precision highp float; + in vec2 v_texCoord; + + #define GRADIENT_MAX_POINTS 32 + + vec4 process(vec2 uv); + void initRandom(); + + uniform vec2 _textureSize; + + out vec4 fragColor; + + void main() { + initRandom(); + vec4 result = process(v_texCoord); + fragColor = clamp(result, 0.0, 1.0); + } + + )""""; + + fSource = fSource + this->createRandomLib() + this->createGradientLib() + + this->createCodeForInputs(node) + this->createCodeForProps(node) + + "#line 0\n" + node->shaderSource; + + if (!vshader->compileSourceCode(vSource)) { + qDebug() << "VERTEX SHADER ERROR"; + qDebug() << vshader->log(); + } + + if (!fshader->compileSourceCode(fSource)) { + qDebug() << "FRAGMENT SHADER ERROR"; + qDebug() << fshader->log(); + } + + program->removeAllShaders(); + + program->addShader(vshader); + program->addShader(fshader); + + program->bindAttributeLocation("a_pos", (int)VertexUsage::Position); + program->bindAttributeLocation("a_color", (int)VertexUsage::Color); + program->bindAttributeLocation("a_texCoord", (int)VertexUsage::TexCoord0); + + if (!program->link()) { + qDebug() << "SHADER LINK ERROR"; + qDebug() << program->log(); + } + + ctx->doneCurrent(); +} + +QString TextureRenderer::createRandomLib() +{ + return R""""( + // this offsets the random start (should be a uniform) + uniform float _seed; + // this is the starting number for the rng + // (should be set from the uv coordinates so it's unique per pixel) + vec2 _randomStart; + + // gives a much better distribution at 1 + #define RANDOM_ITERATIONS 1 + + #define HASHSCALE1 443.8975 + #define HASHSCALE3 vec3(443.897, 441.423, 437.195) + #define HASHSCALE4 vec4(443.897, 441.423, 437.195, 444.129) + + // 1 out, 2 in... + float hash12(vec2 p) + { + vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1); + p3 += dot(p3, p3.yzx + 19.19); + return fract((p3.x + p3.y) * p3.z); + } + + /// 2 out, 2 in... + vec2 hash22(vec2 p) + { + vec3 p3 = fract(vec3(p.xyx) * HASHSCALE3); + p3 += dot(p3, p3.yzx+19.19); + return fract((p3.xx+p3.yz)*p3.zy); + + } + + + float _rand(vec2 uv) + { + float a = 0.0; + for (int t = 0; t < RANDOM_ITERATIONS; t++) + { + float v = float(t+1)*.152; + // 0.005 is a good value + vec2 pos = (uv * v); + a += hash12(pos); + } + + return a/float(RANDOM_ITERATIONS); + } + + vec2 _rand2(vec2 uv) + { + vec2 a = vec2(0.0); + for (int t = 0; t < RANDOM_ITERATIONS; t++) + { + float v = float(t+1)*.152; + // 0.005 is a good value + vec2 pos = (uv * v); + a += hash22(pos); + } + + return a/float(RANDOM_ITERATIONS); + } + + float randomFloat(int index) + { + return _rand(_randomStart + vec2(_seed) + vec2(index)); + } + + float randomVec2(int index) + { + return _rand(_randomStart + vec2(_seed) + vec2(index)); + } + + float randomFloat(int index, float start, float end) + { + float r = _rand(_randomStart + vec2(_seed) + vec2(index)); + return start + r*(end-start); + } + + int randomInt(int index, int start, int end) + { + float r = _rand(_randomStart + vec2(_seed) + vec2(index)); + return start + int(r*float(end-start)); + } + + bool randomBool(int index) + { + return _rand(_randomStart + vec2(_seed) + vec2(index)) > 0.5; + } + + void initRandom() + { + _randomStart = v_texCoord; + } + )""""; +} + +QString TextureRenderer::createGradientLib() +{ + return R""""( + struct Gradient { + vec3 colors[GRADIENT_MAX_POINTS]; + float positions[GRADIENT_MAX_POINTS]; + int numPoints; + }; + + // assumes points are sorted + vec3 sampleGradient(vec3 colors[GRADIENT_MAX_POINTS], float positions[GRADIENT_MAX_POINTS], int numPoints, float t) + { + if (numPoints == 0) + return vec3(1,0,0); + + if (numPoints == 1) + return colors[0]; + + // here at least two points are available + if (t <= positions[0]) + return colors[0]; + + int last = numPoints - 1; + if (t >= positions[last]) + return colors[last]; + + // find two points in-between and lerp + + for(int i = 0; i < numPoints-1;i++) { + if (positions[i+1] > t) { + vec3 colorA = colors[i]; + vec3 colorB = colors[i+1]; + + float t1 = positions[i]; + float t2 = positions[i+1]; + + float lerpPos = (t - t1)/(t2 - t1); + return mix(colorA, colorB, lerpPos); + + } + + } + + return vec3(0,0,0); + } + + vec3 sampleGradient(Gradient gradient, float t) + { + return sampleGradient(gradient.colors, gradient.positions, gradient.numPoints, t); + } + )""""; +} +QString TextureRenderer::createCodeForInputs(const TextureNodePtr& node) +{ + QString code = ""; + for (auto input : node->inputs) { + code += "uniform sampler2D " + input + ";\n"; + code += "uniform bool " + input + "_connected;\n"; + } + + return code; +} + +QString TextureRenderer::createCodeForProps(const TextureNodePtr& node) +{ + return ""; +} \ No newline at end of file diff --git a/src/texturelab/graphics/texturerenderer.h b/src/texturelab/graphics/texturerenderer.h index 39d555f1..266c562a 100644 --- a/src/texturelab/graphics/texturerenderer.h +++ b/src/texturelab/graphics/texturerenderer.h @@ -13,9 +13,13 @@ class QOpenGLFramebufferObject; class TextureProject; typedef QSharedPointer TextureProjectPtr; +class TextureNode; +typedef QSharedPointer TextureNodePtr; // https://stackoverflow.com/questions/31323749/easiest-way-for-offscreen-rendering-with-qopenglwidget -class TextureRenderer { +class TextureRenderer : public QObject { + Q_OBJECT + QOffscreenSurface* surface; QOpenGLContext* ctx; QOpenGLFunctions_3_2_Core* gl; @@ -32,7 +36,20 @@ class TextureRenderer { void update(); void testRendering(); + void initializeNodeGraphicsResources(const TextureNodePtr& node); + void renderNode(const TextureNodePtr& node); + TextureProjectPtr project; + +private: + TextureNodePtr getNextUpdatableNode() const; + QOpenGLShaderProgram* buildShaderForNode(const TextureNodePtr& node); + QString createRandomLib(); + QString createGradientLib(); + QString createCodeForInputs(const TextureNodePtr& node); + QString createCodeForProps(const TextureNodePtr& node); +signals: + void thumbnailGenerated(const QString& nodeId, const QPixmap& pixmap); }; // note: there's no specified fbo limit @@ -43,5 +60,7 @@ class NodeTexture { int width; int height; + QOpenGLTexture* texture = nullptr; + QPixmap thumbnail; }; \ No newline at end of file diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index a6304bc7..9bd93c03 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -7,6 +7,21 @@ TextureNodePtr TextureProject::getNodeById(const QString& id) return nodes[id]; } +QVector TextureProject::getNodeDependencies(const QString& id) +{ + auto node = nodes[id]; + + QVector cons; + for (auto con : connections) { + if (con->rightNode == node) { + auto depNode = con->leftNode; + cons.append(depNode); + } + } + + return cons; +} + void TextureProject::addNode(const TextureNodePtr& node) { // todo: check if node already exists @@ -42,7 +57,11 @@ TextureProjectPtr TextureProject::createEmpty(Library* library) return TextureProjectPtr(project); } -TextureNode::TextureNode() { id = createGuid(); } +TextureNode::TextureNode() +{ + id = createGuid(); + isDirty = true; +} void TextureNode::addInput(const QString& inputName) { diff --git a/src/texturelab/models.h b/src/texturelab/models.h index da5287fd..3d9722dd 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -8,6 +8,9 @@ #include #include +class QOpenGLFramebufferObject; +class QOpenGLShaderProgram; + class TextureProject; class TextureNode; class Comment; @@ -43,6 +46,7 @@ class TextureProject : public QEnableSharedFromThis { QMap frames; TextureNodePtr getNodeById(const QString& id); + QVector getNodeDependencies(const QString& id); void addNode(const TextureNodePtr& node); @@ -67,6 +71,15 @@ class TextureNode : public QEnableSharedFromThis { QMap props; + // texture needs updating + bool isDirty; + + int textureWidth; + int textureHeight; + QOpenGLFramebufferObject* texture = nullptr; + QOpenGLShaderProgram* shader = nullptr; + QString shaderSource; + TextureNode(); virtual void init(){}; @@ -75,6 +88,13 @@ class TextureNode : public QEnableSharedFromThis { void setProp(QString propName, QVariant value); + void setShaderSource(const QString& source) { shaderSource = source; } + + bool isGraphicsResourcesInitialized() + { + return texture == nullptr || shader == nullptr; + } + // add prop functions }; From 822609be79d2ec620e49e497152454e633d5d6f9 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 30 Oct 2022 00:59:02 -0400 Subject: [PATCH 041/100] fix rendering between nodes - add connection and disconnection handling - fix node title rendering --- src/nodegraph/graph/scene.cpp | 36 +++++- src/nodegraph/graph/scene.h | 8 +- src/nodegraph/nodegraph.cpp | 11 +- src/nodegraph/nodegraph.h | 2 + src/texturelab/graphics/texturerenderer.cpp | 126 +++++++++++++------- src/texturelab/graphics/texturerenderer.h | 9 +- src/texturelab/libraries/libv2.h | 34 +++++- src/texturelab/mainwindow.cpp | 9 +- src/texturelab/mainwindow.h | 3 + src/texturelab/models.cpp | 33 +++++ src/texturelab/models.h | 13 +- src/texturelab/widgets/graphwidget.cpp | 61 ++++++++++ src/texturelab/widgets/graphwidget.h | 6 + 13 files changed, 284 insertions(+), 67 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 2c134466..73821a4f 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -22,8 +22,8 @@ void Scene::addNode(NodePtr node) nodes[node->id()] = node; } -void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, - NodePtr rightNode, QString rightInputName) +ConnectionPtr Scene::connectNodes(NodePtr leftNode, QString leftOutputName, + NodePtr rightNode, QString rightInputName) { auto leftPort = leftNode->getOutPortByName(leftOutputName); qDebug() << rightNode->getInPorts(); @@ -43,6 +43,8 @@ void Scene::connectNodes(NodePtr leftNode, QString leftOutputName, rightPort->addConnection(connPtr); this->addItem(conn); + + return connPtr; } NodePtr Scene::getNodeById(QString id) { return nodes[id]; } @@ -98,7 +100,8 @@ Node::Node() isHovered = false; defaultBorderColor = QColor(0, 0, 0); - highlightBorderColor = QColor(120, 120, 120); + highlightBorderColor = QColor(0, 0, 0); + // highlightBorderColor = QColor(120, 120, 120); selectedBorderColor = QColor(200, 200, 200); setFlag(QGraphicsItem::ItemIsMovable, true); @@ -109,10 +112,13 @@ Node::Node() setCursor(Qt::ClosedHandCursor); text = new QGraphicsTextItem(this); + text->setFlag(QGraphicsItem::ItemIsFocusable, false); + text->setFlag(QGraphicsItem::ItemIsSelectable, false); text->setPos(0, 0); text->setTextWidth(100); text->setDefaultTextColor(QColor(255, 255, 255)); + text->setZValue(5); // center title setName("Title"); @@ -151,6 +157,12 @@ void Node::setName(QString name) text->setTextCursor(cursor); } +void Node::setThumbnail(const QPixmap& pixmap) +{ + this->thumbnail = pixmap; + this->update(); +} + const QVector Node::getInPorts() const { return inPorts; } const QVector Node::getOutPorts() const { return outPorts; } @@ -308,11 +320,25 @@ void Node::paint(QPainter* painter, QStyleOptionGraphicsItem const* option, titleRadius); painter->fillPath(bgPath, QBrush(QColor(10, 10, 10, 255))); + if (!thumbnail.isNull()) { + painter->drawPixmap(QRect(0, 0, nodeWidth, nodeHeight), thumbnail); + } + + // draw highlight + + // top bar for text + if (!isHovered) { + QPainterPath bgPath; + bgPath.setFillRule(Qt::WindingFill); + bgPath.addRoundedRect(0, 0, nodeWidth, 18, titleRadius, titleRadius); + painter->fillPath(bgPath, QBrush(QColor(0, 0, 0, 255))); + + text->paint(painter, option, widget); + } + // draw border painter->setPen(QPen(borderColor, 3)); painter->drawRoundedRect(rect, titleRadius, titleRadius); - - // draw highlight } Node::~Node() diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index 50265d56..81791407 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -37,8 +38,8 @@ class Scene : public QGraphicsScene, public QEnableSharedFromThis { void addNode(NodePtr node); NodePtr getNodeById(QString id); - void connectNodes(NodePtr leftNode, QString leftOutputName, - NodePtr rightNode, QString rightInputName); + ConnectionPtr connectNodes(NodePtr leftNode, QString leftOutputName, + NodePtr rightNode, QString rightInputName); // this removes the node and associating connections // and node from scene @@ -58,6 +59,8 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { QGraphicsTextItem* text; QString name; + QPixmap thumbnail; + bool isHovered; // bool isSelected; @@ -78,6 +81,7 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { const QVector getOutPorts() const; void setName(QString name); + void setThumbnail(const QPixmap& pixmap); void addInPort(QString name); void addOutPort(QString name); diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index 41b3aadf..72744d53 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -281,6 +281,9 @@ bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent* event) // get the connection auto con = port->connections[0]; + // emit connection removal signal + emit connectionRemoved(con); + // remove it _scene->removeConnection(con); @@ -292,8 +295,6 @@ bool NodeGraph::sceneMousePressEvent(QGraphicsSceneMouseEvent* event) activeCon->updatePathFromPositions(); activeCon->connectState = ConnectionState::Dragging; - // emit connection removal signal - this->_scene->addItem(activeCon.data()); setDragMode(QGraphicsView::NoDrag); return true; @@ -407,9 +408,11 @@ bool NodeGraph::sceneMouseReleaseEvent(QGraphicsSceneMouseEvent* event) if (isConValid) { // actually make connection - _scene->connectNodes(leftPort->node, leftPort->name, - rightPort->node, rightPort->name); + auto con = + _scene->connectNodes(leftPort->node, leftPort->name, + rightPort->node, rightPort->name); + emit connectionAdded(con); // todo: emit undo task } } diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h index c2477e03..8e1411fa 100644 --- a/src/nodegraph/nodegraph.h +++ b/src/nodegraph/nodegraph.h @@ -1,5 +1,6 @@ #pragma once +#include "graph/scene.h" #include #include #include @@ -38,6 +39,7 @@ This class draws a lot of inspiration from NodeGraphQt https://github.com/jchanvfx/NodeGraphQt/blob/master/NodeGraphQt/widgets/viewer.py */ class NodeGraph : public QGraphicsView { + Q_OBJECT public: NodeGraph(QWidget* parent = nullptr); diff --git a/src/texturelab/graphics/texturerenderer.cpp b/src/texturelab/graphics/texturerenderer.cpp index 630a890e..df807513 100644 --- a/src/texturelab/graphics/texturerenderer.cpp +++ b/src/texturelab/graphics/texturerenderer.cpp @@ -264,8 +264,6 @@ void TextureRenderer::update() if (!project) return; - ctx->makeCurrent(surface); - // check for nodes that need updating and update for (auto& node : project->nodes) { if (!node->isGraphicsResourcesInitialized()) { @@ -292,13 +290,20 @@ void TextureRenderer::update() // } } + ctx->makeCurrent(surface); // todo: use quota while (true) { auto nextNode = getNextUpdatableNode(); if (!nextNode) break; + qDebug() << "Rendering node: " << nextNode->id; renderNode(nextNode); + + nextNode->isDirty = false; + + auto img = nextNode->texture->toImage(); + emit thumbnailGenerated(nextNode->id, QPixmap::fromImage(img)); } ctx->doneCurrent(); @@ -312,9 +317,16 @@ void TextureRenderer::initializeNodeGraphicsResources( // create fbo node->texture = new QOpenGLFramebufferObject(project->textureWidth, project->textureWidth); + node->textureWidth = project->textureWidth; + node->textureHeight = project->textureHeight; + + if (!node->texture->isValid()) { + qFatal("FBO could not be created"); + } // build and compile shaders node->shader = buildShaderForNode(node); + ctx->doneCurrent(); } void TextureRenderer::renderNode(const TextureNodePtr& node) @@ -328,59 +340,79 @@ void TextureRenderer::renderNode(const TextureNodePtr& node) vao->bind(); - node->shader->bind(); + if (node->shader->isLinked()) { + node->shader->bind(); - // clear all inputs - int texIndex = 0; - for (auto input : node->inputs) { - gl->glActiveTexture(GL_TEXTURE0 + texIndex); - gl->glBindTexture(GL_TEXTURE_2D, 0); + // clear all inputs + int texIndex = 0; + for (auto input : node->inputs) { + gl->glActiveTexture(GL_TEXTURE0 + texIndex); + gl->glBindTexture(GL_TEXTURE_2D, 0); - // gl->glUniform1i(node->shader->uniformLocation(input), 0); - node->shader->setUniformValue(input.toStdString().c_str(), 0); - node->shader->setUniformValue( - (input + "_connected").toStdString().c_str(), 0); + // gl->glUniform1i(node->shader->uniformLocation(input), 0); + node->shader->setUniformValue(input.toStdString().c_str(), 0); + node->shader->setUniformValue( + (input + "_connected").toStdString().c_str(), 0); - texIndex++; - } + texIndex++; + } - // pass inputs - // auto nodeInputs = this->project->getNodeDependencies(node->id); - // texIndex = 0; - // for (auto inputNode : nodeInputs) { - // gl->glActiveTexture(GL_TEXTURE0 + texIndex); - // inputNode->texture->bind(); + // pass inputs + auto nodeInputs = getNodeInputs(node); + texIndex = 0; + for (auto nodeInput : nodeInputs) { + gl->glActiveTexture(GL_TEXTURE0 + texIndex); + // if (!nodeInput.node->texture->bind()) + // qFatal("could not bind texture"); + gl->glBindTexture(GL_TEXTURE_2D, + nodeInput.node->texture->texture()); + + auto name = nodeInput.name; + // gl->glUniform1i(node->shader->uniformLocation(input), 0); + node->shader->setUniformValue(name.toStdString().c_str(), texIndex); + node->shader->setUniformValue( + (name + "_connected").toStdString().c_str(), 1); + + texIndex++; + } - // // todo: get node input name!! + // render triangles + vbo->bind(); + gl->glEnableVertexAttribArray((int)VertexUsage::Position); + gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, + GL_FALSE, 5 * sizeof(float), nullptr); + gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, + GL_FALSE, 5 * sizeof(float), + reinterpret_cast(3 * sizeof(float))); - // // gl->glUniform1i(node->shader->uniformLocation(input), 0); - // node->shader->setUniformValue(input.toStdString().c_str(), 0); - // node->shader->setUniformValue( - // (input + "_connected").toStdString().c_str(), 0); + gl->glDrawArrays(GL_TRIANGLES, 0, 6); - // texIndex++; - // } + vbo->release(); + } - // render triangles - vbo->bind(); - gl->glEnableVertexAttribArray((int)VertexUsage::Position); - gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); - gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, GL_FALSE, - 5 * sizeof(float), nullptr); - gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, - GL_FALSE, 5 * sizeof(float), - reinterpret_cast(3 * sizeof(float))); + vao->release(); - gl->glDrawArrays(GL_TRIANGLES, 0, 6); + // gl->glBindFramebuffer(GL_FRAMEBUFFER, + // ctx->defaultFramebufferObject()); - vbo->release(); + // grab pixels to pixmap + // auto img = node->texture->toImage(); + // img.save(node->id + ".png"); - // gl->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); node->texture->release(); +} - // grab pixels to pixmap - auto img = node->texture->toImage(); - img.save("/home/nicolas/Desktop/" + node->id + ".png"); +QVector TextureRenderer::getNodeInputs(const TextureNodePtr& node) +{ + QVector inputs; + for (auto con : project->connections) { + if (con->rightNode == node) { + inputs.append({con->leftNode, con->rightNodeInputName}); + } + } + + return inputs; } TextureNodePtr TextureRenderer::getNextUpdatableNode() const @@ -397,7 +429,7 @@ TextureNodePtr TextureRenderer::getNextUpdatableNode() const // we have a dirty node, check if all deps are clean auto deps = project->getNodeDependencies(node->id); for (auto dep : deps) { - if (!dep->isDirty) { + if (dep->isDirty) { hasCleanDeps = false; break; } @@ -414,6 +446,8 @@ TextureNodePtr TextureRenderer::getNextUpdatableNode() const QOpenGLShaderProgram* TextureRenderer::buildShaderForNode(const TextureNodePtr& node) { + ctx->makeCurrent(surface); + QOpenGLShader* vshader = new QOpenGLShader(QOpenGLShader::Vertex); QOpenGLShader* fshader = new QOpenGLShader(QOpenGLShader::Fragment); auto program = new QOpenGLShaderProgram; @@ -421,7 +455,7 @@ TextureRenderer::buildShaderForNode(const TextureNodePtr& node) QString vSource = R""""( #version 150 core - precision highp float; + //precision highp float; in vec3 a_pos; in vec2 a_texCoord; @@ -437,7 +471,7 @@ TextureRenderer::buildShaderForNode(const TextureNodePtr& node) QString fSource = R""""( #version 150 core - precision highp float; + //precision highp float; in vec2 v_texCoord; #define GRADIENT_MAX_POINTS 32 @@ -486,6 +520,8 @@ TextureRenderer::buildShaderForNode(const TextureNodePtr& node) } ctx->doneCurrent(); + + return program; } QString TextureRenderer::createRandomLib() diff --git a/src/texturelab/graphics/texturerenderer.h b/src/texturelab/graphics/texturerenderer.h index 266c562a..e19e2139 100644 --- a/src/texturelab/graphics/texturerenderer.h +++ b/src/texturelab/graphics/texturerenderer.h @@ -9,6 +9,7 @@ class QOpenGLFunctions_3_2_Core; class QOpenGLVertexArrayObject; class QOpenGLBuffer; class QOpenGLShader; +class QOpenGLShaderProgram; class QOpenGLFramebufferObject; class TextureProject; @@ -16,6 +17,11 @@ typedef QSharedPointer TextureProjectPtr; class TextureNode; typedef QSharedPointer TextureNodePtr; +struct NodeInput { + TextureNodePtr node; + QString name; +}; + // https://stackoverflow.com/questions/31323749/easiest-way-for-offscreen-rendering-with-qopenglwidget class TextureRenderer : public QObject { Q_OBJECT @@ -42,6 +48,7 @@ class TextureRenderer : public QObject { TextureProjectPtr project; private: + QVector getNodeInputs(const TextureNodePtr& node); TextureNodePtr getNextUpdatableNode() const; QOpenGLShaderProgram* buildShaderForNode(const TextureNodePtr& node); QString createRandomLib(); @@ -60,7 +67,5 @@ class NodeTexture { int width; int height; - QOpenGLTexture* texture = nullptr; - QPixmap thumbnail; }; \ No newline at end of file diff --git a/src/texturelab/libraries/libv2.h b/src/texturelab/libraries/libv2.h index b1a4cc51..e32b3eb0 100644 --- a/src/texturelab/libraries/libv2.h +++ b/src/texturelab/libraries/libv2.h @@ -4,27 +4,52 @@ class PolygonNode : public TextureNode { public: - virtual void init() override { + virtual void init() override + { this->title = "Polygon"; // todo: add props + this->setShaderSource(R""""( + vec4 process(vec2 uv) + { + float prop_radius = 0.35; + + float dist = distance(uv, vec2(0.5)); + if( dist <= prop_radius) { + return vec4(vec3(1.0), 1.0); + + } + + return vec4(vec3(0.0), 1.0); + } + )""""); } }; class ColorNode : public TextureNode { public: - virtual void init() override { + virtual void init() override + { this->title = "Color"; this->addInput("image"); // todo: add props + this->setShaderSource(R""""( + vec4 process(vec2 uv) + { + vec4 prop_color = vec4(1,1,1,1); + return texture(image,uv) * prop_color; + //return vec4(uv, vec2(0.0,1.0));// * prop_color; + } + )""""); } }; class BlendNode : public TextureNode { public: - virtual void init() override { + virtual void init() override + { this->title = "Blend"; this->addInput("colorA"); @@ -37,7 +62,8 @@ class BlendNode : public TextureNode { class OutputNode : public TextureNode { public: - virtual void init() override { + virtual void init() override + { this->title = "Output"; this->addInput("image"); diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 1d153c20..e6be8999 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -34,8 +34,8 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) this->setProject(project); // test texture rendering - auto renderer = new TextureRenderer(); - renderer->testRendering(); + // auto renderer = new TextureRenderer(); + // renderer->testRendering(); } void MainWindow::setProject(TextureProjectPtr project) @@ -43,6 +43,11 @@ void MainWindow::setProject(TextureProjectPtr project) this->project = project; this->graphWidget->setTextureProject(project); this->libraryWidget->setLibrary(project->library); + + renderer = new TextureRenderer(); + renderer->setProject(project); + renderer->update(); + this->graphWidget->setTextureRenderer(renderer); } void MainWindow::setupMenus() diff --git a/src/texturelab/mainwindow.h b/src/texturelab/mainwindow.h index 74814e1c..a0ed5780 100644 --- a/src/texturelab/mainwindow.h +++ b/src/texturelab/mainwindow.h @@ -11,6 +11,7 @@ class LibraryWidget; class PropertiesWidget; class View2DWidget; class View3DWidget; +class TextureRenderer; class TextureProject; typedef QSharedPointer TextureProjectPtr; @@ -49,6 +50,8 @@ class MainWindow : public QMainWindow { View2DWidget* view2DWidget; View3DWidget* view3DWidget; + TextureRenderer* renderer; + TextureProjectPtr project; }; #endif // MAINWINDOW_H diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index 9bd93c03..3b8d6023 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -7,6 +7,11 @@ TextureNodePtr TextureProject::getNodeById(const QString& id) return nodes[id]; } +ConnectionPtr TextureProject::getConnectionById(const QString& id) +{ + return connections[id]; +} + QVector TextureProject::getNodeDependencies(const QString& id) { auto node = nodes[id]; @@ -45,6 +50,34 @@ void TextureProject::addConnection(TextureNodePtr leftNode, // todo: request updates } +ConnectionPtr TextureProject::removeConnection(const QString& leftNode, + const QString& rightNode, + const QString& rightNodeInput) +{ + for (auto conKey : connections.keys()) { + auto con = connections[conKey]; + + if (con->leftNode->id == leftNode && con->rightNode->id == rightNode && + con->rightNodeInputName == rightNodeInput) { + connections.remove(conKey); + + return con; + } + } + + return ConnectionPtr(nullptr); +} + +void TextureProject::removeConnection(ConnectionPtr con) +{ + this->connections.remove(con->id); +} + +void TextureProject::removeConnection(const QString& id) +{ + this->connections.remove(id); +} + TextureProjectPtr TextureProject::createEmpty(Library* library) { auto project = new TextureProject(); diff --git a/src/texturelab/models.h b/src/texturelab/models.h index 3d9722dd..29fcdf7c 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -35,8 +35,8 @@ class ProjectFile { class TextureProject : public QEnableSharedFromThis { public: int randomSeed; - int textureWidth; - int textureHeight; + int textureWidth = 1024; + int textureHeight = 1024; Library* library = nullptr; @@ -46,6 +46,7 @@ class TextureProject : public QEnableSharedFromThis { QMap frames; TextureNodePtr getNodeById(const QString& id); + ConnectionPtr getConnectionById(const QString& id); QVector getNodeDependencies(const QString& id); void addNode(const TextureNodePtr& node); @@ -54,6 +55,12 @@ class TextureProject : public QEnableSharedFromThis { void addConnection(TextureNodePtr leftNode, TextureNodePtr rightNode, QString rightNodeInput); + ConnectionPtr removeConnection(const QString& leftNode, + const QString& rightNode, + const QString& rightNodeInput); + void removeConnection(ConnectionPtr con); + void removeConnection(const QString& id); + static TextureProjectPtr createEmpty(Library* library = nullptr); }; @@ -92,7 +99,7 @@ class TextureNode : public QEnableSharedFromThis { bool isGraphicsResourcesInitialized() { - return texture == nullptr || shader == nullptr; + return texture != nullptr && shader != nullptr; } // add prop functions diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp index 63ec1c26..f08f107d 100644 --- a/src/texturelab/widgets/graphwidget.cpp +++ b/src/texturelab/widgets/graphwidget.cpp @@ -6,6 +6,7 @@ #include #include +#include "./graphics/texturerenderer.h" #include "./models.h" #include "./utils.h" #include "graph/scene.h" @@ -20,6 +21,50 @@ GraphWidget::GraphWidget() : QMainWindow(nullptr) this->setAcceptDrops(true); + connect(graph, &nodegraph::NodeGraph::connectionAdded, + [=](nodegraph::ConnectionPtr con) { + qDebug() << "CONNECTION ADDED"; + + // auto sceneCon = project->getConnectionById(con->id()); + // sceneCon->rightNode->isDirty = true; + + auto leftNode = + project->getNodeById(con->startPort->node->id()); + auto rightNode = project->getNodeById(con->endPort->node->id()); + auto rightName = con->endPort->name; + + project->addConnection(leftNode, rightNode, rightName); + + // make ready for update + rightNode->isDirty = true; + + // todo: try to update later + renderer->update(); + }); + + connect(graph, &nodegraph::NodeGraph::connectionRemoved, + [=](nodegraph::ConnectionPtr con) { + qDebug() << "CONNECTION REMOVED"; + + auto leftNodeId = con->startPort->node->id(); + auto rightNodeId = con->endPort->node->id(); + auto portName = con->endPort->name; + + auto removedCon = project->removeConnection( + leftNodeId, rightNodeId, portName); + + removedCon->rightNode->isDirty = true; + + // todo: try to update later + renderer->update(); + }); + + // connect(graph, &nodegraph::NodeGraph::nodeAdded, + // [=](nodegraph::NodePtr node) { qDebug() << "NODE ADDED"; }); + + // connect(graph, &nodegraph::NodeGraph::nodeRemoved, + // [=](nodegraph::NodePtr node) { qDebug() << "NODE REMOVED"; }); + // library = nullptr; } @@ -99,8 +144,24 @@ void GraphWidget::dropEvent(QDropEvent* evt) this->project->addNode(node); this->addNode(node); + this->renderer->update(); + evt->accept(); } // mimeData->formats().contains() // if (mimeData->data("ITEM_TYPE").toStdString() == "") +} + +void GraphWidget::setTextureRenderer(TextureRenderer* renderer) +{ + this->renderer = renderer; + + connect(renderer, &TextureRenderer::thumbnailGenerated, + [=](const QString& nodeId, const QPixmap& pixmap) { + // scene->setNodeThumbnail(nodeId, pixmap); + auto node = scene->getNodeById(nodeId); + if (node) { + node->setThumbnail(pixmap); + } + }); } \ No newline at end of file diff --git a/src/texturelab/widgets/graphwidget.h b/src/texturelab/widgets/graphwidget.h index af21d764..bb0108c5 100644 --- a/src/texturelab/widgets/graphwidget.h +++ b/src/texturelab/widgets/graphwidget.h @@ -4,6 +4,8 @@ #include class QDragEnterEvent; +class TextureRenderer; + namespace nodegraph { class NodeGraph; class Scene; @@ -27,11 +29,15 @@ class GraphWidget : public QMainWindow { void dragMoveEvent(QDragMoveEvent* event); void dropEvent(QDropEvent* event); + void setTextureRenderer(TextureRenderer* renderer); + nodegraph::NodeGraph* graph; // Library* library; nodegraph::ScenePtr scene; TextureProjectPtr project; + TextureRenderer* renderer; + protected: void addNode(const TextureNodePtr& node); }; \ No newline at end of file From 14087ab53fa921ea4609965e5f54b0cb2a467386 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 30 Oct 2022 01:35:51 -0400 Subject: [PATCH 042/100] add node prop function declaratons --- src/texturelab/models.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/texturelab/models.h b/src/texturelab/models.h index 29fcdf7c..53357c97 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -25,6 +25,13 @@ typedef QSharedPointer ConnectionPtr; class Prop; class Library; +class IntProp; +class FloatProp; +class BoolProp; +class EnumProp; +class ColorProp; +class StringProp; + enum class PackageFileType { Texture, Image }; class ProjectFile { @@ -103,6 +110,27 @@ class TextureNode : public QEnableSharedFromThis { } // add prop functions + IntProp* addIntProp(const QString& id, const QString& displayName, + int defaultVal = 1, int minVal = 1, int maxVal = 100, + int increment = 1); + FloatProp* addFloatProp(const QString& id, const QString& displayName, + double defaultVal = 1, double minVal = 1, + double maxVal = 100, double increment = 1); + BoolProp* addBoolProp(const QString& id, const QString& displayName, + bool defaultVal = false); + EnumProp* addEnumProp(const QString& id, const QString& displayName, + QList defaultVal); + ColorProp* addColorProp(const QString& id, const QString& displayName, + QColor defaultVal); + StringProp* addStringProp(const QString& id, const QString& displayName, + const QString& defaultVal = ""); + + // GradientProp* addGradientProp(const QString& id, const QString& + // displayName, + // Gradient defaultVal); + + // ImageProp* addImageProp(const QString& id, const QString& displayName, + // QImage defaultVal); }; class Comment : public QEnableSharedFromThis { From 0d16c802f4b5bc227b342f5ad883cc48af700674 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 30 Oct 2022 21:27:08 -0400 Subject: [PATCH 043/100] pass node props to shader --- src/texturelab/graphics/texturerenderer.cpp | 87 ++++++++- src/texturelab/libraries/libv2.h | 17 +- src/texturelab/mainwindow.cpp | 3 +- src/texturelab/models.cpp | 106 +++++++++++ src/texturelab/models.h | 18 +- src/texturelab/props.cpp | 19 +- src/texturelab/props.h | 195 ++++++++++---------- 7 files changed, 327 insertions(+), 118 deletions(-) diff --git a/src/texturelab/graphics/texturerenderer.cpp b/src/texturelab/graphics/texturerenderer.cpp index df807513..b7ff5525 100644 --- a/src/texturelab/graphics/texturerenderer.cpp +++ b/src/texturelab/graphics/texturerenderer.cpp @@ -18,6 +18,7 @@ // #include // #include +#include "../props.h" #include "models.h" enum class VertexUsage : int { @@ -340,8 +341,10 @@ void TextureRenderer::renderNode(const TextureNodePtr& node) vao->bind(); - if (node->shader->isLinked()) { - node->shader->bind(); + auto shader = node->shader; + + if (shader->isLinked()) { + shader->bind(); // clear all inputs int texIndex = 0; @@ -350,8 +353,8 @@ void TextureRenderer::renderNode(const TextureNodePtr& node) gl->glBindTexture(GL_TEXTURE_2D, 0); // gl->glUniform1i(node->shader->uniformLocation(input), 0); - node->shader->setUniformValue(input.toStdString().c_str(), 0); - node->shader->setUniformValue( + shader->setUniformValue(input.toStdString().c_str(), 0); + shader->setUniformValue( (input + "_connected").toStdString().c_str(), 0); texIndex++; @@ -369,13 +372,54 @@ void TextureRenderer::renderNode(const TextureNodePtr& node) auto name = nodeInput.name; // gl->glUniform1i(node->shader->uniformLocation(input), 0); - node->shader->setUniformValue(name.toStdString().c_str(), texIndex); - node->shader->setUniformValue( - (name + "_connected").toStdString().c_str(), 1); + shader->setUniformValue(name.toStdString().c_str(), texIndex); + shader->setUniformValue((name + "_connected").toStdString().c_str(), + 1); texIndex++; } + // pass seed + shader->setUniformValue( + "_seed", (GLint)(project->randomSeed + node->randomSeed)); + + // texture size + shader->setUniformValue( + "_textureSize", + QVector2D(project->textureWidth, project->textureHeight)); + + // pass props + for (auto prop : node->props) { + auto propName = ("prop_" + prop->name.toStdString()).c_str(); + switch (prop->type) { + case PropType::Int: { + auto intVal = ((IntProp*)prop)->value; + shader->setUniformValue(propName, (GLint)intVal); + } break; + case PropType::Float: { + auto floatVal = ((FloatProp*)prop)->value; + shader->setUniformValue(propName, (GLfloat)floatVal); + } break; + case PropType::Bool: { + auto boolVal = ((BoolProp*)prop)->value; + shader->setUniformValue(propName, (GLint)boolVal == true); + } break; + case PropType::Enum: { + auto enumVal = ((EnumProp*)prop)->index; + shader->setUniformValue(propName, (GLint)enumVal); + } break; + case PropType::Color: { + auto colorVal = ((ColorProp*)prop)->value; + shader->setUniformValue( + propName, QVector4D(colorVal.redF(), colorVal.greenF(), + colorVal.blueF(), colorVal.alphaF())); + } break; + case PropType::Gradient: + // todo: pass gradient + break; + } + } + // render triangles vbo->bind(); gl->glEnableVertexAttribArray((int)VertexUsage::Position); @@ -505,6 +549,8 @@ TextureRenderer::buildShaderForNode(const TextureNodePtr& node) qDebug() << fshader->log(); } + // qDebug() << fSource; + program->removeAllShaders(); program->addShader(vshader); @@ -685,5 +731,30 @@ QString TextureRenderer::createCodeForInputs(const TextureNodePtr& node) QString TextureRenderer::createCodeForProps(const TextureNodePtr& node) { - return ""; + QString code = ""; + + for (auto prop : node->props) { + switch (prop->type) { + case PropType::Int: + code += "uniform int prop_" + prop->name + ";\n"; + break; + case PropType::Float: + code += "uniform float prop_" + prop->name + ";\n"; + break; + case PropType::Bool: + code += "uniform bool prop_" + prop->name + ";\n"; + break; + case PropType::Enum: + code += "uniform int prop_" + prop->name + ";\n"; + break; + case PropType::Color: + code += "uniform vec4 prop_" + prop->name + ";\n"; + break; + case PropType::Gradient: + code += "uniform int prop_" + prop->name + ";\n"; + break; + } + } + + return code + "\n"; } \ No newline at end of file diff --git a/src/texturelab/libraries/libv2.h b/src/texturelab/libraries/libv2.h index e32b3eb0..69d73586 100644 --- a/src/texturelab/libraries/libv2.h +++ b/src/texturelab/libraries/libv2.h @@ -8,11 +8,13 @@ class PolygonNode : public TextureNode { { this->title = "Polygon"; + this->addFloatProp("radius", "Radius", 0.2, 0, 3, 0.01); + // todo: add props this->setShaderSource(R""""( vec4 process(vec2 uv) { - float prop_radius = 0.35; + //float prop_radius = 0.35; float dist = distance(uv, vec2(0.5)); if( dist <= prop_radius) { @@ -57,6 +59,12 @@ class BlendNode : public TextureNode { this->addInput("opacity"); // todo: add props + this->setShaderSource(R""""( + vec4 process(vec2 uv) + { + return vec4(1,1,1,1); + } + )""""); } }; @@ -69,5 +77,12 @@ class OutputNode : public TextureNode { this->addInput("image"); // todo: add props + this->setShaderSource(R""""( + vec4 process(vec2 uv) + { + vec4 prop_color = vec4(1,1,1,1); + return texture(image,uv) * prop_color; + } + )""""); } }; \ No newline at end of file diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index e6be8999..90559524 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -46,8 +46,9 @@ void MainWindow::setProject(TextureProjectPtr project) renderer = new TextureRenderer(); renderer->setProject(project); - renderer->update(); this->graphWidget->setTextureRenderer(renderer); + + renderer->update(); } void MainWindow::setupMenus() diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index 3b8d6023..46032f59 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -105,4 +105,110 @@ void TextureNode::setProp(QString propName, QVariant value) { if (props.contains(propName)) props[propName]->setValue(value); +} + +IntProp* TextureNode::addIntProp(const QString& name, + const QString& displayName, int defaultVal, + int minVal, int maxVal, int increment) +{ + auto prop = new IntProp(); + prop->name = name; + prop->displayName = displayName; + prop->minValue = minVal; + prop->maxValue = maxVal; + prop->step = increment; + prop->value = defaultVal; + + props[name] = prop; + + return prop; +} + +FloatProp* TextureNode::addFloatProp(const QString& name, + const QString& displayName, + double defaultVal, double minVal, + double maxVal, double increment) +{ + auto prop = new FloatProp(); + prop->name = name; + prop->displayName = displayName; + prop->minValue = minVal; + prop->maxValue = maxVal; + prop->step = increment; + prop->value = defaultVal; + + props[name] = prop; + + return prop; +} + +BoolProp* TextureNode::addBoolProp(const QString& name, + const QString& displayName, bool defaultVal) +{ + auto prop = new BoolProp(); + prop->name = name; + prop->displayName = displayName; + prop->value = defaultVal; + + props[name] = prop; + + return prop; +} + +EnumProp* TextureNode::addEnumProp(const QString& name, + const QString& displayName, + QList defaultVal) +{ + auto prop = new EnumProp(); + prop->name = name; + prop->displayName = displayName; + prop->values = defaultVal; + + props[name] = prop; + + return prop; +} + +ColorProp* TextureNode::addColorProp(const QString& name, + const QString& displayName, + const QColor& defaultVal) +{ + auto prop = new ColorProp(); + prop->name = name; + prop->displayName = displayName; + prop->value = defaultVal; + + props[name] = prop; + + return prop; +} + +StringProp* TextureNode::addStringProp(const QString& name, + const QString& displayName, + const QString& defaultVal) +{ + auto prop = new StringProp(); + prop->name = name; + prop->displayName = displayName; + prop->value = defaultVal; + + props[name] = prop; + + return prop; +} + +// GradientProp* addGradientProp(const QString& name, const QString& +// displayName, +// Gradient defaultVal); + +ImageProp* TextureNode::addImageProp(const QString& name, + const QString& displayName) +{ + auto prop = new ImageProp(); + prop->name = name; + prop->displayName = displayName; + + props[name] = prop; + + return prop; } \ No newline at end of file diff --git a/src/texturelab/models.h b/src/texturelab/models.h index 53357c97..3040b68b 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -31,6 +31,7 @@ class BoolProp; class EnumProp; class ColorProp; class StringProp; +class ImageProp; enum class PackageFileType { Texture, Image }; @@ -110,27 +111,26 @@ class TextureNode : public QEnableSharedFromThis { } // add prop functions - IntProp* addIntProp(const QString& id, const QString& displayName, + IntProp* addIntProp(const QString& name, const QString& displayName, int defaultVal = 1, int minVal = 1, int maxVal = 100, int increment = 1); - FloatProp* addFloatProp(const QString& id, const QString& displayName, + FloatProp* addFloatProp(const QString& name, const QString& displayName, double defaultVal = 1, double minVal = 1, double maxVal = 100, double increment = 1); - BoolProp* addBoolProp(const QString& id, const QString& displayName, + BoolProp* addBoolProp(const QString& name, const QString& displayName, bool defaultVal = false); - EnumProp* addEnumProp(const QString& id, const QString& displayName, + EnumProp* addEnumProp(const QString& name, const QString& displayName, QList defaultVal); - ColorProp* addColorProp(const QString& id, const QString& displayName, - QColor defaultVal); - StringProp* addStringProp(const QString& id, const QString& displayName, + ColorProp* addColorProp(const QString& name, const QString& displayName, + const QColor& defaultVal); + StringProp* addStringProp(const QString& name, const QString& displayName, const QString& defaultVal = ""); // GradientProp* addGradientProp(const QString& id, const QString& // displayName, // Gradient defaultVal); - // ImageProp* addImageProp(const QString& id, const QString& displayName, - // QImage defaultVal); + ImageProp* addImageProp(const QString& name, const QString& displayName); }; class Comment : public QEnableSharedFromThis { diff --git a/src/texturelab/props.cpp b/src/texturelab/props.cpp index f0451ae0..a1360b6c 100644 --- a/src/texturelab/props.cpp +++ b/src/texturelab/props.cpp @@ -9,8 +9,7 @@ QString createGuid() QString PropType::toString(Value propType) { - switch (propType) - { + switch (propType) { case Float: return "float"; case Int: @@ -52,4 +51,20 @@ PropType::Value PropType::fromString(QString propType) return Image; return Unknown; +} + +Prop::Prop() { id = createGuid(); } + +QJsonObject Prop::toJson() +{ + QJsonObject obj; + obj["id"] = id; + obj["name"] = name; + obj["displayName"] = displayName; +} +void Prop::fromJson(const QJsonObject& obj) +{ + id = obj["id"].toString(); + name = obj["name"].toString(); + displayName = obj["displayName"].toString(); } \ No newline at end of file diff --git a/src/texturelab/props.h b/src/texturelab/props.h index b7fb9582..3945f7a5 100644 --- a/src/texturelab/props.h +++ b/src/texturelab/props.h @@ -1,21 +1,22 @@ #pragma once -#include -#include -#include +#include +#include +#include +#include #include +#include +#include +#include #include -#include class Prop; // http://techiesolves.blogspot.com/2018/01/base64-qstring-to-qimage-to-qstring-in.html QString createGuid(); -class PropType -{ +class PropType { public: - enum Value - { + enum Value { Unknown = -1, Float = 0, Int, @@ -32,15 +33,13 @@ class PropType static Value fromString(QString propType); }; -class PropertyGroup -{ +class PropertyGroup { public: QString name; - QList props; + QList props; }; -class Prop -{ +class Prop { public: QString id; QString name; @@ -53,18 +52,19 @@ class Prop virtual void setValue(QVariant val) = 0; virtual QJsonObject toJson(); - virtual void fromJson(const QJsonObject &obj); + virtual void fromJson(const QJsonObject& obj); + + virtual ~Prop() {} }; -class FloatProp : public Prop -{ +class FloatProp : public Prop { public: double value; double minValue; double maxValue; double step; - FloatProp() + FloatProp() : Prop() { value = 0; minValue = 0; @@ -73,15 +73,9 @@ class FloatProp : public Prop type = PropType::Float; } - QVariant getValue() - { - return QVariant::fromValue(value); - } + QVariant getValue() override { return QVariant::fromValue(value); } - void setValue(QVariant val) - { - value = val.toDouble(); - } + void setValue(QVariant val) override { value = val.toDouble(); } QJsonObject toJson() override { @@ -93,8 +87,9 @@ class FloatProp : public Prop return obj; } - void fromJson(const QJsonObject &obj) override + void fromJson(const QJsonObject& obj) override { + Prop::fromJson(obj); value = obj["value"].toDouble(); minValue = obj["minValue"].toDouble(); maxValue = obj["maxValue"].toDouble(); @@ -102,15 +97,14 @@ class FloatProp : public Prop } }; -class IntProp : public Prop -{ +class IntProp : public Prop { public: long value; long minValue; long maxValue; long step; - IntProp() + IntProp() : Prop() { value = 0; minValue = 0; @@ -119,15 +113,9 @@ class IntProp : public Prop type = PropType::Int; } - QVariant getValue() - { - return QVariant::fromValue(value); - } + QVariant getValue() override { return QVariant::fromValue(value); } - void setValue(QVariant val) - { - value = (long)val.toLongLong(); - } + void setValue(QVariant val) override { value = (long)val.toLongLong(); } QJsonObject toJson() override { @@ -139,8 +127,9 @@ class IntProp : public Prop return obj; } - void fromJson(const QJsonObject &obj) override + void fromJson(const QJsonObject& obj) override { + Prop::fromJson(obj); value = obj["value"].toDouble(); minValue = obj["minValue"].toDouble(); maxValue = obj["maxValue"].toDouble(); @@ -148,26 +137,19 @@ class IntProp : public Prop } }; -class BoolProp : public Prop -{ +class BoolProp : public Prop { public: bool value; - BoolProp() + BoolProp() : Prop() { type = PropType::Bool; value = false; } - QVariant getValue() - { - return value; - } + QVariant getValue() override { return value; } - void setValue(QVariant val) - { - value = val.toBool(); - } + void setValue(QVariant val) override { value = val.toBool(); } QJsonObject toJson() override { @@ -176,32 +158,23 @@ class BoolProp : public Prop return obj; } - void fromJson(const QJsonObject &obj) override + void fromJson(const QJsonObject& obj) override { + Prop::fromJson(obj); value = obj["value"].toBool(); } }; -class EnumProp : public Prop -{ +class EnumProp : public Prop { public: QList values; int index; - EnumProp() - { - type = PropType::Color; - } + EnumProp() : Prop() { type = PropType::Color; } - QVariant getValue() - { - return index; - } + QVariant getValue() override { return index; } - void setValue(QVariant val) - { - index = val.value(); - } + void setValue(QVariant val) override { index = val.value(); } QJsonObject toJson() override { @@ -210,8 +183,7 @@ class EnumProp : public Prop // values QJsonArray valueList; - for (auto enumValue : values) - { + for (auto enumValue : values) { valueList.append(enumValue); } obj["values"] = valueList; @@ -219,37 +191,27 @@ class EnumProp : public Prop return obj; } - void fromJson(const QJsonObject &obj) override + void fromJson(const QJsonObject& obj) override { + Prop::fromJson(obj); index = obj["index"].toInt(); auto list = obj["values"].toArray(); values.empty(); - for (auto item : list) - { + for (auto item : list) { values.append(item.toString()); } } }; -struct ColorProp : public Prop -{ +struct ColorProp : public Prop { QColor value; - ColorProp() - { - type = PropType::Color; - } + ColorProp() : Prop() { type = PropType::Color; } - QVariant getValue() - { - return value; - } + QVariant getValue() override { return value; } - void setValue(QVariant val) - { - value = val.value(); - } + void setValue(QVariant val) override { value = val.value(); } QJsonObject toJson() override { @@ -264,8 +226,9 @@ struct ColorProp : public Prop return obj; } - void fromJson(const QJsonObject &obj) override + void fromJson(const QJsonObject& obj) override { + Prop::fromJson(obj); auto colorObj = obj["value"].toObject(); value.setRed(colorObj["r"].toInt()); value.setGreen(colorObj["g"].toInt()); @@ -274,35 +237,73 @@ struct ColorProp : public Prop } }; -class StringProp : public Prop -{ +class StringProp : public Prop { public: QString value; - StringProp() - { - type = PropType::Color; - } + StringProp() : Prop() { type = PropType::Color; } + + QVariant getValue() override { return value; } - QVariant getValue() + void setValue(QVariant val) override { value = val.value(); } + + QJsonObject toJson() override { - return value; + auto obj = Prop::toJson(); + obj["value"] = value; + return obj; } - void setValue(QVariant val) + void fromJson(const QJsonObject& obj) override { - value = val.value(); + Prop::fromJson(obj); + value = obj["value"].toString(); } +}; + +class ImageProp : public Prop { +public: + QImage value; + + ImageProp() : Prop() { type = PropType::Image; } + + QVariant getValue() override { return value; } + + void setValue(QVariant val) override { value = val.value(); } QJsonObject toJson() override { auto obj = Prop::toJson(); - obj["value"] = value; + if (value.isNull()) { + obj["value"] = ""; + return obj; + } + + QBuffer buffer; + buffer.open(QIODevice::WriteOnly); + value.save(&buffer, "PNG"); + QString encoded = buffer.data().toBase64(); + + obj["value"] = "data:image/png;base64," + encoded; return obj; } - void fromJson(const QJsonObject &obj) override + void fromJson(const QJsonObject& obj) override { - value = obj["value"].toString(); + Prop::fromJson(obj); + + auto stringData = obj["value"].toString(); + if (stringData.isNull() || stringData.isEmpty()) + return; + + auto parts = stringData.split(";base64,"); + if (parts.length() == 0 || parts.length() == 1) + return; + + auto bytes = QByteArray::fromBase64(parts[0].toUtf8()); + + QImage image; + image.loadFromData(QByteArray::fromBase64(stringData.toUtf8())); + this->value = value; } }; \ No newline at end of file From 161696f60cee632deda0c97b99a15b37eb810465 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 6 Nov 2022 01:18:56 -0400 Subject: [PATCH 044/100] emit node selection change event --- src/nodegraph/graph/scene.cpp | 8 ++++++++ src/nodegraph/graph/scene.h | 6 ++++-- src/nodegraph/nodegraph.cpp | 17 +++++++++++++++++ src/nodegraph/nodegraph.h | 4 ++++ 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 73821a4f..7cff7175 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -1,5 +1,6 @@ #include "scene.h" #include +#include #include #include #include @@ -255,6 +256,13 @@ QRectF Node::boundingRect() const { return QRectF(0, 0, 100, 100); } // QGraphicsObject::mouseMoveEvent(event); // } +void Node::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) +{ + // if (event->button() == Qt::LeftButton) { + // emit selected(sharedFromThis()); + // } +} + void Node::hoverEnterEvent(QGraphicsSceneHoverEvent* event) { this->text->hide(); diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index 81791407..c1a58b25 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -108,8 +108,7 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { // void // mouseMoveEvent(QGraphicsSceneMouseEvent *event) override; - // void - // mouseReleaseEvent(QGraphicsSceneMouseEvent *event) override; + void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) override; void hoverEnterEvent(QGraphicsSceneHoverEvent* event) override; @@ -120,6 +119,9 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { // void // mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) override; + + // signals: + // void selected(const NodePtr& node); }; enum class PortType : int { Invalid = 0, In = 1, Out = 2 }; diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index 72744d53..ccc3b723 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -75,6 +75,10 @@ void NodeGraph::setNodeGraphScene(const ScenePtr& scene) // handle scene's events from within the view scene->installEventFilter(this); + + // connect to selection signal + connect(scene.data(), &QGraphicsScene::selectionChanged, + [=]() { this->handleSelectionChange(); }); } void NodeGraph::wheelEvent(QWheelEvent* event) @@ -445,6 +449,19 @@ const Port* NodeGraph::getPortAtScenePos(float x, float y) const return nullptr; } +void NodeGraph::handleSelectionChange() +{ + auto selected = this->_scene->selectedItems(); + for (auto item : selected) { + if (item->type() == (int)SceneItemType::Node) { + emit nodeSelectionChanged(((Node*)item)->sharedFromThis()); + return; + } + } + + emit nodeSelectionChanged(NodePtr(nullptr)); +} + NodeGraph::~NodeGraph() {} } // namespace nodegraph \ No newline at end of file diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h index 8e1411fa..6c1101f2 100644 --- a/src/nodegraph/nodegraph.h +++ b/src/nodegraph/nodegraph.h @@ -94,6 +94,7 @@ class NodeGraph : public QGraphicsView { void dropEvent(QDropEvent* event); const Port* getPortAtScenePos(float x, float y) const; + void handleSelectionChange(); private: QPointF _clickPos; @@ -110,6 +111,9 @@ class NodeGraph : public QGraphicsView { void nodeAdded(NodePtr node); void nodeRemoved(NodePtr node); + // null nodeptr means no active node selected + void nodeSelectionChanged(NodePtr node); + void itemsDeleted(QList nodes, QList cons); }; } // namespace nodegraph \ No newline at end of file From 1a90a94364286c73c000f267f30d1ef2f5ba86c1 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 6 Nov 2022 04:23:51 -0500 Subject: [PATCH 045/100] add prop display for float props --- src/nodegraph/graph/scene.cpp | 2 + src/texturelab/libraries/libv2.h | 2 +- src/texturelab/mainwindow.cpp | 25 +++- src/texturelab/models.cpp | 4 +- src/texturelab/models.h | 2 + src/texturelab/widgets/graphwidget.cpp | 16 +++ src/texturelab/widgets/graphwidget.h | 5 + src/texturelab/widgets/propertieswidget.cpp | 144 ++++++++++++++++++++ src/texturelab/widgets/propertieswidget.h | 45 +++++- 9 files changed, 239 insertions(+), 6 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index 7cff7175..b19a1f49 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -261,6 +261,8 @@ void Node::mouseReleaseEvent(QGraphicsSceneMouseEvent* event) // if (event->button() == Qt::LeftButton) { // emit selected(sharedFromThis()); // } + + QGraphicsObject::mouseReleaseEvent(event); } void Node::hoverEnterEvent(QGraphicsSceneHoverEvent* event) diff --git a/src/texturelab/libraries/libv2.h b/src/texturelab/libraries/libv2.h index 69d73586..3d146232 100644 --- a/src/texturelab/libraries/libv2.h +++ b/src/texturelab/libraries/libv2.h @@ -8,7 +8,7 @@ class PolygonNode : public TextureNode { { this->title = "Polygon"; - this->addFloatProp("radius", "Radius", 0.2, 0, 3, 0.01); + this->addFloatProp("radius", "Radius", 0.2, 0, 1, 0.01); // todo: add props this->setShaderSource(R""""( diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 90559524..61ae146e 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -13,7 +13,9 @@ #include "widgets/graphwidget.h" #include "widgets/librarywidget.h" +#include "widgets/propertieswidget.h" +#include "models.h" #include "project.h" #include "graphics/texturerenderer.h" @@ -25,10 +27,28 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) this->setupMenus(); this->setupToolbar(); + this->renderer = nullptr; + this->dockManager = new ads::CDockManager(this); this->setupDocks(); + // setup callbacks + connect(this->graphWidget, &GraphWidget::nodeSelectionChanged, + [this](const TextureNodePtr& node) { + if (!!node) + this->propWidget->setSelectedNode(node); + else + this->propWidget->clearSelection(); + }); + + connect(this->propWidget, &PropertiesWidget::propertyUpdated, + [this](const QString& name, const QVariant& value) { + if (this->renderer && !!this->project) { + this->renderer->update(); + } + }); + // set default empty project auto project = TextureProject::createEmpty(); this->setProject(project); @@ -43,6 +63,7 @@ void MainWindow::setProject(TextureProjectPtr project) this->project = project; this->graphWidget->setTextureProject(project); this->libraryWidget->setLibrary(project->library); + this->propWidget->clearSelection(); renderer = new TextureRenderer(); renderer->setProject(project); @@ -131,8 +152,10 @@ void MainWindow::setupDocks() addDock("Graph", ads::CenterDockWidgetArea, graphWidget, nullptr); auto leftArea = addDock("2D View", ads::LeftDockWidgetArea, new QWidget(this), graphArea); + + this->propWidget = new PropertiesWidget(); auto rightArea = addDock("Properties", ads::RightDockWidgetArea, - new QWidget(this), graphArea); + this->propWidget, graphArea); this->libraryWidget = new LibraryWidget(); setWidgetRatiosInArea(graphArea, {1.0f / 5, 3.0f / 5, 1.0f / 5}); diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index 46032f59..7eba96ed 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -103,8 +103,10 @@ void TextureNode::addInput(const QString& inputName) void TextureNode::setProp(QString propName, QVariant value) { - if (props.contains(propName)) + if (props.contains(propName)) { props[propName]->setValue(value); + this->isDirty = true; + } } IntProp* TextureNode::addIntProp(const QString& name, diff --git a/src/texturelab/models.h b/src/texturelab/models.h index 3040b68b..d1ec3761 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -69,6 +69,8 @@ class TextureProject : public QEnableSharedFromThis { void removeConnection(ConnectionPtr con); void removeConnection(const QString& id); + void markNodeAsDirty(const TextureNodePtr& node); + static TextureProjectPtr createEmpty(Library* library = nullptr); }; diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp index f08f107d..969960f8 100644 --- a/src/texturelab/widgets/graphwidget.cpp +++ b/src/texturelab/widgets/graphwidget.cpp @@ -59,6 +59,22 @@ GraphWidget::GraphWidget() : QMainWindow(nullptr) renderer->update(); }); + connect(graph, &nodegraph::NodeGraph::nodeSelectionChanged, + [=](nodegraph::NodePtr node) { + if (!!node) { + qDebug() << "NODE SELECTED"; + + if (!!project) { + auto texNode = project->getNodeById(node->id()); + emit nodeSelectionChanged(texNode); + } + } + else { + qDebug() << "NODE DESELECTED"; + emit nodeSelectionChanged(TextureNodePtr(nullptr)); + } + }); + // connect(graph, &nodegraph::NodeGraph::nodeAdded, // [=](nodegraph::NodePtr node) { qDebug() << "NODE ADDED"; }); diff --git a/src/texturelab/widgets/graphwidget.h b/src/texturelab/widgets/graphwidget.h index bb0108c5..8e3c8b50 100644 --- a/src/texturelab/widgets/graphwidget.h +++ b/src/texturelab/widgets/graphwidget.h @@ -20,6 +20,8 @@ typedef QSharedPointer TextureProjectPtr; typedef QSharedPointer TextureNodePtr; class GraphWidget : public QMainWindow { + Q_OBJECT + public: GraphWidget(); @@ -40,4 +42,7 @@ class GraphWidget : public QMainWindow { protected: void addNode(const TextureNodePtr& node); + +signals: + void nodeSelectionChanged(const TextureNodePtr& node); }; \ No newline at end of file diff --git a/src/texturelab/widgets/propertieswidget.cpp b/src/texturelab/widgets/propertieswidget.cpp index e69de29b..267a4f56 100644 --- a/src/texturelab/widgets/propertieswidget.cpp +++ b/src/texturelab/widgets/propertieswidget.cpp @@ -0,0 +1,144 @@ +#include "propertieswidget.h" +#include "../models.h" +#include "../props.h" + +#include +#include +#include +#include +#include +#include + +const int SLIDER_MAX = 1000; + +// https://stackoverflow.com/a/19007951 +FloatPropWidget::FloatPropWidget() +{ + prop = nullptr; + + auto vlayout = new QVBoxLayout(this); + this->setLayout(vlayout); + + // label + label = new QLabel(this); + label->setText(""); + vlayout->addWidget(label); + + // slider + slider = new QSlider(Qt::Horizontal, this); + slider->setMinimum(0); + slider->setMaximum(SLIDER_MAX); + slider->setSingleStep(1); + + spinbox = new QDoubleSpinBox(this); + + auto hbox = new QHBoxLayout(); + hbox->addWidget(slider); + hbox->addWidget(spinbox); + + vlayout->addLayout(hbox); + + this->setFixedHeight(80); + + connect(slider, &QSlider::valueChanged, [=](int val) { + auto percent = val / (float)SLIDER_MAX; + if (prop) { + auto range = prop->maxValue - prop->minValue; + auto finalValue = prop->minValue + range * percent; + spinbox->setValue(finalValue); + + emit valueChanged(finalValue); + } + }); + + connect(spinbox, &QDoubleSpinBox::valueChanged, [=](double val) { + if (prop) { + auto range = prop->maxValue - prop->minValue; + auto finalValue = (val / range) * SLIDER_MAX; + + slider->setValue(finalValue); + + emit valueChanged(val); + } + }); +} + +void FloatPropWidget::setProp(FloatProp* prop) +{ + label->setText(prop->displayName); + + spinbox->setMinimum(prop->minValue); + spinbox->setMaximum(prop->maxValue); + spinbox->setSingleStep(prop->step); + spinbox->setValue(prop->value); + + auto range = prop->maxValue - prop->minValue; + auto finalValue = (prop->value / range) * SLIDER_MAX; + + slider->setValue(finalValue); + + this->prop = prop; +} + +PropertiesWidget::PropertiesWidget() : QWidget() +{ + displayMode = PropertyDisplayMode::None; + + auto layout = new QVBoxLayout(this); + layout->addStretch(1); + this->setLayout(layout); +} + +void PropertiesWidget::setSelectedNode(const TextureNodePtr& node) +{ + qDebug() << "Displaying properties for node: " << node->title; + + // clear current properties + this->clearSelection(); + + auto layout = (QVBoxLayout*)this->layout(); + + // add new props to layout + for (auto prop : node->props) { + switch (prop->type) { + case PropType::Float: { + auto widget = new FloatPropWidget(); + widget->setProp((FloatProp*)prop); + propWidgets.append(widget); + + connect(widget, &FloatPropWidget::valueChanged, [=](double value) { + qDebug() << "prop" << prop->name << " changed: " << value; + // set node value + + node->setProp(prop->name, value); + // mark subsequent nodes as dirty!!! + + emit propertyUpdated(prop->name, value); + }); + layout->addWidget(widget); + + } break; + } + } + + layout->addStretch(1); +} + +void PropertiesWidget::clearSelection() +{ + displayMode = PropertyDisplayMode::None; + + auto layout = this->layout(); + + // clear widget + for (auto widget : propWidgets) { + widget->hide(); + widget->deleteLater(); + } + + // remove all items + while (layout->count() > 0) + layout->removeItem(layout->itemAt(0)); + + propWidgets.clear(); +} \ No newline at end of file diff --git a/src/texturelab/widgets/propertieswidget.h b/src/texturelab/widgets/propertieswidget.h index 508f809f..055a43b3 100644 --- a/src/texturelab/widgets/propertieswidget.h +++ b/src/texturelab/widgets/propertieswidget.h @@ -1,9 +1,48 @@ #pragma once -#include +#include +#include + +class TextureNode; +typedef QSharedPointer TextureNodePtr; + +class QLabel; +class QSlider; +class QDoubleSpinBox; +class FloatProp; + +enum class PropertyDisplayMode { None, Node, Frame, Comment }; + +// https://stackoverflow.com/a/19007951 +class FloatPropWidget : public QWidget { + Q_OBJECT + + QLabel* label; + QSlider* slider; + QDoubleSpinBox* spinbox; + + FloatProp* prop; + +public: + FloatPropWidget(); + void setProp(FloatProp* prop); +signals: + void valueChanged(float); +}; + +class PropertiesWidget : public QWidget { + + Q_OBJECT + + PropertyDisplayMode displayMode; + QVector propWidgets; -class PropertiesWidget : public QFrame -{ public: PropertiesWidget(); + + void setSelectedNode(const TextureNodePtr& node); + void clearSelection(); + +signals: + void propertyUpdated(const QString& name, const QVariant& value); }; \ No newline at end of file From d9b62aa9152087e5d37757cb8e16b597817dec73 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 6 Nov 2022 12:25:15 -0500 Subject: [PATCH 046/100] mark nodes in sequence as dirty on node update --- src/texturelab/mainwindow.cpp | 2 ++ src/texturelab/models.cpp | 31 +++++++++++++++++++++ src/texturelab/models.h | 1 + src/texturelab/widgets/propertieswidget.cpp | 7 +++++ src/texturelab/widgets/propertieswidget.h | 6 ++++ 5 files changed, 47 insertions(+) diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 61ae146e..95e3c868 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -63,7 +63,9 @@ void MainWindow::setProject(TextureProjectPtr project) this->project = project; this->graphWidget->setTextureProject(project); this->libraryWidget->setLibrary(project->library); + this->propWidget->clearSelection(); + this->propWidget->setProject(project); renderer = new TextureRenderer(); renderer->setProject(project); diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index 7eba96ed..2e90e1ae 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -1,6 +1,7 @@ #include "models.h" #include "libraries/library.h" #include "props.h" +#include TextureNodePtr TextureProject::getNodeById(const QString& id) { @@ -27,6 +28,21 @@ QVector TextureProject::getNodeDependencies(const QString& id) return cons; } +QVector TextureProject::getNodeRightOfNode(const QString& id) +{ + auto node = nodes[id]; + + QVector cons; + for (auto con : connections) { + if (con->leftNode == node) { + auto nextNode = con->rightNode; + cons.append(nextNode); + } + } + + return cons; +} + void TextureProject::addNode(const TextureNodePtr& node) { // todo: check if node already exists @@ -78,6 +94,21 @@ void TextureProject::removeConnection(const QString& id) this->connections.remove(id); } +void TextureProject::markNodeAsDirty(const TextureNodePtr& node) +{ + QQueue queue; + queue.enqueue(node); + + while (!queue.isEmpty()) { + auto nextNode = queue.dequeue(); + nextNode->isDirty = true; + + auto list = getNodeRightOfNode(nextNode->id); + for (auto item : list) + queue.enqueue(item); + } +} + TextureProjectPtr TextureProject::createEmpty(Library* library) { auto project = new TextureProject(); diff --git a/src/texturelab/models.h b/src/texturelab/models.h index d1ec3761..09033d68 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -56,6 +56,7 @@ class TextureProject : public QEnableSharedFromThis { TextureNodePtr getNodeById(const QString& id); ConnectionPtr getConnectionById(const QString& id); QVector getNodeDependencies(const QString& id); + QVector getNodeRightOfNode(const QString& id); void addNode(const TextureNodePtr& node); diff --git a/src/texturelab/widgets/propertieswidget.cpp b/src/texturelab/widgets/propertieswidget.cpp index 267a4f56..9434e003 100644 --- a/src/texturelab/widgets/propertieswidget.cpp +++ b/src/texturelab/widgets/propertieswidget.cpp @@ -113,6 +113,8 @@ void PropertiesWidget::setSelectedNode(const TextureNodePtr& node) node->setProp(prop->name, value); // mark subsequent nodes as dirty!!! + project->markNodeAsDirty(node); + emit propertyUpdated(prop->name, value); }); layout->addWidget(widget); @@ -141,4 +143,9 @@ void PropertiesWidget::clearSelection() layout->removeItem(layout->itemAt(0)); propWidgets.clear(); +} + +void PropertiesWidget::setProject(const TextureProjectPtr& project) +{ + this->project = project; } \ No newline at end of file diff --git a/src/texturelab/widgets/propertieswidget.h b/src/texturelab/widgets/propertieswidget.h index 055a43b3..3cb04257 100644 --- a/src/texturelab/widgets/propertieswidget.h +++ b/src/texturelab/widgets/propertieswidget.h @@ -3,7 +3,9 @@ #include #include +class TextureProject; class TextureNode; +typedef QSharedPointer TextureProjectPtr; typedef QSharedPointer TextureNodePtr; class QLabel; @@ -37,12 +39,16 @@ class PropertiesWidget : public QWidget { PropertyDisplayMode displayMode; QVector propWidgets; + TextureProjectPtr project; + public: PropertiesWidget(); void setSelectedNode(const TextureNodePtr& node); void clearSelection(); + void setProject(const TextureProjectPtr& project); + signals: void propertyUpdated(const QString& name, const QVariant& value); }; \ No newline at end of file From 1bf65cf0852a9c7ae32ad6e7686a1bc126c7424e Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 6 Nov 2022 16:42:36 -0500 Subject: [PATCH 047/100] enable opengl rendering in node graphics item --- src/nodegraph/CMakeLists.txt | 9 +++++---- src/nodegraph/graph/scene.cpp | 29 ++++++++++++++++++++++++++++- src/nodegraph/nodegraph.cpp | 16 +++++++++++++++- src/texturelab/CMakeLists.txt | 1 + src/texturelab/main.cpp | 5 +++-- 5 files changed, 52 insertions(+), 8 deletions(-) diff --git a/src/nodegraph/CMakeLists.txt b/src/nodegraph/CMakeLists.txt index 39e28517..94b47851 100644 --- a/src/nodegraph/CMakeLists.txt +++ b/src/nodegraph/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.5) find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) -find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets OpenGLWidgets REQUIRED) if (UNIX AND NOT APPLE) include_directories(${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) endif() @@ -23,9 +23,10 @@ set(NODEGRAPH_HEADERS # library add_library(nodegraph STATIC ${NODEGRAPH_SRCS} ${NODEGRAPH_HEADERS}) -target_link_libraries(nodegraph PUBLIC Qt${QT_VERSION_MAJOR}::Core - Qt${QT_VERSION_MAJOR}::Gui - Qt${QT_VERSION_MAJOR}::Widgets) +target_link_libraries(nodegraph PRIVATE Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::OpenGLWidgets + Qt${QT_VERSION_MAJOR}::Widgets) set_target_properties(nodegraph PROPERTIES diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index b19a1f49..eda1dd4a 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -1,6 +1,9 @@ #include "scene.h" #include #include +#include +#include +#include #include #include #include @@ -105,6 +108,8 @@ Node::Node() // highlightBorderColor = QColor(120, 120, 120); selectedBorderColor = QColor(200, 200, 200); + setCacheMode(QGraphicsItem::NoCache); + setFlag(QGraphicsItem::ItemIsMovable, true); setFlag(QGraphicsItem::ItemIsFocusable, true); setFlag(QGraphicsItem::ItemIsSelectable, true); @@ -136,7 +141,8 @@ Node::Node() effect->setXOffset(0); effect->setYOffset(0); effect->setColor(QColor(00, 00, 00, 70)); - setGraphicsEffect(effect); + // setGraphicsEffect(effect); // forces node to raster remder + // maybe render to node behind this to get same effect setAcceptHoverEvents(true); // setAcceptDrops(true); @@ -288,6 +294,14 @@ void Node::paint(QPainter* painter, QStyleOptionGraphicsItem const* option, const int titleRadius = 4; const QColor titleColor(0, 0, 0); + // // https://doc.qt.io/qt-5/qpainter.html#beginNativePainting + // https://github.com/liff-engineer/WeeklyARTS/blob/d8605aa3bfb2641d2a13621262024a1edff7b661/2018_9_4/Mixin2D%263DinQt.md + auto type = painter->paintEngine()->type(); + if (type != QPaintEngine::OpenGL && type != QPaintEngine::OpenGL2) { + qWarning() << "Paint engine needs to be OPENGL!"; + // return; + } + auto rect = boundingRect(); QColor borderColor; @@ -349,6 +363,19 @@ void Node::paint(QPainter* painter, QStyleOptionGraphicsItem const* option, // draw border painter->setPen(QPen(borderColor, 3)); painter->drawRoundedRect(rect, titleRadius, titleRadius); + + // // https://doc.qt.io/qt-5/qpainter.html#beginNativePainting + painter->beginNativePainting(); + + glColor4f(1.0f, 0.0f, 0.0f, 1.0); + glBegin(GL_QUADS); + glVertex2f(0, 0); + glVertex2f(100, 0); + glVertex2f(100, 100); + glVertex2f(0, 100); + glEnd(); + + painter->endNativePainting(); } Node::~Node() diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index ccc3b723..cd8de29e 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -9,6 +9,7 @@ // #include // #include +#include #include #include @@ -35,6 +36,13 @@ void MouseButtonStates::reset() NodeGraph::NodeGraph(QWidget* parent) : QGraphicsView(parent) { + // https://doc.qt.io/qt-6.2/graphicsview.html#opengl-rendering + auto gl = new QOpenGLWidget(); + QSurfaceFormat format; + format.setSamples(4); + gl->setFormat(format); + this->setViewport(gl); + setDragMode(QGraphicsView::RubberBandDrag); setRenderHint(QPainter::Antialiasing); @@ -46,7 +54,7 @@ NodeGraph::NodeGraph(QWidget* parent) : QGraphicsView(parent) setTransformationAnchor(QGraphicsView::AnchorUnderMouse); - setCacheMode(QGraphicsView::CacheBackground); + // setCacheMode(QGraphicsView::CacheBackground); // setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate); setViewportUpdateMode(QGraphicsView::FullViewportUpdate); @@ -182,6 +190,12 @@ void NodeGraph::mouseReleaseEvent(QMouseEvent* event) void NodeGraph::drawBackground(QPainter* painter, const QRectF& r) { + auto type = painter->paintEngine()->type(); + if (type != QPaintEngine::OpenGL && type != QPaintEngine::OpenGL2) { + qWarning() << "background paint engine needs to be OPENGL!"; + // return; + } + QGraphicsView::drawBackground(painter, r); painter->setRenderHint(QPainter::Antialiasing); diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index a53223d5..4bc97316 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -58,6 +58,7 @@ else() ) endif() +# note: openglwidgets is qt6 only target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::OpenGL qtadvanceddocking nodegraph) target_include_directories(texturelab PUBLIC ../ads/src diff --git a/src/texturelab/main.cpp b/src/texturelab/main.cpp index 1b1426aa..8d662233 100644 --- a/src/texturelab/main.cpp +++ b/src/texturelab/main.cpp @@ -2,11 +2,12 @@ #include -int main(int argc, char *argv[]) +int main(int argc, char* argv[]) { + QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts); QApplication a(argc, argv); MainWindow w; - + w.show(); w.showMaximized(); From 5e7000f7b92b72b215459256bf20426f2ebbb4e2 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 6 Nov 2022 17:16:57 -0500 Subject: [PATCH 048/100] render node thumbnails directly with texture ids --- src/nodegraph/graph/scene.cpp | 40 ++++++++++++++------- src/nodegraph/graph/scene.h | 5 +++ src/texturelab/graphics/texturerenderer.cpp | 9 +++-- src/texturelab/graphics/texturerenderer.h | 4 ++- src/texturelab/widgets/graphwidget.cpp | 4 ++- 5 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/nodegraph/graph/scene.cpp b/src/nodegraph/graph/scene.cpp index eda1dd4a..3e79701c 100644 --- a/src/nodegraph/graph/scene.cpp +++ b/src/nodegraph/graph/scene.cpp @@ -348,6 +348,33 @@ void Node::paint(QPainter* painter, QStyleOptionGraphicsItem const* option, painter->drawPixmap(QRect(0, 0, nodeWidth, nodeHeight), thumbnail); } + // thumbnail as texture + if (texId != 0) { + // // https://doc.qt.io/qt-5/qpainter.html#beginNativePainting + painter->beginNativePainting(); + + // glColor4f(1.0f, 0.0f, 0.0f, 1.0); + glEnable(GL_TEXTURE_2D); + + glActiveTexture(0); + glBindTexture(GL_TEXTURE_2D, texId); + glBegin(GL_QUADS); + glTexCoord2f(0, 0); + glVertex2f(0, 0); + + glTexCoord2f(1, 0); + glVertex2f(100, 0); + + glTexCoord2f(1, 1); + glVertex2f(100, 100); + + glTexCoord2f(0, 1); + glVertex2f(0, 100); + glEnd(); + + painter->endNativePainting(); + } + // draw highlight // top bar for text @@ -363,19 +390,6 @@ void Node::paint(QPainter* painter, QStyleOptionGraphicsItem const* option, // draw border painter->setPen(QPen(borderColor, 3)); painter->drawRoundedRect(rect, titleRadius, titleRadius); - - // // https://doc.qt.io/qt-5/qpainter.html#beginNativePainting - painter->beginNativePainting(); - - glColor4f(1.0f, 0.0f, 0.0f, 1.0); - glBegin(GL_QUADS); - glVertex2f(0, 0); - glVertex2f(100, 0); - glVertex2f(100, 100); - glVertex2f(0, 100); - glEnd(); - - painter->endNativePainting(); } Node::~Node() diff --git a/src/nodegraph/graph/scene.h b/src/nodegraph/graph/scene.h index c1a58b25..6214e90a 100644 --- a/src/nodegraph/graph/scene.h +++ b/src/nodegraph/graph/scene.h @@ -5,6 +5,7 @@ #include #include #include +#include #include #include #include @@ -56,6 +57,8 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { int width; int height; + GLuint texId = 0; + QGraphicsTextItem* text; QString name; @@ -77,6 +80,8 @@ class Node : public QGraphicsObject, public QEnableSharedFromThis { const QString id() const { return _id; } void setId(const QString& id) { _id = id; } + void setTextureId(GLuint id) { texId = id; } + const QVector getInPorts() const; const QVector getOutPorts() const; diff --git a/src/texturelab/graphics/texturerenderer.cpp b/src/texturelab/graphics/texturerenderer.cpp index b7ff5525..cea28fdc 100644 --- a/src/texturelab/graphics/texturerenderer.cpp +++ b/src/texturelab/graphics/texturerenderer.cpp @@ -155,6 +155,8 @@ void TextureRenderer::setup() // create context ctx = new QOpenGLContext(); + // https://doc.qt.io/qt-6/qopenglcontext.html#globalShareContext + ctx->setShareContext(QOpenGLContext::globalShareContext()); ctx->setFormat(format); if (!ctx->create()) { qFatal("unable to create surface!"); @@ -303,8 +305,11 @@ void TextureRenderer::update() nextNode->isDirty = false; - auto img = nextNode->texture->toImage(); - emit thumbnailGenerated(nextNode->id, QPixmap::fromImage(img)); + // auto img = nextNode->texture->toImage(); + // emit thumbnailGenerated(nextNode->id, QPixmap::fromImage(img)); + + auto texId = nextNode->texture->texture(); + emit thumbnailGenerated(nextNode->id, texId, QPixmap()); } ctx->doneCurrent(); diff --git a/src/texturelab/graphics/texturerenderer.h b/src/texturelab/graphics/texturerenderer.h index e19e2139..3bf3eaa7 100644 --- a/src/texturelab/graphics/texturerenderer.h +++ b/src/texturelab/graphics/texturerenderer.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -56,7 +57,8 @@ class TextureRenderer : public QObject { QString createCodeForInputs(const TextureNodePtr& node); QString createCodeForProps(const TextureNodePtr& node); signals: - void thumbnailGenerated(const QString& nodeId, const QPixmap& pixmap); + void thumbnailGenerated(const QString& nodeId, GLuint texId, + const QPixmap& pixmap); }; // note: there's no specified fbo limit diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp index 969960f8..579f0d6c 100644 --- a/src/texturelab/widgets/graphwidget.cpp +++ b/src/texturelab/widgets/graphwidget.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include "./graphics/texturerenderer.h" @@ -173,11 +174,12 @@ void GraphWidget::setTextureRenderer(TextureRenderer* renderer) this->renderer = renderer; connect(renderer, &TextureRenderer::thumbnailGenerated, - [=](const QString& nodeId, const QPixmap& pixmap) { + [=](const QString& nodeId, GLint texId, const QPixmap& pixmap) { // scene->setNodeThumbnail(nodeId, pixmap); auto node = scene->getNodeById(nodeId); if (node) { node->setThumbnail(pixmap); + node->setTextureId(texId); } }); } \ No newline at end of file From 2059c6862e35ce62005d53002524006743ecb733 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 6 Nov 2022 23:06:15 -0500 Subject: [PATCH 049/100] move properties widget to its own folder --- src/texturelab/CMakeLists.txt | 4 ++-- src/texturelab/mainwindow.cpp | 2 +- src/texturelab/widgets/{ => properties}/propertieswidget.cpp | 4 ++-- src/texturelab/widgets/{ => properties}/propertieswidget.h | 0 4 files changed, 5 insertions(+), 5 deletions(-) rename src/texturelab/widgets/{ => properties}/propertieswidget.cpp (98%) rename src/texturelab/widgets/{ => properties}/propertieswidget.h (100%) diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index 4bc97316..355ea703 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -32,8 +32,8 @@ set(PROJECT_SOURCES ./widgets/graphwidget.cpp ./widgets/librarywidget.h ./widgets/librarywidget.cpp - ./widgets/propertieswidget.h - ./widgets/propertieswidget.cpp + ./widgets/properties/propertieswidget.h + ./widgets/properties/propertieswidget.cpp ./widgets/view2dwidget.h ./widgets/view2dwidget.cpp ./widgets/view3dwidget.h diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 95e3c868..8ac2324e 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -13,7 +13,7 @@ #include "widgets/graphwidget.h" #include "widgets/librarywidget.h" -#include "widgets/propertieswidget.h" +#include "widgets/properties/propertieswidget.h" #include "models.h" #include "project.h" diff --git a/src/texturelab/widgets/propertieswidget.cpp b/src/texturelab/widgets/properties/propertieswidget.cpp similarity index 98% rename from src/texturelab/widgets/propertieswidget.cpp rename to src/texturelab/widgets/properties/propertieswidget.cpp index 9434e003..18931fea 100644 --- a/src/texturelab/widgets/propertieswidget.cpp +++ b/src/texturelab/widgets/properties/propertieswidget.cpp @@ -1,6 +1,6 @@ #include "propertieswidget.h" -#include "../models.h" -#include "../props.h" +#include "../../models.h" +#include "../../props.h" #include #include diff --git a/src/texturelab/widgets/propertieswidget.h b/src/texturelab/widgets/properties/propertieswidget.h similarity index 100% rename from src/texturelab/widgets/propertieswidget.h rename to src/texturelab/widgets/properties/propertieswidget.h From 3ca1745b3da186701a418459c039e4b9d8872591 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Mon, 7 Nov 2022 00:17:12 -0500 Subject: [PATCH 050/100] add bool, enum and int prop widgets --- src/texturelab/CMakeLists.txt | 2 + src/texturelab/graphics/texturerenderer.cpp | 1 + src/texturelab/models.cpp | 5 +- src/texturelab/props.h | 6 +- .../widgets/properties/propertieswidget.cpp | 110 +++------ .../widgets/properties/propertieswidget.h | 22 -- .../widgets/properties/propwidgets.cpp | 230 ++++++++++++++++++ .../widgets/properties/propwidgets.h | 80 ++++++ 8 files changed, 353 insertions(+), 103 deletions(-) create mode 100644 src/texturelab/widgets/properties/propwidgets.cpp create mode 100644 src/texturelab/widgets/properties/propwidgets.h diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index 355ea703..829a3182 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -34,6 +34,8 @@ set(PROJECT_SOURCES ./widgets/librarywidget.cpp ./widgets/properties/propertieswidget.h ./widgets/properties/propertieswidget.cpp + ./widgets/properties/propwidgets.h + ./widgets/properties/propwidgets.cpp ./widgets/view2dwidget.h ./widgets/view2dwidget.cpp ./widgets/view3dwidget.h diff --git a/src/texturelab/graphics/texturerenderer.cpp b/src/texturelab/graphics/texturerenderer.cpp index cea28fdc..927d8ef0 100644 --- a/src/texturelab/graphics/texturerenderer.cpp +++ b/src/texturelab/graphics/texturerenderer.cpp @@ -396,6 +396,7 @@ void TextureRenderer::renderNode(const TextureNodePtr& node) // pass props for (auto prop : node->props) { auto propName = ("prop_" + prop->name.toStdString()).c_str(); + // qDebug() << "glsl prop: " << propName; switch (prop->type) { case PropType::Int: { auto intVal = ((IntProp*)prop)->value; diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index 2e90e1ae..918d48a1 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -190,12 +190,13 @@ BoolProp* TextureNode::addBoolProp(const QString& name, EnumProp* TextureNode::addEnumProp(const QString& name, const QString& displayName, - QList defaultVal) + QList values) { auto prop = new EnumProp(); prop->name = name; prop->displayName = displayName; - prop->values = defaultVal; + prop->values = values; + prop->index = 0; props[name] = prop; diff --git a/src/texturelab/props.h b/src/texturelab/props.h index 3945f7a5..8c811655 100644 --- a/src/texturelab/props.h +++ b/src/texturelab/props.h @@ -170,7 +170,11 @@ class EnumProp : public Prop { QList values; int index; - EnumProp() : Prop() { type = PropType::Color; } + EnumProp() : Prop() + { + type = PropType::Enum; + index = 0; + } QVariant getValue() override { return index; } diff --git a/src/texturelab/widgets/properties/propertieswidget.cpp b/src/texturelab/widgets/properties/propertieswidget.cpp index 18931fea..dffc1ff5 100644 --- a/src/texturelab/widgets/properties/propertieswidget.cpp +++ b/src/texturelab/widgets/properties/propertieswidget.cpp @@ -1,85 +1,10 @@ #include "propertieswidget.h" #include "../../models.h" #include "../../props.h" +#include "propwidgets.h" -#include -#include -#include -#include -#include #include -const int SLIDER_MAX = 1000; - -// https://stackoverflow.com/a/19007951 -FloatPropWidget::FloatPropWidget() -{ - prop = nullptr; - - auto vlayout = new QVBoxLayout(this); - this->setLayout(vlayout); - - // label - label = new QLabel(this); - label->setText(""); - vlayout->addWidget(label); - - // slider - slider = new QSlider(Qt::Horizontal, this); - slider->setMinimum(0); - slider->setMaximum(SLIDER_MAX); - slider->setSingleStep(1); - - spinbox = new QDoubleSpinBox(this); - - auto hbox = new QHBoxLayout(); - hbox->addWidget(slider); - hbox->addWidget(spinbox); - - vlayout->addLayout(hbox); - - this->setFixedHeight(80); - - connect(slider, &QSlider::valueChanged, [=](int val) { - auto percent = val / (float)SLIDER_MAX; - if (prop) { - auto range = prop->maxValue - prop->minValue; - auto finalValue = prop->minValue + range * percent; - spinbox->setValue(finalValue); - - emit valueChanged(finalValue); - } - }); - - connect(spinbox, &QDoubleSpinBox::valueChanged, [=](double val) { - if (prop) { - auto range = prop->maxValue - prop->minValue; - auto finalValue = (val / range) * SLIDER_MAX; - - slider->setValue(finalValue); - - emit valueChanged(val); - } - }); -} - -void FloatPropWidget::setProp(FloatProp* prop) -{ - label->setText(prop->displayName); - - spinbox->setMinimum(prop->minValue); - spinbox->setMaximum(prop->maxValue); - spinbox->setSingleStep(prop->step); - spinbox->setValue(prop->value); - - auto range = prop->maxValue - prop->minValue; - auto finalValue = (prop->value / range) * SLIDER_MAX; - - slider->setValue(finalValue); - - this->prop = prop; -} - PropertiesWidget::PropertiesWidget() : QWidget() { displayMode = PropertyDisplayMode::None; @@ -107,12 +32,41 @@ void PropertiesWidget::setSelectedNode(const TextureNodePtr& node) propWidgets.append(widget); connect(widget, &FloatPropWidget::valueChanged, [=](double value) { - qDebug() << "prop" << prop->name << " changed: " << value; + // qDebug() << "prop" << prop->name << " changed: " << value; // set node value node->setProp(prop->name, value); - // mark subsequent nodes as dirty!!! + project->markNodeAsDirty(node); + + emit propertyUpdated(prop->name, value); + }); + layout->addWidget(widget); + + } break; + case PropType::Int: { + auto widget = new IntPropWidget(); + widget->setProp((IntProp*)prop); + propWidgets.append(widget); + + connect(widget, &IntPropWidget::valueChanged, [=](int value) { + // qDebug() << "prop" << prop->name << " changed: " << value; + // set node value + node->setProp(prop->name, value); + project->markNodeAsDirty(node); + + emit propertyUpdated(prop->name, value); + }); + layout->addWidget(widget); + + } break; + case PropType::Enum: { + auto widget = new EnumPropWidget(); + widget->setProp((EnumProp*)prop); + propWidgets.append(widget); + + connect(widget, &EnumPropWidget::valueChanged, [=](int value) { + node->setProp(prop->name, value); project->markNodeAsDirty(node); emit propertyUpdated(prop->name, value); diff --git a/src/texturelab/widgets/properties/propertieswidget.h b/src/texturelab/widgets/properties/propertieswidget.h index 3cb04257..8bfcd168 100644 --- a/src/texturelab/widgets/properties/propertieswidget.h +++ b/src/texturelab/widgets/properties/propertieswidget.h @@ -8,30 +8,8 @@ class TextureNode; typedef QSharedPointer TextureProjectPtr; typedef QSharedPointer TextureNodePtr; -class QLabel; -class QSlider; -class QDoubleSpinBox; -class FloatProp; - enum class PropertyDisplayMode { None, Node, Frame, Comment }; -// https://stackoverflow.com/a/19007951 -class FloatPropWidget : public QWidget { - Q_OBJECT - - QLabel* label; - QSlider* slider; - QDoubleSpinBox* spinbox; - - FloatProp* prop; - -public: - FloatPropWidget(); - void setProp(FloatProp* prop); -signals: - void valueChanged(float); -}; - class PropertiesWidget : public QWidget { Q_OBJECT diff --git a/src/texturelab/widgets/properties/propwidgets.cpp b/src/texturelab/widgets/properties/propwidgets.cpp new file mode 100644 index 00000000..d00dedcf --- /dev/null +++ b/src/texturelab/widgets/properties/propwidgets.cpp @@ -0,0 +1,230 @@ +#include "propwidgets.h" +#include "../../models.h" +#include "../../props.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +const int SLIDER_MAX = 1000; + +// FLOAT PROP WIDGET +// https://stackoverflow.com/a/19007951 +FloatPropWidget::FloatPropWidget() +{ + prop = nullptr; + + auto vlayout = new QVBoxLayout(this); + this->setLayout(vlayout); + + // label + label = new QLabel(this); + label->setText(""); + vlayout->addWidget(label); + + // slider + slider = new QSlider(Qt::Horizontal, this); + slider->setMinimum(0); + slider->setMaximum(SLIDER_MAX); + slider->setSingleStep(1); + + spinbox = new QDoubleSpinBox(this); + + auto hbox = new QHBoxLayout(); + hbox->addWidget(slider); + hbox->addWidget(spinbox); + + vlayout->addLayout(hbox); + + this->setFixedHeight(80); + + connect(slider, &QSlider::valueChanged, [=](int val) { + auto percent = val / (float)SLIDER_MAX; + if (prop) { + auto range = prop->maxValue - prop->minValue; + auto finalValue = prop->minValue + range * percent; + spinbox->setValue(finalValue); + + emit valueChanged(finalValue); + } + }); + + connect(spinbox, &QDoubleSpinBox::valueChanged, [=](double val) { + if (prop) { + auto range = prop->maxValue - prop->minValue; + auto finalValue = (val / range) * SLIDER_MAX; + + slider->setValue(finalValue); + + emit valueChanged(val); + } + }); +} + +void FloatPropWidget::setProp(FloatProp* prop) +{ + label->setText(prop->displayName); + + spinbox->setMinimum(prop->minValue); + spinbox->setMaximum(prop->maxValue); + spinbox->setSingleStep(prop->step); + spinbox->setValue(prop->value); + + auto range = prop->maxValue - prop->minValue; + auto finalValue = (prop->value / range) * SLIDER_MAX; + + slider->setValue(finalValue); + + this->prop = prop; +} + +// INT PROP WIDGET +// https://stackoverflow.com/a/19007951 +IntPropWidget::IntPropWidget() +{ + prop = nullptr; + + auto vlayout = new QVBoxLayout(this); + this->setLayout(vlayout); + + // label + label = new QLabel(this); + label->setText(""); + vlayout->addWidget(label); + + // slider + slider = new QSlider(Qt::Horizontal, this); + slider->setMinimum(0); + slider->setMaximum(SLIDER_MAX); + slider->setSingleStep(1); + + spinbox = new QSpinBox(this); + + auto hbox = new QHBoxLayout(); + hbox->addWidget(slider); + hbox->addWidget(spinbox); + + vlayout->addLayout(hbox); + + this->setFixedHeight(80); + + connect(slider, &QSlider::valueChanged, [=](int val) { + auto percent = val / (float)SLIDER_MAX; + if (prop) { + spinbox->setValue(val); + + emit valueChanged(val); + } + }); + + connect(spinbox, &QSpinBox::valueChanged, [=](int val) { + if (prop) { + slider->setValue(val); + + emit valueChanged(val); + } + }); +} + +void IntPropWidget::setProp(IntProp* prop) +{ + label->setText(prop->displayName); + + spinbox->setMinimum(prop->minValue); + spinbox->setMaximum(prop->maxValue); + spinbox->setSingleStep(prop->step); + spinbox->setValue(prop->value); + + slider->setValue(prop->value); + slider->setMinimum(prop->minValue); + slider->setMaximum(prop->maxValue); + slider->setSingleStep(prop->step); + + this->prop = prop; +} + +// ENUM PROP WIDGET +// https://stackoverflow.com/a/19007951 +EnumPropWidget::EnumPropWidget() +{ + prop = nullptr; + + auto vlayout = new QVBoxLayout(this); + this->setLayout(vlayout); + + // label + label = new QLabel(this); + label->setText(""); + vlayout->addWidget(label); + + // slider + comboBox = new QComboBox(this); + vlayout->addWidget(comboBox); + + this->setFixedHeight(80); + + connect(comboBox, &QComboBox::currentIndexChanged, + [=](int val) { emit valueChanged(val); }); +} + +void EnumPropWidget::setProp(EnumProp* prop) +{ + label->setText(prop->displayName); + + for (auto item : prop->values) { + comboBox->addItem(item); + } + + comboBox->setCurrentIndex(prop->index); + + this->prop = prop; +} + +// BOOL PROP WIDGET +// https://stackoverflow.com/a/19007951 +BoolPropWidget::BoolPropWidget() +{ + prop = nullptr; + + auto vlayout = new QVBoxLayout(this); + this->setLayout(vlayout); + + // label + label = new QLabel(this); + label->setText(""); + vlayout->addWidget(label); + + // slider + button = new QPushButton(this); + vlayout->addWidget(button); + + this->setFixedHeight(80); + + connect(button, &QPushButton::pressed, [=]() { + setValue(!this->value); + emit valueChanged(this->value); + }); +} + +void BoolPropWidget::setProp(BoolProp* prop) +{ + label->setText(prop->displayName); + + setValue(prop->value); +} + +void BoolPropWidget::setValue(bool value) +{ + this->value = value; + if (value) { + button->setText("True"); + } + else { + button->setText("False"); + } +} \ No newline at end of file diff --git a/src/texturelab/widgets/properties/propwidgets.h b/src/texturelab/widgets/properties/propwidgets.h new file mode 100644 index 00000000..3aea0dcf --- /dev/null +++ b/src/texturelab/widgets/properties/propwidgets.h @@ -0,0 +1,80 @@ +#include +#include + +class QLabel; +class QSlider; +class QDoubleSpinBox; +class QSpinBox; +class QComboBox; +class QPushButton; + +class FloatProp; +class IntProp; +class EnumProp; +class BoolProp; + +// https://stackoverflow.com/a/19007951 +class FloatPropWidget : public QWidget { + Q_OBJECT + + QLabel* label; + QSlider* slider; + QDoubleSpinBox* spinbox; + + FloatProp* prop; + +public: + FloatPropWidget(); + void setProp(FloatProp* prop); +signals: + void valueChanged(float); +}; + +class IntPropWidget : public QWidget { + Q_OBJECT + + QLabel* label; + QSlider* slider; + QSpinBox* spinbox; + + IntProp* prop; + +public: + IntPropWidget(); + void setProp(IntProp* prop); +signals: + void valueChanged(long); +}; + +class EnumPropWidget : public QWidget { + Q_OBJECT + + QLabel* label; + QComboBox* comboBox; + + EnumProp* prop; + +public: + EnumPropWidget(); + void setProp(EnumProp* prop); +signals: + void valueChanged(int); +}; + +class BoolPropWidget : public QWidget { + Q_OBJECT + + QLabel* label; + QPushButton* button; + + BoolProp* prop; + bool value; + + void setValue(bool value); + +public: + BoolPropWidget(); + void setProp(BoolProp* prop); +signals: + void valueChanged(bool); +}; \ No newline at end of file From 34dc1aac72e3c7e01d8d506a3c1a034e4da7249f Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Mon, 7 Nov 2022 00:17:23 -0500 Subject: [PATCH 051/100] add normal and circle node --- src/texturelab/libraries/library.cpp | 2 + src/texturelab/libraries/libv2.h | 166 +++++++++++++++++++++++++-- 2 files changed, 161 insertions(+), 7 deletions(-) diff --git a/src/texturelab/libraries/library.cpp b/src/texturelab/libraries/library.cpp index 0aafa6ed..64ad01d5 100644 --- a/src/texturelab/libraries/library.cpp +++ b/src/texturelab/libraries/library.cpp @@ -45,9 +45,11 @@ Library* createLibraryV2() { auto lib = new Library(); lib->addNode("polygon", "Polygon", ":nodes/bevel.png"); + lib->addNode("circle", "Circle", ":nodes/bevel.png"); lib->addNode("color", "Color", ":nodes/color.png"); lib->addNode("blend", "Blend", ":nodes/blend.png"); lib->addNode("output", "Output", ":nodes/output.png"); + lib->addNode("normalmap", "Normal Map", ":nodes/output.png"); return lib; } \ No newline at end of file diff --git a/src/texturelab/libraries/libv2.h b/src/texturelab/libraries/libv2.h index 3d146232..1359549c 100644 --- a/src/texturelab/libraries/libv2.h +++ b/src/texturelab/libraries/libv2.h @@ -2,23 +2,30 @@ #include "../models.h" -class PolygonNode : public TextureNode { +class CircleNode : public TextureNode { public: virtual void init() override { - this->title = "Polygon"; + this->title = "Circle"; this->addFloatProp("radius", "Radius", 0.2, 0, 1, 0.01); + this->addEnumProp("color_gen", "Color Generation", + {"Flat", "Linear", "Exponential"}); - // todo: add props this->setShaderSource(R""""( vec4 process(vec2 uv) { - //float prop_radius = 0.35; - float dist = distance(uv, vec2(0.5)); if( dist <= prop_radius) { - return vec4(vec3(1.0), 1.0); + if (prop_color_gen==0) + return vec4(vec3(1.0), 1.0); + else if (prop_color_gen==1) + return vec4(vec3(1.0 - dist / prop_radius), 1.0); + else if (prop_color_gen==2) + { + float val = dist / prop_radius; + return vec4(vec3(1.0 - val * val), 1.0); + } } @@ -28,6 +35,48 @@ class PolygonNode : public TextureNode { } }; +class PolygonNode : public TextureNode { +public: + virtual void init() override + { + this->title = "Polygon"; + + this->addFloatProp("radius", "Radius", 0.2, 0, 1, 0.01); + this->addFloatProp("angle", "Angle", 0, 0, 360, 0.1); + this->addIntProp("sides", "Sides", 5, 0, 20, 1); + this->addFloatProp("gradient", "Gradient", 0, 0, 1.0, 0.01); + + // todo: add props + this->setShaderSource(R""""( + #define PI 3.14159265359 + #define TWO_PI 6.28318530718 + + float linearstep(float a, float b, float t) + { + if (t <= a) return 0.0; + if (t >= b) return 1.0; + + return (t-a)/(b-a); + } + + vec4 process(vec2 uv) + { + uv = uv *2.-1.; + + // Angle and radius from the current pixel + float a = atan(uv.x,uv.y)+radians(prop_angle); + float r = TWO_PI/float(prop_sides); + + float d = cos(floor(.5+a/r)*r-a)*length(uv) / prop_radius; + + vec3 color = vec3(1.0-linearstep(0.8-prop_gradient,0.8,d)); + + return vec4(color, 1.0); + } + )""""); + } +}; + class ColorNode : public TextureNode { public: virtual void init() override @@ -58,11 +107,114 @@ class BlendNode : public TextureNode { this->addInput("colorB"); this->addInput("opacity"); + this->addEnumProp("type", "Type", + {"Multiply", "Add", "Subtract", "Divide", + // "Add Sub", + "Max", "Min", "Switch", "Overlay", "Screen"}); + this->addFloatProp("opacity", "Opacity", 1.0, 0.0, 1.0, 0.01); + // todo: add props this->setShaderSource(R""""( + float screen(float fg, float bg) { + float res = (1.0 - fg) * (1.0 - bg); + return 1.0 - res; + } vec4 process(vec2 uv) { - return vec4(1,1,1,1); + float finalOpacity = prop_opacity; + if (opacity_connected) + finalOpacity *= texture(opacity, uv).r; + + vec4 colA = texture(colorA,uv); + vec4 colB = texture(colorB,uv); + vec4 col = vec4(1.0); + + if (prop_type==0){ // multiply + col.rgb = colA.rgb * colB.rgb; + } + if (prop_type==1) // add + col.rgb = colA.rgb + colB.rgb; + if (prop_type==2) // subtract + col.rgb = colB.rgb - colA.rgb; + if (prop_type==3) // divide + col.rgb = colB.rgb / colA.rgb; + // if (prop_type==4) {// add sub + // if (colA.r > 0.5) col.r = colB.r + colA.r; else col.r = colB.r - colA.r; + // if (colA.g > 0.5) col.g = colB.g + colA.g; else col.g = colB.g - colA.g; + // if (colA.b > 0.5) col.b = colB.b + colA.b; else col.b = colB.b - colA.b; + // } + if (prop_type==4) { // max + col.rgb = max(colA.rgb, colB.rgb); + } + if (prop_type==5) { // min + col.rgb = min(colA.rgb, colB.rgb); + } + if (prop_type==6) { // switch + col.rgb = colA.rgb; + } + if (prop_type==7) { // overlay + if (colB.r < 0.5) col.r = colB.r * colA.r; else col.r = screen(colB.r, colA.r); + if (colB.g < 0.5) col.g = colB.g * colA.g; else col.g = screen(colB.g, colA.g); + if (colB.b < 0.5) col.b = colB.b * colA.b; else col.b = screen(colB.b, colA.b); + } + if (prop_type==8) { // screen + col.r = screen(colA.r, colB.r); + col.g = screen(colA.g, colB.g); + col.b = screen(colA.b, colB.b); + } + + // apply opacity + col.rgb = mix(colB.rgb, col.rgb, vec3(finalOpacity)); + + return col; + } + )""""); + } +}; + +class NormalMapNode : public TextureNode { +public: + virtual void init() override + { + this->title = "Normal Map"; + + this->addInput("height"); + + this->addFloatProp("strength", "Strength", 1, -2.0, 2.0, 0.05); + this->addIntProp("range", "Range", 1, 1, 20, 1); + this->addBoolProp("res_ind", "Resolution Independent", false); + + this->setShaderSource(R""""( + vec4 process(vec2 uv) + { + vec2 step = (vec2(1.0, 1.0) / _textureSize) * float(prop_range); + if (prop_res_ind) + step = (vec2(1.0, 1.0) / 1024.0) * float(prop_range); + float strength = prop_strength * 0.1; + + // center point + float d0 = abs(texture(height, uv + vec2(0.0, 0.0)).r) * strength / 2.0; + + // sample horizontally + float d1 = abs(texture(height, uv + vec2(step.x, 0.0)).r) * strength / 2.0; + float d2 = abs(texture(height, uv + vec2(-step.x, 0.0)).r) * strength / 2.0; + + // sample vertically + float d3 = abs(texture(height, uv + vec2(0.0, step.y)).r) * strength / 2.0; + float d4 = abs(texture(height, uv + vec2(0.0, -step.y)).r) * strength / 2.0; + + // find diff horizontally and average + float dx = ((d2 - d0) + (d0 - d1)) * 0.5; + + // find diff vertically and average + float dy = ((d4 - d0) + (d0 - d3)) * 0.5; + + vec3 dvx = vec3(step.x, 0.0 , d1-d0); + vec3 dvy = vec3(0.0 , step.y, d3-d0); + vec3 normal = normalize(cross(dvx, dvy)); + vec3 final = normal.xyz * 0.5 + 0.5; + + return vec4(final, 1.0); } )""""); } From b9455e22933edf1c004a5bfae504547ad1294cb1 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 20 Nov 2022 14:50:14 -0500 Subject: [PATCH 052/100] add 2d node preview --- src/nodegraph/nodegraph.cpp | 1 - src/texturelab/CMakeLists.txt | 9 +- src/texturelab/mainwindow.cpp | 14 +- src/texturelab/widgets/view2dwidget.cpp | 253 ++++++++++++++++++++++++ src/texturelab/widgets/view2dwidget.h | 80 +++++++- 5 files changed, 348 insertions(+), 9 deletions(-) diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index cd8de29e..cb995922 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -72,7 +72,6 @@ NodeGraph::NodeGraph(QWidget* parent) : QGraphicsView(parent) void NodeGraph::setNodeGraphScene(const ScenePtr& scene) { - // properly cleanup old scene if (!!this->_scene) { this->setScene(nullptr); diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index 829a3182..d4fb92df 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -12,7 +12,7 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets OpenGL) -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets OpenGL) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets OpenGLWidgets) set(PROJECT_SOURCES ./main.cpp @@ -61,7 +61,12 @@ else() endif() # note: openglwidgets is qt6 only -target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::OpenGL qtadvanceddocking nodegraph) +target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets + Qt${QT_VERSION_MAJOR}::OpenGL + Qt${QT_VERSION_MAJOR}::OpenGLWidgets + qtadvanceddocking + nodegraph) + target_include_directories(texturelab PUBLIC ../ads/src ../nodegraph diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index 8ac2324e..a5506656 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -14,6 +14,7 @@ #include "widgets/graphwidget.h" #include "widgets/librarywidget.h" #include "widgets/properties/propertieswidget.h" +#include "widgets/view2dwidget.h" #include "models.h" #include "project.h" @@ -36,10 +37,14 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) // setup callbacks connect(this->graphWidget, &GraphWidget::nodeSelectionChanged, [this](const TextureNodePtr& node) { - if (!!node) + if (!!node) { this->propWidget->setSelectedNode(node); - else + this->view2DWidget->setSelectedNode(node); + } + else { this->propWidget->clearSelection(); + this->view2DWidget->clearSelection(); + } }); connect(this->propWidget, &PropertiesWidget::propertyUpdated, @@ -47,6 +52,8 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) if (this->renderer && !!this->project) { this->renderer->update(); } + + this->view2DWidget->reRenderNode(); }); // set default empty project @@ -150,10 +157,11 @@ void MainWindow::setupDocks() // graph goes in the center this->graphWidget = new GraphWidget(); + this->view2DWidget = new View2DWidget(); auto graphArea = addDock("Graph", ads::CenterDockWidgetArea, graphWidget, nullptr); auto leftArea = addDock("2D View", ads::LeftDockWidgetArea, - new QWidget(this), graphArea); + this->view2DWidget, graphArea); this->propWidget = new PropertiesWidget(); auto rightArea = addDock("Properties", ads::RightDockWidgetArea, diff --git a/src/texturelab/widgets/view2dwidget.cpp b/src/texturelab/widgets/view2dwidget.cpp index e69de29b..e43d22e9 100644 --- a/src/texturelab/widgets/view2dwidget.cpp +++ b/src/texturelab/widgets/view2dwidget.cpp @@ -0,0 +1,253 @@ +#include "view2dwidget.h" +#include + +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include + +#include "./models.h" +#include "./utils.h" + +const QColor BackgroundColor(53, 53, 53); +const QColor FineGridColor(60, 60, 60); +const QColor CoarseGridColor(25, 25, 25); + +View2DWidget::View2DWidget() : QMainWindow() +{ + graph = new View2DGraph(this); + this->setCentralWidget(graph); +} + +void View2DWidget::setSelectedNode(const TextureNodePtr& node) +{ + this->graph->setSelectedNode(node); +} + +void View2DWidget::clearSelection() {} + +void View2DWidget::reRenderNode() { this->graph->scene()->invalidate(); } + +View2DWidget::~View2DWidget() { delete graph; } + +// GRAPH +View2DGraph::View2DGraph(QWidget* parent) : QGraphicsView(parent) +{ + // https://doc.qt.io/qt-6.2/graphicsview.html#opengl-rendering + auto gl = new QOpenGLWidget(); + QSurfaceFormat format; + format.setSamples(4); + gl->setFormat(format); + this->setViewport(gl); + + setDragMode(QGraphicsView::ScrollHandDrag); + setRenderHint(QPainter::Antialiasing); + + setBackgroundBrush(QColor(53, 53, 53)); + + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + setTransformationAnchor(QGraphicsView::AnchorUnderMouse); + + setViewportUpdateMode(QGraphicsView::FullViewportUpdate); + + _scene = new QGraphicsScene(this); + this->setScene(_scene); + + preview = new NodePreviewGraphicsItem(); + preview->hide(); + this->_scene->addItem(preview); +} + +// view manipulation +void View2DGraph::wheelEvent(QWheelEvent* event) +{ + QPoint delta = event->angleDelta(); + + if (delta.y() == 0) { + event->ignore(); + return; + } + + double const d = delta.y() / std::abs(delta.y()); + + if (d > 0.0) + scaleUp(); + else + scaleDown(); +}; + +void View2DGraph::scaleUp() +{ + double const step = 1.2; + double const factor = std::pow(step, 1.0); + + QTransform t = transform(); + + if (t.m11() > 2.0) + return; + + scale(factor, factor); +} + +void View2DGraph::scaleDown() +{ + double const step = 1.2; + double const factor = std::pow(step, -1.0); + + scale(factor, factor); +} + +// void View2DGraph::keyPressEvent(QKeyEvent* event){}; +// void View2DGraph::keyReleaseEvent(QKeyEvent* event){}; +void View2DGraph::mousePressEvent(QMouseEvent* event) +{ + if (event->button() == Qt::MiddleButton && + scene()->mouseGrabberItem() == nullptr) { + _clickPos = mapToScene(event->pos()); + setDragMode(QGraphicsView::NoDrag); + } + QGraphicsView::mousePressEvent(event); +} + +void View2DGraph::mouseMoveEvent(QMouseEvent* event) +{ + + if (event->buttons() == Qt::MiddleButton) { + QPointF difference = _clickPos - mapToScene(event->pos()); + setSceneRect(sceneRect().translated(difference.x(), difference.y())); + } + QGraphicsView::mouseMoveEvent(event); +} + +void View2DGraph::mouseReleaseEvent(QMouseEvent* event) +{ + if (event->button() == Qt::MiddleButton) { + } + QGraphicsView::mouseReleaseEvent(event); +} + +void View2DGraph::setSelectedNode(const TextureNodePtr& node) +{ + this->preview->setNode(node); + this->scene()->invalidate(); +}; + +void View2DGraph::clearSelection(){}; + +void View2DGraph::drawBackground(QPainter* painter, const QRectF& r) +{ + auto type = painter->paintEngine()->type(); + if (type != QPaintEngine::OpenGL && type != QPaintEngine::OpenGL2) { + qWarning() << "background paint engine needs to be OPENGL!"; + // return; + } + + QGraphicsView::drawBackground(painter, r); + painter->setRenderHint(QPainter::Antialiasing); + + auto drawGrid = [&](double gridStep) { + QRect windowRect = rect(); + QPointF tl = mapToScene(windowRect.topLeft()); + QPointF br = mapToScene(windowRect.bottomRight()); + + double left = std::floor(tl.x() / gridStep - 0.5); + double right = std::floor(br.x() / gridStep + 1.0); + double bottom = std::floor(tl.y() / gridStep - 0.5); + double top = std::floor(br.y() / gridStep + 1.0); + + // vertical lines + for (int xi = int(left); xi <= int(right); ++xi) { + QLineF line(xi * gridStep, bottom * gridStep, xi * gridStep, + top * gridStep); + + painter->drawLine(line); + } + + // horizontal lines + for (int yi = int(bottom); yi <= int(top); ++yi) { + QLineF line(left * gridStep, yi * gridStep, right * gridStep, + yi * gridStep); + painter->drawLine(line); + } + }; + + QBrush bBrush = backgroundBrush(); + + QPen pfine(FineGridColor, 1.0); + + painter->setPen(pfine); + drawGrid(15); + + QPen p(CoarseGridColor, 1.0); + + painter->setPen(p); + drawGrid(150); +}; + +// NODE PREVIEW +NodePreviewGraphicsItem::NodePreviewGraphicsItem() {} + +QRectF NodePreviewGraphicsItem::boundingRect() const +{ + return QRectF(0, 0, 1000, 1000); +} + +void NodePreviewGraphicsItem::setNode(const TextureNodePtr& node) +{ + this->node = node; + if (!!node) + this->show(); +} +void NodePreviewGraphicsItem::clearNode() { this->node.reset(); } + +void NodePreviewGraphicsItem::paint(QPainter* painter, + QStyleOptionGraphicsItem const* option, + QWidget* widget) +{ + // // https://doc.qt.io/qt-5/qpainter.html#beginNativePainting + // https://github.com/liff-engineer/WeeklyARTS/blob/d8605aa3bfb2641d2a13621262024a1edff7b661/2018_9_4/Mixin2D%263DinQt.md + auto type = painter->paintEngine()->type(); + if (type != QPaintEngine::OpenGL && type != QPaintEngine::OpenGL2) { + qWarning() << "Paint engine needs to be OPENGL!"; + // return; + } + + auto rect = boundingRect(); + + if (!!node) { + // // https://doc.qt.io/qt-5/qpainter.html#beginNativePainting + painter->beginNativePainting(); + + // glColor4f(1.0f, 0.0f, 0.0f, 1.0); + glEnable(GL_TEXTURE_2D); + + glActiveTexture(0); + glBindTexture(GL_TEXTURE_2D, node->texture->texture()); + glBegin(GL_QUADS); + glTexCoord2f(0, 0); + glVertex2f(0, 0); + + glTexCoord2f(1, 0); + glVertex2f(rect.width(), 0); + + glTexCoord2f(1, 1); + glVertex2f(rect.width(), rect.height()); + + glTexCoord2f(0, 1); + glVertex2f(0, rect.height()); + glEnd(); + + painter->endNativePainting(); + } +} \ No newline at end of file diff --git a/src/texturelab/widgets/view2dwidget.h b/src/texturelab/widgets/view2dwidget.h index 0101406a..f527433e 100644 --- a/src/texturelab/widgets/view2dwidget.h +++ b/src/texturelab/widgets/view2dwidget.h @@ -1,9 +1,83 @@ #pragma once -#include +#include +#include +#include +#include -class View2DWidget : public QFrame -{ +class QWidget; +class QWheelEvent; +class QKeyEvent; +class QMouseEvent; +class QPainter; +class QWheelEvent; +class QShowEvent; +class QGraphicsScene; +class QStyleOptionGraphicsItem; + +class TextureProject; +class TextureNode; +typedef QSharedPointer TextureProjectPtr; +typedef QSharedPointer TextureNodePtr; +class View2DGraph; + +class NodePreviewGraphicsItem; + +class View2DWidget : public QMainWindow { public: View2DWidget(); + + void setSelectedNode(const TextureNodePtr& node); + void clearSelection(); + + void reRenderNode(); + + View2DGraph* graph = nullptr; + + virtual ~View2DWidget(); +}; + +class View2DGraph : public QGraphicsView { + Q_OBJECT + + TextureNodePtr node; + QGraphicsScene* _scene; + +public: + View2DGraph(QWidget* parent); + + void scaleUp(); + void scaleDown(); + + void setSelectedNode(const TextureNodePtr& node); + void clearSelection(); + +protected: + // view manipulation + void wheelEvent(QWheelEvent* event) override; + // void keyPressEvent(QKeyEvent* event) override; + // void keyReleaseEvent(QKeyEvent* event) override; + void mousePressEvent(QMouseEvent* event) override; + void mouseMoveEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; + + void drawBackground(QPainter* painter, const QRectF& r) override; + +private: + QPointF _clickPos; + NodePreviewGraphicsItem* preview = nullptr; +}; + +class NodePreviewGraphicsItem : public QGraphicsItem { + TextureNodePtr node; + +public: + NodePreviewGraphicsItem(); + void setNode(const TextureNodePtr& node); + void clearNode(); + QRectF boundingRect() const override; + +protected: + void paint(QPainter* painter, QStyleOptionGraphicsItem const* option, + QWidget* widget = 0) override; }; \ No newline at end of file From 11f4d2937bc4a9661d0945efd0dea7fe33a1638f Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 20 Nov 2022 15:28:32 -0500 Subject: [PATCH 053/100] setup preview on double click - 2d preview refreshes when selected node texture updates --- src/nodegraph/nodegraph.cpp | 31 +++++++++++++++++++++++++ src/nodegraph/nodegraph.h | 6 ++++- src/texturelab/mainwindow.cpp | 15 ++++++++++-- src/texturelab/widgets/graphwidget.cpp | 16 +++++++++++++ src/texturelab/widgets/graphwidget.h | 1 + src/texturelab/widgets/view2dwidget.cpp | 12 ++++++++++ src/texturelab/widgets/view2dwidget.h | 5 ++++ 7 files changed, 83 insertions(+), 3 deletions(-) diff --git a/src/nodegraph/nodegraph.cpp b/src/nodegraph/nodegraph.cpp index cb995922..c44ec910 100644 --- a/src/nodegraph/nodegraph.cpp +++ b/src/nodegraph/nodegraph.cpp @@ -187,6 +187,24 @@ void NodeGraph::mouseReleaseEvent(QMouseEvent* event) QGraphicsView::mouseReleaseEvent(event); } +void NodeGraph::mouseDoubleClickEvent(QMouseEvent* event) +{ + if (event->button() == Qt::LeftButton) { + + auto scenePos = this->mapToScene(event->pos()); + + // node: stripped const from returned node + auto node = (Node*)getNodeAtScenePos(scenePos.x(), scenePos.y()); + if (node) { + emit nodeDoubleClicked(node->sharedFromThis()); + } + else { + emit nodeDoubleClicked(nullptr); + } + } + QGraphicsView::mouseDoubleClickEvent(event); +} + void NodeGraph::drawBackground(QPainter* painter, const QRectF& r) { auto type = painter->paintEngine()->type(); @@ -462,6 +480,19 @@ const Port* NodeGraph::getPortAtScenePos(float x, float y) const return nullptr; } +// get top-most node +const Node* NodeGraph::getNodeAtScenePos(float x, float y) const +{ + auto items = this->_scene->items(QPointF(x, y)); + + for (auto item : items) { + if (item && item->type() == (int)SceneItemType::Node) + return (const Node*)item; + } + + return nullptr; +} + void NodeGraph::handleSelectionChange() { auto selected = this->_scene->selectedItems(); diff --git a/src/nodegraph/nodegraph.h b/src/nodegraph/nodegraph.h index 6c1101f2..b25d062b 100644 --- a/src/nodegraph/nodegraph.h +++ b/src/nodegraph/nodegraph.h @@ -65,6 +65,8 @@ class NodeGraph : public QGraphicsView { void mouseReleaseEvent(QMouseEvent* event) override; + void mouseDoubleClickEvent(QMouseEvent* event) override; + void drawBackground(QPainter* painter, const QRectF& r) override; void showEvent(QShowEvent* event) override; @@ -94,6 +96,7 @@ class NodeGraph : public QGraphicsView { void dropEvent(QDropEvent* event); const Port* getPortAtScenePos(float x, float y) const; + const Node* getNodeAtScenePos(float x, float y) const; void handleSelectionChange(); private: @@ -112,7 +115,8 @@ class NodeGraph : public QGraphicsView { void nodeRemoved(NodePtr node); // null nodeptr means no active node selected - void nodeSelectionChanged(NodePtr node); + void nodeSelectionChanged(const NodePtr& node); + void nodeDoubleClicked(const NodePtr& node); void itemsDeleted(QList nodes, QList cons); }; diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index a5506656..c06dd177 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -34,15 +34,25 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) this->setupDocks(); - // setup callbacks + // setup callbacks for the widgets that are created once connect(this->graphWidget, &GraphWidget::nodeSelectionChanged, [this](const TextureNodePtr& node) { if (!!node) { this->propWidget->setSelectedNode(node); - this->view2DWidget->setSelectedNode(node); + // this->view2DWidget->setSelectedNode(node); } else { this->propWidget->clearSelection(); + // this->view2DWidget->clearSelection(); + } + }); + + connect(this->graphWidget, &GraphWidget::nodeDoubleClicked, + [this](const TextureNodePtr& node) { + if (!!node) { + this->view2DWidget->setSelectedNode(node); + } + else { this->view2DWidget->clearSelection(); } }); @@ -77,6 +87,7 @@ void MainWindow::setProject(TextureProjectPtr project) renderer = new TextureRenderer(); renderer->setProject(project); this->graphWidget->setTextureRenderer(renderer); + this->view2DWidget->setTextureRenderer(renderer); renderer->update(); } diff --git a/src/texturelab/widgets/graphwidget.cpp b/src/texturelab/widgets/graphwidget.cpp index 579f0d6c..ba97bc57 100644 --- a/src/texturelab/widgets/graphwidget.cpp +++ b/src/texturelab/widgets/graphwidget.cpp @@ -76,6 +76,22 @@ GraphWidget::GraphWidget() : QMainWindow(nullptr) } }); + connect(graph, &nodegraph::NodeGraph::nodeDoubleClicked, + [=](nodegraph::NodePtr node) { + if (!!node) { + // qDebug() << "NODE DOUBLE CLICKED"; + + if (!!project) { + auto texNode = project->getNodeById(node->id()); + emit nodeDoubleClicked(texNode); + } + } + else { + // qDebug() << "NODE DESELECTED"; + emit nodeDoubleClicked(TextureNodePtr(nullptr)); + } + }); + // connect(graph, &nodegraph::NodeGraph::nodeAdded, // [=](nodegraph::NodePtr node) { qDebug() << "NODE ADDED"; }); diff --git a/src/texturelab/widgets/graphwidget.h b/src/texturelab/widgets/graphwidget.h index 8e3c8b50..293929bf 100644 --- a/src/texturelab/widgets/graphwidget.h +++ b/src/texturelab/widgets/graphwidget.h @@ -45,4 +45,5 @@ class GraphWidget : public QMainWindow { signals: void nodeSelectionChanged(const TextureNodePtr& node); + void nodeDoubleClicked(const TextureNodePtr& node); }; \ No newline at end of file diff --git a/src/texturelab/widgets/view2dwidget.cpp b/src/texturelab/widgets/view2dwidget.cpp index e43d22e9..6e8b0a4c 100644 --- a/src/texturelab/widgets/view2dwidget.cpp +++ b/src/texturelab/widgets/view2dwidget.cpp @@ -15,6 +15,7 @@ #include #include +#include "./graphics/texturerenderer.h" #include "./models.h" #include "./utils.h" @@ -30,6 +31,7 @@ View2DWidget::View2DWidget() : QMainWindow() void View2DWidget::setSelectedNode(const TextureNodePtr& node) { + this->node = node; this->graph->setSelectedNode(node); } @@ -37,6 +39,16 @@ void View2DWidget::clearSelection() {} void View2DWidget::reRenderNode() { this->graph->scene()->invalidate(); } +void View2DWidget::setTextureRenderer(TextureRenderer* renderer) +{ + connect(renderer, &TextureRenderer::thumbnailGenerated, + [=](const QString& nodeId, GLint texId, const QPixmap& pixmap) { + if (!!node && node->id == nodeId) { + this->graph->scene()->invalidate(); + } + }); +} + View2DWidget::~View2DWidget() { delete graph; } // GRAPH diff --git a/src/texturelab/widgets/view2dwidget.h b/src/texturelab/widgets/view2dwidget.h index f527433e..87a0250c 100644 --- a/src/texturelab/widgets/view2dwidget.h +++ b/src/texturelab/widgets/view2dwidget.h @@ -14,6 +14,7 @@ class QWheelEvent; class QShowEvent; class QGraphicsScene; class QStyleOptionGraphicsItem; +class TextureRenderer; class TextureProject; class TextureNode; @@ -24,12 +25,16 @@ class View2DGraph; class NodePreviewGraphicsItem; class View2DWidget : public QMainWindow { + TextureNodePtr node; + public: View2DWidget(); void setSelectedNode(const TextureNodePtr& node); void clearSelection(); + void setTextureRenderer(TextureRenderer* renderer); + void reRenderNode(); View2DGraph* graph = nullptr; From f974e21c116b89ea6734e42aea01ab5ed3cc8292 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 20 Nov 2022 17:57:54 -0500 Subject: [PATCH 054/100] zoom viewer to preview item --- src/texturelab/widgets/view2dwidget.cpp | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/texturelab/widgets/view2dwidget.cpp b/src/texturelab/widgets/view2dwidget.cpp index 6e8b0a4c..3f435d21 100644 --- a/src/texturelab/widgets/view2dwidget.cpp +++ b/src/texturelab/widgets/view2dwidget.cpp @@ -64,7 +64,7 @@ View2DGraph::View2DGraph(QWidget* parent) : QGraphicsView(parent) setDragMode(QGraphicsView::ScrollHandDrag); setRenderHint(QPainter::Antialiasing); - setBackgroundBrush(QColor(53, 53, 53)); + setBackgroundBrush(QColor(33, 33, 33)); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -77,8 +77,10 @@ View2DGraph::View2DGraph(QWidget* parent) : QGraphicsView(parent) this->setScene(_scene); preview = new NodePreviewGraphicsItem(); - preview->hide(); this->_scene->addItem(preview); + // this->fitInView(preview, Qt::KeepAspectRatio); + scale(0.3, 0.3); + preview->hide(); } // view manipulation @@ -196,15 +198,14 @@ void View2DGraph::drawBackground(QPainter* painter, const QRectF& r) QBrush bBrush = backgroundBrush(); - QPen pfine(FineGridColor, 1.0); + // QPen pfine(FineGridColor, 1.0); - painter->setPen(pfine); - drawGrid(15); + // painter->setPen(pfine); + // drawGrid(15); QPen p(CoarseGridColor, 1.0); - painter->setPen(p); - drawGrid(150); + drawGrid(1000); }; // NODE PREVIEW From 280b2a5c32d43010bafb4bed257d009eef9858c7 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 27 Nov 2022 21:44:59 -0500 Subject: [PATCH 055/100] add basic viewer --- CMakeLists.txt | 5 +- src/nodegraph/CMakeLists.txt | 1 + src/viewer3d/CMakeLists.txt | 79 ++++++++++++ src/viewer3d/assets.qrc | 6 + src/viewer3d/main.cpp | 41 ++++++ src/viewer3d/viewer3d.cpp | 234 +++++++++++++++++++++++++++++++++++ src/viewer3d/viewer3d.h | 49 ++++++++ 7 files changed, 414 insertions(+), 1 deletion(-) create mode 100644 src/viewer3d/CMakeLists.txt create mode 100644 src/viewer3d/assets.qrc create mode 100644 src/viewer3d/main.cpp create mode 100644 src/viewer3d/viewer3d.cpp create mode 100644 src/viewer3d/viewer3d.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d335566..18e20a24 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,9 +6,12 @@ project(qtcompleteapp VERSION 0.1 LANGUAGES CXX) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/ads) set_target_properties(qtadvanceddocking PROPERTIES BUILD_STATIC TRUE) -# Advanced Docking System +# Node Graph add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/nodegraph) +# 3D Viewer +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/viewer3d) + # Main App add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/src/texturelab) diff --git a/src/nodegraph/CMakeLists.txt b/src/nodegraph/CMakeLists.txt index 94b47851..49b3249c 100644 --- a/src/nodegraph/CMakeLists.txt +++ b/src/nodegraph/CMakeLists.txt @@ -57,6 +57,7 @@ add_executable(nodegraph_app ) target_link_libraries(nodegraph_app PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::OpenGLWidgets Qt${QT_VERSION_MAJOR}::Widgets) diff --git a/src/viewer3d/CMakeLists.txt b/src/viewer3d/CMakeLists.txt new file mode 100644 index 00000000..bdf872e5 --- /dev/null +++ b/src/viewer3d/CMakeLists.txt @@ -0,0 +1,79 @@ + +cmake_minimum_required(VERSION 3.5) + + +find_package(QT NAMES Qt6 Qt5 COMPONENTS Core REQUIRED) +find_package(Qt${QT_VERSION_MAJOR} 5.5 COMPONENTS Core Gui Widgets OpenGLWidgets REQUIRED) +if (UNIX AND NOT APPLE) + include_directories(${Qt${QT_VERSION_MAJOR}Gui_PRIVATE_INCLUDE_DIRS}) +endif() + +set(CMAKE_INCLUDE_CURRENT_DIR ON) + +set(SRCS + main.cpp + viewer3d.cpp +) +set(HEADERS + viewer3d.h +) + +# library +add_library(viewer3d STATIC ${SRCS} ${HEADERS}) +target_link_libraries(viewer3d PRIVATE Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::OpenGLWidgets + Qt${QT_VERSION_MAJOR}::Widgets) + + +set_target_properties(viewer3d PROPERTIES + AUTOMOC ON + AUTORCC ON + CXX_EXTENSIONS OFF + EXPORT_NAME "3d Viewer" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" +) + +if(QT_VERSION_MAJOR STREQUAL "5") + set_target_properties(viewer3d PROPERTIES + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED ON) +elseif(QT_VERSION_MAJOR STREQUAL "6") + set_target_properties(viewer3d PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED ON) +endif() + +# EXE for testing purposes +add_executable(viewer3d_app + ${HEADERS} + ${SRCS} + main.cpp + ) +target_link_libraries(viewer3d_app PRIVATE Qt${QT_VERSION_MAJOR}::Core + Qt${QT_VERSION_MAJOR}::Gui + Qt${QT_VERSION_MAJOR}::OpenGLWidgets + Qt${QT_VERSION_MAJOR}::Widgets) + + +set_target_properties(viewer3d_app PROPERTIES + AUTOMOC ON + AUTORCC ON + CXX_EXTENSIONS OFF + EXPORT_NAME "Viewer Sample App" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" +) + +if(QT_VERSION_MAJOR STREQUAL "5") + set_target_properties(viewer3d_app PROPERTIES + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED ON) +elseif(QT_VERSION_MAJOR STREQUAL "6") + set_target_properties(viewer3d_app PROPERTIES + CXX_STANDARD 17 + CXX_STANDARD_REQUIRED ON) +endif() \ No newline at end of file diff --git a/src/viewer3d/assets.qrc b/src/viewer3d/assets.qrc new file mode 100644 index 00000000..e91a8e5f --- /dev/null +++ b/src/viewer3d/assets.qrc @@ -0,0 +1,6 @@ + + + assets/brick.jpg + assets/cube.obj + + \ No newline at end of file diff --git a/src/viewer3d/main.cpp b/src/viewer3d/main.cpp new file mode 100644 index 00000000..edee976c --- /dev/null +++ b/src/viewer3d/main.cpp @@ -0,0 +1,41 @@ +#include "viewer3d.h" +#include +#include +#include + +#include +#include +#include + +int main(int argc, char* argv[]) +{ + QApplication a(argc, argv); + QMainWindow w; + + // init gl + QSurfaceFormat fmt; + fmt.setDepthBufferSize(24); + + // Request OpenGL 3.3 core or OpenGL ES 3.0. + // if (QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGL) { + qDebug("Requesting 3.3 core context"); + fmt.setVersion(3, 3); + fmt.setProfile(QSurfaceFormat::CoreProfile); + // } + // else { + // qDebug("Requesting 3.0 context"); + // fmt.setVersion(3, 0); + // } + + QSurfaceFormat::setDefaultFormat(fmt); + + auto viewer = new Viewer3D(); + + w.setCentralWidget(viewer); + w.resize(800, 600); + + w.show(); + w.showMaximized(); + + return a.exec(); +} diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp new file mode 100644 index 00000000..2144ae32 --- /dev/null +++ b/src/viewer3d/viewer3d.cpp @@ -0,0 +1,234 @@ +#include "viewer3d.h" +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum class VertexUsage : int { + Position = 0, + Color = 1, + TexCoord0 = 2, + TexCoord1 = 3, + TexCoord2 = 4, + TexCoord3 = 5, + Normal = 6, + Tangent = 7, + Count = 8 +}; + +QOpenGLShaderProgram* createMainShader(); +QOpenGLBuffer* loadMesh(); + +void Viewer3D::initializeGL() +{ + gl = QOpenGLContext::currentContext()->functions(); + gl->initializeOpenGLFunctions(); + + vao = new QOpenGLVertexArrayObject; + if (vao->create()) + vao->bind(); + + mainProgram = createMainShader(); + + mesh = loadMesh(); + + // setup matrices + worldMatrix.setToIdentity(); + + viewMatrix.setToIdentity(); + viewMatrix.lookAt(QVector3D(0, 5, -5), QVector3D(), QVector3D(0, 1, 0)); + + projMatrix.setToIdentity(); + projMatrix.perspective(45, this->width() / (float)this->height(), 1.0, + 1000); +} + +void Viewer3D::paintGL() +{ + gl->glViewport(0, 0, this->width(), this->height()); + gl->glClearDepthf(1.0); + gl->glClearColor(1, 0, 0, 1); + gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + gl->glEnable(GL_DEPTH_TEST); + // gl->glEnable(GL_DEPTH_TEST); + + vao->bind(); + + // todo: bind textures + + mainProgram->bind(); + mainProgram->setUniformValue("worldMatrix", worldMatrix); + mainProgram->setUniformValue("viewMatrix", viewMatrix); + mainProgram->setUniformValue("projMatrix", projMatrix); + + mesh->bind(); + // setup attrib array + gl->glEnableVertexAttribArray((int)VertexUsage::Position); + gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, GL_FALSE, + 5 * sizeof(float), nullptr); + gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, + GL_FALSE, 5 * sizeof(float), + reinterpret_cast(3 * sizeof(float))); + + // render + gl->glDrawArrays(GL_TRIANGLES, 0, 6); +} + +void Viewer3D::resizeGL(int w, int h) +{ + // Calculate aspect ratio + qreal aspect = qreal(w) / qreal(h ? h : 1); + + // Set near plane to 3.0, far plane to 7.0, field of view 45 degrees + const qreal zNear = 1.0, zFar = 1000.0, fov = 45.0; + + // Reset projection + projMatrix.setToIdentity(); + + // Set perspective projection + projMatrix.perspective(fov, aspect, zNear, zFar); +} + +QOpenGLShaderProgram* createMainShader() +{ + QOpenGLShader* vshader = new QOpenGLShader(QOpenGLShader::Vertex); + QOpenGLShader* fshader = new QOpenGLShader(QOpenGLShader::Fragment); + auto program = new QOpenGLShaderProgram; + + QString vSource = R""""( + #version 150 core + + in vec3 a_pos; + in vec3 a_normal; + in vec3 a_tangent; + in vec2 a_texCoord; + + uniform mat4 worldMatrix; + uniform mat4 viewMatrix; + uniform mat4 projMatrix; + + out vec2 v_texCoord; + + void main() + { + v_texCoord = a_texCoord*vec2(1,1); + vec4 v_pos = projMatrix * viewMatrix * worldMatrix * vec4(a_pos, 1.0); + gl_Position = v_pos; + } + )""""; + + QString fSource = R""""( + #version 150 core + + in vec2 v_texCoord; + out vec4 fragColor; + + uniform sampler2D diffuse; + + void main() + { + fragColor = texture(diffuse, v_texCoord); + } + )""""; + + if (!vshader->compileSourceCode(vSource)) { + qDebug() << "VERTEX SHADER ERROR"; + qDebug() << vshader->log(); + } + + if (!fshader->compileSourceCode(fSource)) { + qDebug() << "FRAGMENT SHADER ERROR"; + qDebug() << fshader->log(); + } + + program->removeAllShaders(); + + program->addShader(vshader); + program->addShader(fshader); + + program->bindAttributeLocation("a_pos", (int)VertexUsage::Position); + program->bindAttributeLocation("a_normal", (int)VertexUsage::Normal); + program->bindAttributeLocation("a_tangent", (int)VertexUsage::Tangent); + program->bindAttributeLocation("a_color", (int)VertexUsage::Color); + program->bindAttributeLocation("a_texCoord", (int)VertexUsage::TexCoord0); + program->bindAttributeLocation("a_texCoord1", (int)VertexUsage::TexCoord1); + + if (!program->link()) { + qDebug() << "SHADER LINK ERROR"; + qDebug() << program->log(); + + return nullptr; + } + + return program; +} + +QOpenGLBuffer* loadMesh() +{ + // setup vertex array + QVector data; + // TRIANGLE 1 + data.append(-1); + data.append(-1); + data.append(0); + + data.append(0); + data.append(0); + + data.append(1); + data.append(-1); + data.append(0); + + data.append(1); + data.append(0); + + data.append(-1); + data.append(1); + data.append(0); + + data.append(0); + data.append(1); + + // TRIANGLE 2 + data.append(-1); + data.append(1); + data.append(0); + + data.append(0); + data.append(1); + + data.append(1); + data.append(-1); + data.append(0); + + data.append(1); + data.append(0); + + data.append(1); + data.append(1); + data.append(0); + + data.append(1); + data.append(1); + + auto vbo = new QOpenGLBuffer; + vbo->create(); + vbo->bind(); + vbo->allocate(data.constData(), data.count() * sizeof(float)); + vbo->release(); + + return vbo; +} \ No newline at end of file diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h new file mode 100644 index 00000000..b7e421cf --- /dev/null +++ b/src/viewer3d/viewer3d.h @@ -0,0 +1,49 @@ +#pragma once + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +class QOpenGLTexture; +class QOpenGLShaderProgram; +class QOpenGLBuffer; +class QOpenGLVertexArrayObject; + +class Viewer3D : public QOpenGLWidget { + QOpenGLTexture* texture = nullptr; + QOpenGLShaderProgram* mainProgram = nullptr; + QOpenGLBuffer* mesh = nullptr; + QOpenGLVertexArrayObject* vao = nullptr; + + QOpenGLFunctions* gl = nullptr; + + int m_projMatrixLoc = 0; + int m_camMatrixLoc = 0; + int m_worldMatrixLoc = 0; + int m_myMatrixLoc = 0; + int m_lightPosLoc = 0; + + QMatrix4x4 projMatrix; + QMatrix4x4 viewMatrix; + QMatrix4x4 worldMatrix; + + QVector3D m_eye; + QVector3D m_target = {0, 0, -1}; + +protected: + void initializeGL(); + void paintGL(); + void resizeGL(int w, int h); +}; \ No newline at end of file From 58014baf013f7018e1cc2e3eefc3d634126ca075 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Mon, 28 Nov 2022 22:24:59 -0500 Subject: [PATCH 056/100] add basic model loader --- src/viewer3d/CMakeLists.txt | 7 + src/viewer3d/README.md | 9 + src/viewer3d/assets.qrc | 2 +- src/viewer3d/gltf/json.hpp | 26753 ++++++++++++++++++++++++++++++++ src/viewer3d/gltf/stb_image.h | 8653 +++++++++++ src/viewer3d/gltf/tiny_gltf.h | 8381 ++++++++++ src/viewer3d/viewer3d.cpp | 189 + src/viewer3d/viewer3d.h | 3 + 8 files changed, 43996 insertions(+), 1 deletion(-) create mode 100644 src/viewer3d/README.md create mode 100644 src/viewer3d/gltf/json.hpp create mode 100644 src/viewer3d/gltf/stb_image.h create mode 100644 src/viewer3d/gltf/tiny_gltf.h diff --git a/src/viewer3d/CMakeLists.txt b/src/viewer3d/CMakeLists.txt index bdf872e5..372464e6 100644 --- a/src/viewer3d/CMakeLists.txt +++ b/src/viewer3d/CMakeLists.txt @@ -16,8 +16,14 @@ set(SRCS ) set(HEADERS viewer3d.h + gltf/json.hpp + gltf/tiny_gltf.h + gltf/stb_image.h ) +set(RESOURCES + ./assets.qrc) + # library add_library(viewer3d STATIC ${SRCS} ${HEADERS}) target_link_libraries(viewer3d PRIVATE Qt${QT_VERSION_MAJOR}::Core @@ -51,6 +57,7 @@ add_executable(viewer3d_app ${HEADERS} ${SRCS} main.cpp + ${RESOURCES} ) target_link_libraries(viewer3d_app PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui diff --git a/src/viewer3d/README.md b/src/viewer3d/README.md new file mode 100644 index 00000000..e47a0a22 --- /dev/null +++ b/src/viewer3d/README.md @@ -0,0 +1,9 @@ +reference: +https://github.com/SaschaWillems/Vulkan-glTF-PBR +https://github.com/syoyo/tinygltf/tree/release/examples/glview + +steps: +load gltf model with tangents +load hdr texture +generate hdr textures +pass textures to shaders diff --git a/src/viewer3d/assets.qrc b/src/viewer3d/assets.qrc index e91a8e5f..cc0819c9 100644 --- a/src/viewer3d/assets.qrc +++ b/src/viewer3d/assets.qrc @@ -1,6 +1,6 @@ assets/brick.jpg - assets/cube.obj + assets/cube.gltf \ No newline at end of file diff --git a/src/viewer3d/gltf/json.hpp b/src/viewer3d/gltf/json.hpp new file mode 100644 index 00000000..26684068 --- /dev/null +++ b/src/viewer3d/gltf/json.hpp @@ -0,0 +1,26753 @@ +/* + __ _____ _____ _____ + __| | __| | | | JSON for Modern C++ +| | |__ | | | | | | version 3.10.4 +|_____|_____|_____|_|___| https://github.com/nlohmann/json + +Licensed under the MIT License . +SPDX-License-Identifier: MIT +Copyright (c) 2013-2019 Niels Lohmann . + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#define NLOHMANN_JSON_VERSION_MAJOR 3 +#define NLOHMANN_JSON_VERSION_MINOR 10 +#define NLOHMANN_JSON_VERSION_PATCH 4 + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#ifndef JSON_NO_IO + #include // istream, ostream +#endif // JSON_NO_IO +#include // random_access_iterator_tag +#include // unique_ptr +#include // accumulate +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include + + +#include +#include + +// #include + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include + + +#include // exception +#include // runtime_error +#include // to_string +#include // vector + +// #include + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +namespace nlohmann +{ +namespace detail +{ +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +} +} // namespace detail +} // namespace nlohmann + +// #include + + +#include +// #include + + +#include // declval, pair +// #include + + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + * + * To the extent possible under law, the author(s) have dedicated all + * copyright and related and neighboring rights to this software to + * the public domain worldwide. This software is distributed without + * any warranty. + * + * For details, see . + * SPDX-License-Identifier: CC0-1.0 + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + +// #include + + +#include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; +} // namespace detail +} // namespace nlohmann + + +// https://en.cppreference.com/w/cpp/experimental/is_detected +namespace nlohmann +{ +namespace detail +{ +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; +} // namespace detail +} // namespace nlohmann + + +// This file contains all internal macro definitions +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus >= 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 202002L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow to disable exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow to override assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + friend void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + friend void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + inline void to_json(nlohmann::json& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + inline void from_json(const nlohmann::json& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + + +// inspired from https://stackoverflow.com/a/26745591 +// allows to call any std function as if (e.g. with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + + +namespace nlohmann +{ +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +inline void replace_substring(std::string& s, const std::string& f, + const std::string& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != std::string::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +inline std::string escape(std::string s) +{ + replace_substring(s, "~", "~0"); + replace_substring(s, "/", "~1"); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +static void unescape(std::string& s) +{ + replace_substring(s, "~1", "/"); + replace_substring(s, "~0", "~"); +} + +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // size_t + +namespace nlohmann +{ +namespace detail +{ +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +} // namespace nlohmann + +// #include + + +namespace nlohmann +{ +namespace detail +{ +//////////////// +// exceptions // +//////////////// + +/*! +@brief general exception of the @ref basic_json class + +This class is an extension of `std::exception` objects with a member @a id for +exception ids. It is used as the base class for all exceptions thrown by the +@ref basic_json class. This class can hence be used as "wildcard" to catch +exceptions. + +Subclasses: +- @ref parse_error for exceptions indicating a parse error +- @ref invalid_iterator for exceptions indicating errors with iterators +- @ref type_error for exceptions indicating executing a member function with + a wrong type +- @ref out_of_range for exceptions indicating access out of the defined range +- @ref other_error for exceptions indicating other library errors + +@internal +@note To have nothrow-copy-constructible exceptions, we internally use + `std::runtime_error` which can cope with arbitrary-length error messages. + Intermediate strings are built with static functions and then passed to + the actual constructor. +@endinternal + +@liveexample{The following code shows how arbitrary library exceptions can be +caught.,exception} + +@since version 3.0.0 +*/ +class exception : public std::exception +{ + public: + /// returns the explanatory string + const char* what() const noexcept override + { + return m.what(); + } + + /// the id of the exception + const int id; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes) + + protected: + JSON_HEDLEY_NON_NULL(3) + exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} + + static std::string name(const std::string& ename, int id_) + { + return "[json.exception." + ename + "." + std::to_string(id_) + "] "; + } + + template + static std::string diagnostics(const BasicJsonType& leaf_element) + { +#if JSON_DIAGNOSTICS + std::vector tokens; + for (const auto* current = &leaf_element; current->m_parent != nullptr; current = current->m_parent) + { + switch (current->m_parent->type()) + { + case value_t::array: + { + for (std::size_t i = 0; i < current->m_parent->m_value.array->size(); ++i) + { + if (¤t->m_parent->m_value.array->operator[](i) == current) + { + tokens.emplace_back(std::to_string(i)); + break; + } + } + break; + } + + case value_t::object: + { + for (const auto& element : *current->m_parent->m_value.object) + { + if (&element.second == current) + { + tokens.emplace_back(element.first.c_str()); + break; + } + } + break; + } + + case value_t::null: // LCOV_EXCL_LINE + case value_t::string: // LCOV_EXCL_LINE + case value_t::boolean: // LCOV_EXCL_LINE + case value_t::number_integer: // LCOV_EXCL_LINE + case value_t::number_unsigned: // LCOV_EXCL_LINE + case value_t::number_float: // LCOV_EXCL_LINE + case value_t::binary: // LCOV_EXCL_LINE + case value_t::discarded: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + break; // LCOV_EXCL_LINE + } + } + + if (tokens.empty()) + { + return ""; + } + + return "(" + std::accumulate(tokens.rbegin(), tokens.rend(), std::string{}, + [](const std::string & a, const std::string & b) + { + return a + "/" + detail::escape(b); + }) + ") "; +#else + static_cast(leaf_element); + return ""; +#endif + } + + private: + /// an exception object as storage for error messages + std::runtime_error m; +}; + +/*! +@brief exception indicating a parse error + +This exception is thrown by the library when a parse error occurs. Parse errors +can occur during the deserialization of JSON text, CBOR, MessagePack, as well +as when using JSON Patch. + +Member @a byte holds the byte index of the last read character in the input +file. + +Exceptions have ids 1xx. + +name / id | example message | description +------------------------------ | --------------- | ------------------------- +json.exception.parse_error.101 | parse error at 2: unexpected end of input; expected string literal | This error indicates a syntax error while deserializing a JSON text. The error message describes that an unexpected token (character) was encountered, and the member @a byte indicates the error position. +json.exception.parse_error.102 | parse error at 14: missing or wrong low surrogate | JSON uses the `\uxxxx` format to describe Unicode characters. Code points above above 0xFFFF are split into two `\uxxxx` entries ("surrogate pairs"). This error indicates that the surrogate pair is incomplete or contains an invalid code point. +json.exception.parse_error.103 | parse error: code points above 0x10FFFF are invalid | Unicode supports code points up to 0x10FFFF. Code points above 0x10FFFF are invalid. +json.exception.parse_error.104 | parse error: JSON patch must be an array of objects | [RFC 6902](https://tools.ietf.org/html/rfc6902) requires a JSON Patch document to be a JSON document that represents an array of objects. +json.exception.parse_error.105 | parse error: operation must have string member 'op' | An operation of a JSON Patch document must contain exactly one "op" member, whose value indicates the operation to perform. Its value must be one of "add", "remove", "replace", "move", "copy", or "test"; other values are errors. +json.exception.parse_error.106 | parse error: array index '01' must not begin with '0' | An array index in a JSON Pointer ([RFC 6901](https://tools.ietf.org/html/rfc6901)) may be `0` or any number without a leading `0`. +json.exception.parse_error.107 | parse error: JSON pointer must be empty or begin with '/' - was: 'foo' | A JSON Pointer must be a Unicode string containing a sequence of zero or more reference tokens, each prefixed by a `/` character. +json.exception.parse_error.108 | parse error: escape character '~' must be followed with '0' or '1' | In a JSON Pointer, only `~0` and `~1` are valid escape sequences. +json.exception.parse_error.109 | parse error: array index 'one' is not a number | A JSON Pointer array index must be a number. +json.exception.parse_error.110 | parse error at 1: cannot read 2 bytes from vector | When parsing CBOR or MessagePack, the byte vector ends before the complete value has been read. +json.exception.parse_error.112 | parse error at 1: error reading CBOR; last byte: 0xF8 | Not all types of CBOR or MessagePack are supported. This exception occurs if an unsupported byte was read. +json.exception.parse_error.113 | parse error at 2: expected a CBOR string; last byte: 0x98 | While parsing a map key, a value that is not a string has been read. +json.exception.parse_error.114 | parse error: Unsupported BSON record type 0x0F | The parsing of the corresponding BSON record type is not implemented (yet). +json.exception.parse_error.115 | parse error at byte 5: syntax error while parsing UBJSON high-precision number: invalid number text: 1A | A UBJSON high-precision number could not be parsed. + +@note For an input with n bytes, 1 is the index of the first character and n+1 + is the index of the terminating null byte or the end of file. This also + holds true when reading a byte vector (CBOR or MessagePack). + +@liveexample{The following code shows how a `parse_error` exception can be +caught.,parse_error} + +@sa - @ref exception for the base class of the library exceptions +@sa - @ref invalid_iterator for exceptions indicating errors with iterators +@sa - @ref type_error for exceptions indicating executing a member function with + a wrong type +@sa - @ref out_of_range for exceptions indicating access out of the defined range +@sa - @ref other_error for exceptions indicating other library errors + +@since version 3.0.0 +*/ +class parse_error : public exception +{ + public: + /*! + @brief create a parse error exception + @param[in] id_ the id of the exception + @param[in] pos the position where the error occurred (or with + chars_read_total=0 if the position cannot be + determined) + @param[in] what_arg the explanatory string + @return parse_error object + */ + template + static parse_error create(int id_, const position_t& pos, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("parse_error", id_) + "parse error" + + position_string(pos) + ": " + exception::diagnostics(context) + what_arg; + return parse_error(id_, pos.chars_read_total, w.c_str()); + } + + template + static parse_error create(int id_, std::size_t byte_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("parse_error", id_) + "parse error" + + (byte_ != 0 ? (" at byte " + std::to_string(byte_)) : "") + + ": " + exception::diagnostics(context) + what_arg; + return parse_error(id_, byte_, w.c_str()); + } + + /*! + @brief byte index of the parse error + + The byte index of the last read character in the input file. + + @note For an input with n bytes, 1 is the index of the first character and + n+1 is the index of the terminating null byte or the end of file. + This also holds true when reading a byte vector (CBOR or MessagePack). + */ + const std::size_t byte; + + private: + parse_error(int id_, std::size_t byte_, const char* what_arg) + : exception(id_, what_arg), byte(byte_) {} + + static std::string position_string(const position_t& pos) + { + return " at line " + std::to_string(pos.lines_read + 1) + + ", column " + std::to_string(pos.chars_read_current_line); + } +}; + +/*! +@brief exception indicating errors with iterators + +This exception is thrown if iterators passed to a library function do not match +the expected semantics. + +Exceptions have ids 2xx. + +name / id | example message | description +----------------------------------- | --------------- | ------------------------- +json.exception.invalid_iterator.201 | iterators are not compatible | The iterators passed to constructor @ref basic_json(InputIT first, InputIT last) are not compatible, meaning they do not belong to the same container. Therefore, the range (@a first, @a last) is invalid. +json.exception.invalid_iterator.202 | iterator does not fit current value | In an erase or insert function, the passed iterator @a pos does not belong to the JSON value for which the function was called. It hence does not define a valid position for the deletion/insertion. +json.exception.invalid_iterator.203 | iterators do not fit current value | Either iterator passed to function @ref erase(IteratorType first, IteratorType last) does not belong to the JSON value from which values shall be erased. It hence does not define a valid range to delete values from. +json.exception.invalid_iterator.204 | iterators out of range | When an iterator range for a primitive type (number, boolean, or string) is passed to a constructor or an erase function, this range has to be exactly (@ref begin(), @ref end()), because this is the only way the single stored value is expressed. All other ranges are invalid. +json.exception.invalid_iterator.205 | iterator out of range | When an iterator for a primitive type (number, boolean, or string) is passed to an erase function, the iterator has to be the @ref begin() iterator, because it is the only way to address the stored value. All other iterators are invalid. +json.exception.invalid_iterator.206 | cannot construct with iterators from null | The iterators passed to constructor @ref basic_json(InputIT first, InputIT last) belong to a JSON null value and hence to not define a valid range. +json.exception.invalid_iterator.207 | cannot use key() for non-object iterators | The key() member function can only be used on iterators belonging to a JSON object, because other types do not have a concept of a key. +json.exception.invalid_iterator.208 | cannot use operator[] for object iterators | The operator[] to specify a concrete offset cannot be used on iterators belonging to a JSON object, because JSON objects are unordered. +json.exception.invalid_iterator.209 | cannot use offsets with object iterators | The offset operators (+, -, +=, -=) cannot be used on iterators belonging to a JSON object, because JSON objects are unordered. +json.exception.invalid_iterator.210 | iterators do not fit | The iterator range passed to the insert function are not compatible, meaning they do not belong to the same container. Therefore, the range (@a first, @a last) is invalid. +json.exception.invalid_iterator.211 | passed iterators may not belong to container | The iterator range passed to the insert function must not be a subrange of the container to insert to. +json.exception.invalid_iterator.212 | cannot compare iterators of different containers | When two iterators are compared, they must belong to the same container. +json.exception.invalid_iterator.213 | cannot compare order of object iterators | The order of object iterators cannot be compared, because JSON objects are unordered. +json.exception.invalid_iterator.214 | cannot get value | Cannot get value for iterator: Either the iterator belongs to a null value or it is an iterator to a primitive type (number, boolean, or string), but the iterator is different to @ref begin(). + +@liveexample{The following code shows how an `invalid_iterator` exception can be +caught.,invalid_iterator} + +@sa - @ref exception for the base class of the library exceptions +@sa - @ref parse_error for exceptions indicating a parse error +@sa - @ref type_error for exceptions indicating executing a member function with + a wrong type +@sa - @ref out_of_range for exceptions indicating access out of the defined range +@sa - @ref other_error for exceptions indicating other library errors + +@since version 3.0.0 +*/ +class invalid_iterator : public exception +{ + public: + template + static invalid_iterator create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("invalid_iterator", id_) + exception::diagnostics(context) + what_arg; + return invalid_iterator(id_, w.c_str()); + } + + private: + JSON_HEDLEY_NON_NULL(3) + invalid_iterator(int id_, const char* what_arg) + : exception(id_, what_arg) {} +}; + +/*! +@brief exception indicating executing a member function with a wrong type + +This exception is thrown in case of a type error; that is, a library function is +executed on a JSON value whose type does not match the expected semantics. + +Exceptions have ids 3xx. + +name / id | example message | description +----------------------------- | --------------- | ------------------------- +json.exception.type_error.301 | cannot create object from initializer list | To create an object from an initializer list, the initializer list must consist only of a list of pairs whose first element is a string. When this constraint is violated, an array is created instead. +json.exception.type_error.302 | type must be object, but is array | During implicit or explicit value conversion, the JSON type must be compatible to the target type. For instance, a JSON string can only be converted into string types, but not into numbers or boolean types. +json.exception.type_error.303 | incompatible ReferenceType for get_ref, actual type is object | To retrieve a reference to a value stored in a @ref basic_json object with @ref get_ref, the type of the reference must match the value type. For instance, for a JSON array, the @a ReferenceType must be @ref array_t &. +json.exception.type_error.304 | cannot use at() with string | The @ref at() member functions can only be executed for certain JSON types. +json.exception.type_error.305 | cannot use operator[] with string | The @ref operator[] member functions can only be executed for certain JSON types. +json.exception.type_error.306 | cannot use value() with string | The @ref value() member functions can only be executed for certain JSON types. +json.exception.type_error.307 | cannot use erase() with string | The @ref erase() member functions can only be executed for certain JSON types. +json.exception.type_error.308 | cannot use push_back() with string | The @ref push_back() and @ref operator+= member functions can only be executed for certain JSON types. +json.exception.type_error.309 | cannot use insert() with | The @ref insert() member functions can only be executed for certain JSON types. +json.exception.type_error.310 | cannot use swap() with number | The @ref swap() member functions can only be executed for certain JSON types. +json.exception.type_error.311 | cannot use emplace_back() with string | The @ref emplace_back() member function can only be executed for certain JSON types. +json.exception.type_error.312 | cannot use update() with string | The @ref update() member functions can only be executed for certain JSON types. +json.exception.type_error.313 | invalid value to unflatten | The @ref unflatten function converts an object whose keys are JSON Pointers back into an arbitrary nested JSON value. The JSON Pointers must not overlap, because then the resulting value would not be well defined. +json.exception.type_error.314 | only objects can be unflattened | The @ref unflatten function only works for an object whose keys are JSON Pointers. +json.exception.type_error.315 | values in object must be primitive | The @ref unflatten function only works for an object whose keys are JSON Pointers and whose values are primitive. +json.exception.type_error.316 | invalid UTF-8 byte at index 10: 0x7E | The @ref dump function only works with UTF-8 encoded strings; that is, if you assign a `std::string` to a JSON value, make sure it is UTF-8 encoded. | +json.exception.type_error.317 | JSON value cannot be serialized to requested format | The dynamic type of the object cannot be represented in the requested serialization format (e.g. a raw `true` or `null` JSON object cannot be serialized to BSON) | + +@liveexample{The following code shows how a `type_error` exception can be +caught.,type_error} + +@sa - @ref exception for the base class of the library exceptions +@sa - @ref parse_error for exceptions indicating a parse error +@sa - @ref invalid_iterator for exceptions indicating errors with iterators +@sa - @ref out_of_range for exceptions indicating access out of the defined range +@sa - @ref other_error for exceptions indicating other library errors + +@since version 3.0.0 +*/ +class type_error : public exception +{ + public: + template + static type_error create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("type_error", id_) + exception::diagnostics(context) + what_arg; + return type_error(id_, w.c_str()); + } + + private: + JSON_HEDLEY_NON_NULL(3) + type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/*! +@brief exception indicating access out of the defined range + +This exception is thrown in case a library function is called on an input +parameter that exceeds the expected range, for instance in case of array +indices or nonexisting object keys. + +Exceptions have ids 4xx. + +name / id | example message | description +------------------------------- | --------------- | ------------------------- +json.exception.out_of_range.401 | array index 3 is out of range | The provided array index @a i is larger than @a size-1. +json.exception.out_of_range.402 | array index '-' (3) is out of range | The special array index `-` in a JSON Pointer never describes a valid element of the array, but the index past the end. That is, it can only be used to add elements at this position, but not to read it. +json.exception.out_of_range.403 | key 'foo' not found | The provided key was not found in the JSON object. +json.exception.out_of_range.404 | unresolved reference token 'foo' | A reference token in a JSON Pointer could not be resolved. +json.exception.out_of_range.405 | JSON pointer has no parent | The JSON Patch operations 'remove' and 'add' can not be applied to the root element of the JSON value. +json.exception.out_of_range.406 | number overflow parsing '10E1000' | A parsed number could not be stored as without changing it to NaN or INF. +json.exception.out_of_range.407 | number overflow serializing '9223372036854775808' | UBJSON and BSON only support integer numbers up to 9223372036854775807. (until version 3.8.0) | +json.exception.out_of_range.408 | excessive array size: 8658170730974374167 | The size (following `#`) of an UBJSON array or object exceeds the maximal capacity. | +json.exception.out_of_range.409 | BSON key cannot contain code point U+0000 (at byte 2) | Key identifiers to be serialized to BSON cannot contain code point U+0000, since the key is stored as zero-terminated c-string | + +@liveexample{The following code shows how an `out_of_range` exception can be +caught.,out_of_range} + +@sa - @ref exception for the base class of the library exceptions +@sa - @ref parse_error for exceptions indicating a parse error +@sa - @ref invalid_iterator for exceptions indicating errors with iterators +@sa - @ref type_error for exceptions indicating executing a member function with + a wrong type +@sa - @ref other_error for exceptions indicating other library errors + +@since version 3.0.0 +*/ +class out_of_range : public exception +{ + public: + template + static out_of_range create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("out_of_range", id_) + exception::diagnostics(context) + what_arg; + return out_of_range(id_, w.c_str()); + } + + private: + JSON_HEDLEY_NON_NULL(3) + out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; + +/*! +@brief exception indicating other library errors + +This exception is thrown in case of errors that cannot be classified with the +other exception types. + +Exceptions have ids 5xx. + +name / id | example message | description +------------------------------ | --------------- | ------------------------- +json.exception.other_error.501 | unsuccessful: {"op":"test","path":"/baz", "value":"bar"} | A JSON Patch operation 'test' failed. The unsuccessful operation is also printed. + +@sa - @ref exception for the base class of the library exceptions +@sa - @ref parse_error for exceptions indicating a parse error +@sa - @ref invalid_iterator for exceptions indicating errors with iterators +@sa - @ref type_error for exceptions indicating executing a member function with + a wrong type +@sa - @ref out_of_range for exceptions indicating access out of the defined range + +@liveexample{The following code shows how an `other_error` exception can be +caught.,other_error} + +@since version 3.0.0 +*/ +class other_error : public exception +{ + public: + template + static other_error create(int id_, const std::string& what_arg, const BasicJsonType& context) + { + std::string w = exception::name("other_error", id_) + exception::diagnostics(context) + what_arg; + return other_error(id_, w.c_str()); + } + + private: + JSON_HEDLEY_NON_NULL(3) + other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +// #include + + +namespace nlohmann +{ +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static constexpr T value{}; +}; + +template +constexpr T static_const::value; + +} // namespace detail +} // namespace nlohmann + +// #include + + +namespace nlohmann +{ +namespace detail +{ +// dispatching helper struct +template struct identity_tag {}; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // numeric_limits +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval +#include // tuple + +// #include + + +// #include + + +#include // random_access_iterator_tag + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; +} // namespace detail +} // namespace nlohmann + +// #include + + +// #include + + +namespace nlohmann +{ +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); +} // namespace nlohmann + +// #include + + +// #include + + +namespace nlohmann +{ +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); +} // namespace nlohmann + +// #include + +// #include + +// #include +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ +#define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + +#include // int64_t, uint64_t +#include // map +#include // allocator +#include // string +#include // vector + +/*! +@brief namespace for Niels Lohmann +@see https://github.com/nlohmann +@since version 1.0.0 +*/ +namespace nlohmann +{ +/*! +@brief default JSONSerializer template argument + +This serializer ignores the template arguments and uses ADL +([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) +for serialization. +*/ +template +struct adl_serializer; + +template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector> +class basic_json; + +/*! +@brief JSON Pointer + +A JSON pointer defines a string syntax for identifying a specific value +within a JSON document. It can be used with functions `at` and +`operator[]`. Furthermore, JSON pointers are the base for JSON patches. + +@sa [RFC 6901](https://tools.ietf.org/html/rfc6901) + +@since version 2.0.0 +*/ +template +class json_pointer; + +/*! +@brief default JSON class + +This type is the default specialization of the @ref basic_json class which +uses the standard template types. + +@since version 1.0.0 +*/ +using json = basic_json<>; + +template +struct ordered_map; + +/*! +@brief ordered JSON class + +This type preserves the insertion order of object keys. + +@since version 3.9.0 +*/ +using ordered_json = basic_json; + +} // namespace nlohmann + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +namespace nlohmann +{ +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B1 { }; +template +struct conjunction +: std::conditional, B1>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& + is_complete_type < + detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +// a naive helper to check if a type is an ordered_map (exploits the fact that +// ordered_map inherits capacity() from std::vector) +template +struct is_ordered_map +{ + using one = char; + + struct two + { + char x[2]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + }; + + template static one test( decltype(&C::capacity) ) ; + template static two test(...); + + enum { value = sizeof(test(nullptr)) == sizeof(char) }; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) +}; + +// to avoid useless casts (see https://github.com/nlohmann/json/issues/2893#issuecomment-889152324) +template < typename T, typename U, enable_if_t < !std::is_same::value, int > = 0 > +T conditional_static_cast(U value) +{ + return static_cast(value); +} + +template::value, int> = 0> +T conditional_static_cast(U value) +{ + return value; +} + +} // namespace detail +} // namespace nlohmann + +// #include + + +#ifdef JSON_HAS_CPP_17 + #include +#endif + +namespace nlohmann +{ +namespace detail +{ +template +void from_json(const BasicJsonType& j, typename std::nullptr_t& n) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_null())) + { + JSON_THROW(type_error::create(302, "type must be null, but is " + std::string(j.type_name()), j)); + } + n = nullptr; +} + +// overloads for basic_json template parameters +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < std::is_arithmetic::value&& + !std::is_same::value, + int > = 0 > +void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::boolean: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()), j)); + } +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_boolean())) + { + JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(j.type_name()), j)); + } + b = *j.template get_ptr(); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + } + s = *j.template get_ptr(); +} + +template < + typename BasicJsonType, typename ConstructibleStringType, + enable_if_t < + is_constructible_string_type::value&& + !std::is_same::value, + int > = 0 > +void from_json(const BasicJsonType& j, ConstructibleStringType& s) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + } + + s = *j.template get_ptr(); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_float_t& val) +{ + get_arithmetic_value(j, val); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_unsigned_t& val) +{ + get_arithmetic_value(j, val); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::number_integer_t& val) +{ + get_arithmetic_value(j, val); +} + +template::value, int> = 0> +void from_json(const BasicJsonType& j, EnumType& e) +{ + typename std::underlying_type::type val; + get_arithmetic_value(j, val); + e = static_cast(val); +} + +// forward_list doesn't have an insert method +template::value, int> = 0> +void from_json(const BasicJsonType& j, std::forward_list& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + l.clear(); + std::transform(j.rbegin(), j.rend(), + std::front_inserter(l), [](const BasicJsonType & i) + { + return i.template get(); + }); +} + +// valarray doesn't have an insert method +template::value, int> = 0> +void from_json(const BasicJsonType& j, std::valarray& l) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + l.resize(j.size()); + std::transform(j.begin(), j.end(), std::begin(l), + [](const BasicJsonType & elem) + { + return elem.template get(); + }); +} + +template +auto from_json(const BasicJsonType& j, T (&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} + +template +void from_json_array_impl(const BasicJsonType& j, typename BasicJsonType::array_t& arr, priority_tag<3> /*unused*/) +{ + arr = *j.template get_ptr(); +} + +template +auto from_json_array_impl(const BasicJsonType& j, std::array& arr, + priority_tag<2> /*unused*/) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } +} + +template::value, + int> = 0> +auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, priority_tag<1> /*unused*/) +-> decltype( + arr.reserve(std::declval()), + j.template get(), + void()) +{ + using std::end; + + ConstructibleArrayType ret; + ret.reserve(j.size()); + std::transform(j.begin(), j.end(), + std::inserter(ret, end(ret)), [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} + +template::value, + int> = 0> +void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, + priority_tag<0> /*unused*/) +{ + using std::end; + + ConstructibleArrayType ret; + std::transform( + j.begin(), j.end(), std::inserter(ret, end(ret)), + [](const BasicJsonType & i) + { + // get() returns *this, this won't call a from_json + // method when value_type is BasicJsonType + return i.template get(); + }); + arr = std::move(ret); +} + +template < typename BasicJsonType, typename ConstructibleArrayType, + enable_if_t < + is_constructible_array_type::value&& + !is_constructible_object_type::value&& + !is_constructible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) +-> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), +j.template get(), +void()) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + + from_json_array_impl(j, arr, priority_tag<3> {}); +} + +template < typename BasicJsonType, typename T, std::size_t... Idx > +std::array from_json_inplace_array_impl(BasicJsonType&& j, + identity_tag> /*unused*/, index_sequence /*unused*/) +{ + return { { std::forward(j).at(Idx).template get()... } }; +} + +template < typename BasicJsonType, typename T, std::size_t N > +auto from_json(BasicJsonType&& j, identity_tag> tag) +-> decltype(from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + + return from_json_inplace_array_impl(std::forward(j), tag, make_index_sequence {}); +} + +template +void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_binary())) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(j.type_name()), j)); + } + + bin = *j.template get_ptr(); +} + +template::value, int> = 0> +void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_object())) + { + JSON_THROW(type_error::create(302, "type must be object, but is " + std::string(j.type_name()), j)); + } + + ConstructibleObjectType ret; + const auto* inner_object = j.template get_ptr(); + using value_type = typename ConstructibleObjectType::value_type; + std::transform( + inner_object->begin(), inner_object->end(), + std::inserter(ret, ret.begin()), + [](typename BasicJsonType::object_t::value_type const & p) + { + return value_type(p.first, p.second.template get()); + }); + obj = std::move(ret); +} + +// overload for arithmetic types, not chosen for basic_json template arguments +// (BooleanType, etc..); note: Is it really necessary to provide explicit +// overloads for boolean_t etc. in case of a custom BooleanType which is not +// an arithmetic type? +template < typename BasicJsonType, typename ArithmeticType, + enable_if_t < + std::is_arithmetic::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value&& + !std::is_same::value, + int > = 0 > +void from_json(const BasicJsonType& j, ArithmeticType& val) +{ + switch (static_cast(j)) + { + case value_t::number_unsigned: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_integer: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::number_float: + { + val = static_cast(*j.template get_ptr()); + break; + } + case value_t::boolean: + { + val = static_cast(*j.template get_ptr()); + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::string: + case value_t::binary: + case value_t::discarded: + default: + JSON_THROW(type_error::create(302, "type must be number, but is " + std::string(j.type_name()), j)); + } +} + +template +std::tuple from_json_tuple_impl_base(BasicJsonType&& j, index_sequence /*unused*/) +{ + return std::make_tuple(std::forward(j).at(Idx).template get()...); +} + +template < typename BasicJsonType, class A1, class A2 > +std::pair from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<0> /*unused*/) +{ + return {std::forward(j).at(0).template get(), + std::forward(j).at(1).template get()}; +} + +template +void from_json_tuple_impl(BasicJsonType&& j, std::pair& p, priority_tag<1> /*unused*/) +{ + p = from_json_tuple_impl(std::forward(j), identity_tag> {}, priority_tag<0> {}); +} + +template +std::tuple from_json_tuple_impl(BasicJsonType&& j, identity_tag> /*unused*/, priority_tag<2> /*unused*/) +{ + return from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); +} + +template +void from_json_tuple_impl(BasicJsonType&& j, std::tuple& t, priority_tag<3> /*unused*/) +{ + t = from_json_tuple_impl_base(std::forward(j), index_sequence_for {}); +} + +template +auto from_json(BasicJsonType&& j, TupleRelated&& t) +-> decltype(from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {})) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + + return from_json_tuple_impl(std::forward(j), std::forward(t), priority_tag<3> {}); +} + +template < typename BasicJsonType, typename Key, typename Value, typename Compare, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +void from_json(const BasicJsonType& j, std::map& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()), j)); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} + +template < typename BasicJsonType, typename Key, typename Value, typename Hash, typename KeyEqual, typename Allocator, + typename = enable_if_t < !std::is_constructible < + typename BasicJsonType::string_t, Key >::value >> +void from_json(const BasicJsonType& j, std::unordered_map& m) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()), j)); + } + m.clear(); + for (const auto& p : j) + { + if (JSON_HEDLEY_UNLIKELY(!p.is_array())) + { + JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()), j)); + } + m.emplace(p.at(0).template get(), p.at(1).template get()); + } +} + +#ifdef JSON_HAS_CPP_17 +template +void from_json(const BasicJsonType& j, std::filesystem::path& p) +{ + if (JSON_HEDLEY_UNLIKELY(!j.is_string())) + { + JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()), j)); + } + p = *j.template get_ptr(); +} +#endif + +struct from_json_fn +{ + template + auto operator()(const BasicJsonType& j, T&& val) const + noexcept(noexcept(from_json(j, std::forward(val)))) + -> decltype(from_json(j, std::forward(val))) + { + return from_json(j, std::forward(val)); + } +}; +} // namespace detail + +/// namespace to hold default `from_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +constexpr const auto& from_json = detail::static_const::value; // NOLINT(misc-definitions-in-headers) +} // namespace +} // namespace nlohmann + +// #include + + +#include // copy +#include // begin, end +#include // string +#include // tuple, get +#include // is_same, is_constructible, is_floating_point, is_enum, underlying_type +#include // move, forward, declval, pair +#include // valarray +#include // vector + +// #include + +// #include + + +#include // size_t +#include // input_iterator_tag +#include // string, to_string +#include // tuple_size, get, tuple_element +#include // move + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +void int_to_string( string_type& target, std::size_t value ) +{ + // For ADL + using std::to_string; + target = to_string(value); +} +template class iteration_proxy_value +{ + public: + using difference_type = std::ptrdiff_t; + using value_type = iteration_proxy_value; + using pointer = value_type * ; + using reference = value_type & ; + using iterator_category = std::input_iterator_tag; + using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; + + private: + /// the iterator + IteratorType anchor; + /// an index for arrays (used to create key names) + std::size_t array_index = 0; + /// last stringified array index + mutable std::size_t array_index_last = 0; + /// a string representation of the array index + mutable string_type array_index_str = "0"; + /// an empty string (to return a reference for primitive values) + const string_type empty_str{}; + + public: + explicit iteration_proxy_value(IteratorType it) noexcept + : anchor(std::move(it)) + {} + + /// dereference operator (needed for range-based for) + iteration_proxy_value& operator*() + { + return *this; + } + + /// increment operator (needed for range-based for) + iteration_proxy_value& operator++() + { + ++anchor; + ++array_index; + + return *this; + } + + /// equality operator (needed for InputIterator) + bool operator==(const iteration_proxy_value& o) const + { + return anchor == o.anchor; + } + + /// inequality operator (needed for range-based for) + bool operator!=(const iteration_proxy_value& o) const + { + return anchor != o.anchor; + } + + /// return key of the iterator + const string_type& key() const + { + JSON_ASSERT(anchor.m_object != nullptr); + + switch (anchor.m_object->type()) + { + // use integer array index as key + case value_t::array: + { + if (array_index != array_index_last) + { + int_to_string( array_index_str, array_index ); + array_index_last = array_index; + } + return array_index_str; + } + + // use key from the object + case value_t::object: + return anchor.key(); + + // use an empty key for all primitive types + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return empty_str; + } + } + + /// return value of the iterator + typename IteratorType::reference value() const + { + return anchor.value(); + } +}; + +/// proxy class for the items() function +template class iteration_proxy +{ + private: + /// the container to iterate + typename IteratorType::reference container; + + public: + /// construct iteration proxy from a container + explicit iteration_proxy(typename IteratorType::reference cont) noexcept + : container(cont) {} + + /// return iterator begin (needed for range-based for) + iteration_proxy_value begin() noexcept + { + return iteration_proxy_value(container.begin()); + } + + /// return iterator end (needed for range-based for) + iteration_proxy_value end() noexcept + { + return iteration_proxy_value(container.end()); + } +}; +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.key()) +{ + return i.key(); +} +// Structured Bindings Support +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +template = 0> +auto get(const nlohmann::detail::iteration_proxy_value& i) -> decltype(i.value()) +{ + return i.value(); +} +} // namespace detail +} // namespace nlohmann + +// The Addition to the STD Namespace is required to add +// Structured Bindings Support to the iteration_proxy_value class +// For further reference see https://blog.tartanllama.xyz/structured-bindings/ +// And see https://github.com/nlohmann/json/pull/1391 +namespace std +{ +#if defined(__clang__) + // Fix: https://github.com/nlohmann/json/issues/1401 + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wmismatched-tags" +#endif +template +class tuple_size<::nlohmann::detail::iteration_proxy_value> + : public std::integral_constant {}; + +template +class tuple_element> +{ + public: + using type = decltype( + get(std::declval < + ::nlohmann::detail::iteration_proxy_value> ())); +}; +#if defined(__clang__) + #pragma clang diagnostic pop +#endif +} // namespace std + +// #include + +// #include + +// #include + + +#ifdef JSON_HAS_CPP_17 + #include +#endif + +namespace nlohmann +{ +namespace detail +{ +////////////////// +// constructors // +////////////////// + +/* + * Note all external_constructor<>::construct functions need to call + * j.m_value.destroy(j.m_type) to avoid a memory leak in case j contains an + * allocated value (e.g., a string). See bug issue + * https://github.com/nlohmann/json/issues/2865 for more information. + */ + +template struct external_constructor; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::boolean_t b) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::boolean; + j.m_value = b; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::string_t& s) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value = s; + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::string_t&& s) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value = std::move(s); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleStringType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleStringType& str) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::string; + j.m_value.string = j.template create(str); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::binary; + j.m_value = typename BasicJsonType::binary_t(b); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::binary; + j.m_value = typename BasicJsonType::binary_t(std::move(b)); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_float_t val) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_float; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_unsigned_t val) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_unsigned; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, typename BasicJsonType::number_integer_t val) noexcept + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::number_integer; + j.m_value = val; + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::array_t& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = arr; + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::array_t&& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = std::move(arr); + j.set_parents(); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < !std::is_same::value, + int > = 0 > + static void construct(BasicJsonType& j, const CompatibleArrayType& arr) + { + using std::begin; + using std::end; + + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value.array = j.template create(begin(arr), end(arr)); + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, const std::vector& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = value_t::array; + j.m_value.array->reserve(arr.size()); + for (const bool x : arr) + { + j.m_value.array->push_back(x); + j.set_parent(j.m_value.array->back()); + } + j.assert_invariant(); + } + + template::value, int> = 0> + static void construct(BasicJsonType& j, const std::valarray& arr) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::array; + j.m_value = value_t::array; + j.m_value.array->resize(arr.size()); + if (arr.size() > 0) + { + std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin()); + } + j.set_parents(); + j.assert_invariant(); + } +}; + +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::object_t& obj) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value = obj; + j.set_parents(); + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::object_t&& obj) + { + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value = std::move(obj); + j.set_parents(); + j.assert_invariant(); + } + + template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < !std::is_same::value, int > = 0 > + static void construct(BasicJsonType& j, const CompatibleObjectType& obj) + { + using std::begin; + using std::end; + + j.m_value.destroy(j.m_type); + j.m_type = value_t::object; + j.m_value.object = j.template create(begin(obj), end(obj)); + j.set_parents(); + j.assert_invariant(); + } +}; + +///////////// +// to_json // +///////////// + +template::value, int> = 0> +void to_json(BasicJsonType& j, T b) noexcept +{ + external_constructor::construct(j, b); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, const CompatibleString& s) +{ + external_constructor::construct(j, s); +} + +template +void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s) +{ + external_constructor::construct(j, std::move(s)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, FloatType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noexcept +{ + external_constructor::construct(j, static_cast(val)); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, EnumType e) noexcept +{ + using underlying_type = typename std::underlying_type::type; + external_constructor::construct(j, static_cast(e)); +} + +template +void to_json(BasicJsonType& j, const std::vector& e) +{ + external_constructor::construct(j, e); +} + +template < typename BasicJsonType, typename CompatibleArrayType, + enable_if_t < is_compatible_array_type::value&& + !is_compatible_object_type::value&& + !is_compatible_string_type::value&& + !std::is_same::value&& + !is_basic_json::value, + int > = 0 > +void to_json(BasicJsonType& j, const CompatibleArrayType& arr) +{ + external_constructor::construct(j, arr); +} + +template +void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) +{ + external_constructor::construct(j, bin); +} + +template::value, int> = 0> +void to_json(BasicJsonType& j, const std::valarray& arr) +{ + external_constructor::construct(j, std::move(arr)); +} + +template +void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr) +{ + external_constructor::construct(j, std::move(arr)); +} + +template < typename BasicJsonType, typename CompatibleObjectType, + enable_if_t < is_compatible_object_type::value&& !is_basic_json::value, int > = 0 > +void to_json(BasicJsonType& j, const CompatibleObjectType& obj) +{ + external_constructor::construct(j, obj); +} + +template +void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj) +{ + external_constructor::construct(j, std::move(obj)); +} + +template < + typename BasicJsonType, typename T, std::size_t N, + enable_if_t < !std::is_constructible::value, // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + int > = 0 > +void to_json(BasicJsonType& j, const T(&arr)[N]) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + external_constructor::construct(j, arr); +} + +template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > +void to_json(BasicJsonType& j, const std::pair& p) +{ + j = { p.first, p.second }; +} + +// for https://github.com/nlohmann/json/pull/1134 +template>::value, int> = 0> +void to_json(BasicJsonType& j, const T& b) +{ + j = { {b.key(), b.value()} }; +} + +template +void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence /*unused*/) +{ + j = { std::get(t)... }; +} + +template::value, int > = 0> +void to_json(BasicJsonType& j, const T& t) +{ + to_json_tuple_impl(j, t, make_index_sequence::value> {}); +} + +#ifdef JSON_HAS_CPP_17 +template +void to_json(BasicJsonType& j, const std::filesystem::path& p) +{ + j = p.string(); +} +#endif + +struct to_json_fn +{ + template + auto operator()(BasicJsonType& j, T&& val) const noexcept(noexcept(to_json(j, std::forward(val)))) + -> decltype(to_json(j, std::forward(val)), void()) + { + return to_json(j, std::forward(val)); + } +}; +} // namespace detail + +/// namespace to hold default `to_json` function +/// to see why this is required: +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4381.html +namespace // NOLINT(cert-dcl59-cpp,fuchsia-header-anon-namespaces,google-build-namespaces) +{ +constexpr const auto& to_json = detail::static_const::value; // NOLINT(misc-definitions-in-headers) +} // namespace +} // namespace nlohmann + +// #include + +// #include + + +namespace nlohmann +{ + +template +struct adl_serializer +{ + /*! + @brief convert a JSON value to any value type + + This function is usually called by the `get()` function of the + @ref basic_json class (either explicit or via conversion operators). + + @note This function is chosen for default-constructible value types. + + @param[in] j JSON value to read from + @param[in,out] val value to write to + */ + template + static auto from_json(BasicJsonType && j, TargetType& val) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), val))) + -> decltype(::nlohmann::from_json(std::forward(j), val), void()) + { + ::nlohmann::from_json(std::forward(j), val); + } + + /*! + @brief convert a JSON value to any value type + + This function is usually called by the `get()` function of the + @ref basic_json class (either explicit or via conversion operators). + + @note This function is chosen for value types which are not default-constructible. + + @param[in] j JSON value to read from + + @return copy of the JSON value, converted to @a ValueType + */ + template + static auto from_json(BasicJsonType && j) noexcept( + noexcept(::nlohmann::from_json(std::forward(j), detail::identity_tag {}))) + -> decltype(::nlohmann::from_json(std::forward(j), detail::identity_tag {})) + { + return ::nlohmann::from_json(std::forward(j), detail::identity_tag {}); + } + + /*! + @brief convert any value type to a JSON value + + This function is usually called by the constructors of the @ref basic_json + class. + + @param[in,out] j JSON value to write to + @param[in] val value to read from + */ + template + static auto to_json(BasicJsonType& j, TargetType && val) noexcept( + noexcept(::nlohmann::to_json(j, std::forward(val)))) + -> decltype(::nlohmann::to_json(j, std::forward(val)), void()) + { + ::nlohmann::to_json(j, std::forward(val)); + } +}; +} // namespace nlohmann + +// #include + + +#include // uint8_t, uint64_t +#include // tie +#include // move + +namespace nlohmann +{ + +/*! +@brief an internal type for a backed binary type + +This type extends the template parameter @a BinaryType provided to `basic_json` +with a subtype used by BSON and MessagePack. This type exists so that the user +does not have to specify a type themselves with a specific naming scheme in +order to override the binary type. + +@tparam BinaryType container to store bytes (`std::vector` by + default) + +@since version 3.8.0; changed type of subtypes to std::uint64_t in 3.10.0. +*/ +template +class byte_container_with_subtype : public BinaryType +{ + public: + /// the type of the underlying container + using container_type = BinaryType; + /// the type of the subtype + using subtype_type = std::uint64_t; + + byte_container_with_subtype() noexcept(noexcept(container_type())) + : container_type() + {} + + byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) + : container_type(b) + {} + + byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + {} + + byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b))) + : container_type(b) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + , m_subtype(subtype_) + , m_has_subtype(true) + {} + + bool operator==(const byte_container_with_subtype& rhs) const + { + return std::tie(static_cast(*this), m_subtype, m_has_subtype) == + std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); + } + + bool operator!=(const byte_container_with_subtype& rhs) const + { + return !(rhs == *this); + } + + /*! + @brief sets the binary subtype + + Sets the binary subtype of the value, also flags a binary JSON value as + having a subtype, which has implications for serialization. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa see @ref subtype() -- return the binary subtype + @sa see @ref clear_subtype() -- clears the binary subtype + @sa see @ref has_subtype() -- returns whether or not the binary value has a + subtype + + @since version 3.8.0 + */ + void set_subtype(subtype_type subtype_) noexcept + { + m_subtype = subtype_; + m_has_subtype = true; + } + + /*! + @brief return the binary subtype + + Returns the numerical subtype of the value if it has a subtype. If it does + not have a subtype, this function will return subtype_type(-1) as a sentinel + value. + + @return the numerical subtype of the binary value + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa see @ref set_subtype() -- sets the binary subtype + @sa see @ref clear_subtype() -- clears the binary subtype + @sa see @ref has_subtype() -- returns whether or not the binary value has a + subtype + + @since version 3.8.0; fixed return value to properly return + subtype_type(-1) as documented in version 3.10.0 + */ + constexpr subtype_type subtype() const noexcept + { + return m_has_subtype ? m_subtype : subtype_type(-1); + } + + /*! + @brief return whether the value has a subtype + + @return whether the value has a subtype + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa see @ref subtype() -- return the binary subtype + @sa see @ref set_subtype() -- sets the binary subtype + @sa see @ref clear_subtype() -- clears the binary subtype + + @since version 3.8.0 + */ + constexpr bool has_subtype() const noexcept + { + return m_has_subtype; + } + + /*! + @brief clears the binary subtype + + Clears the binary subtype and flags the value as not having a subtype, which + has implications for serialization; for instance MessagePack will prefer the + bin family over the ext family. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa see @ref subtype() -- return the binary subtype + @sa see @ref set_subtype() -- sets the binary subtype + @sa see @ref has_subtype() -- returns whether or not the binary value has a + subtype + + @since version 3.8.0 + */ + void clear_subtype() noexcept + { + m_subtype = 0; + m_has_subtype = false; + } + + private: + subtype_type m_subtype = 0; + bool m_has_subtype = false; +}; + +} // namespace nlohmann + +// #include + +// #include + +// #include + +// #include + + +#include // uint8_t +#include // size_t +#include // hash + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ + +// boost::hash_combine +inline std::size_t combine(std::size_t seed, std::size_t h) noexcept +{ + seed ^= h + 0x9e3779b9 + (seed << 6U) + (seed >> 2U); + return seed; +} + +/*! +@brief hash a JSON value + +The hash function tries to rely on std::hash where possible. Furthermore, the +type of the JSON value is taken into account to have different hash values for +null, 0, 0U, and false, etc. + +@tparam BasicJsonType basic_json specialization +@param j JSON value to hash +@return hash value of j +*/ +template +std::size_t hash(const BasicJsonType& j) +{ + using string_t = typename BasicJsonType::string_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + + const auto type = static_cast(j.type()); + switch (j.type()) + { + case BasicJsonType::value_t::null: + case BasicJsonType::value_t::discarded: + { + return combine(type, 0); + } + + case BasicJsonType::value_t::object: + { + auto seed = combine(type, j.size()); + for (const auto& element : j.items()) + { + const auto h = std::hash {}(element.key()); + seed = combine(seed, h); + seed = combine(seed, hash(element.value())); + } + return seed; + } + + case BasicJsonType::value_t::array: + { + auto seed = combine(type, j.size()); + for (const auto& element : j) + { + seed = combine(seed, hash(element)); + } + return seed; + } + + case BasicJsonType::value_t::string: + { + const auto h = std::hash {}(j.template get_ref()); + return combine(type, h); + } + + case BasicJsonType::value_t::boolean: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_integer: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_unsigned: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::number_float: + { + const auto h = std::hash {}(j.template get()); + return combine(type, h); + } + + case BasicJsonType::value_t::binary: + { + auto seed = combine(type, j.get_binary().size()); + const auto h = std::hash {}(j.get_binary().has_subtype()); + seed = combine(seed, h); + seed = combine(seed, static_cast(j.get_binary().subtype())); + for (const auto byte : j.get_binary()) + { + seed = combine(seed, std::hash {}(byte)); + } + return seed; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return 0; // LCOV_EXCL_LINE + } +} + +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // generate_n +#include // array +#include // ldexp +#include // size_t +#include // uint8_t, uint16_t, uint32_t, uint64_t +#include // snprintf +#include // memcpy +#include // back_inserter +#include // numeric_limits +#include // char_traits, string +#include // make_pair, move +#include // vector + +// #include + +// #include + + +#include // array +#include // size_t +#include // strlen +#include // begin, end, iterator_traits, random_access_iterator_tag, distance, next +#include // shared_ptr, make_shared, addressof +#include // accumulate +#include // string, char_traits +#include // enable_if, is_base_of, is_pointer, is_integral, remove_pointer +#include // pair, declval + +#ifndef JSON_NO_IO + #include // FILE * + #include // istream +#endif // JSON_NO_IO + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/// the supported input formats +enum class input_format_t { json, cbor, msgpack, ubjson, bson }; + +//////////////////// +// input adapters // +//////////////////// + +#ifndef JSON_NO_IO +/*! +Input adapter for stdio file access. This adapter read only 1 byte and do not use any + buffer. This adapter is a very low level adapter. +*/ +class file_input_adapter +{ + public: + using char_type = char; + + JSON_HEDLEY_NON_NULL(2) + explicit file_input_adapter(std::FILE* f) noexcept + : m_file(f) + {} + + // make class move-only + file_input_adapter(const file_input_adapter&) = delete; + file_input_adapter(file_input_adapter&&) noexcept = default; + file_input_adapter& operator=(const file_input_adapter&) = delete; + file_input_adapter& operator=(file_input_adapter&&) = delete; + ~file_input_adapter() = default; + + std::char_traits::int_type get_character() noexcept + { + return std::fgetc(m_file); + } + + private: + /// the file pointer to read from + std::FILE* m_file; +}; + + +/*! +Input adapter for a (caching) istream. Ignores a UFT Byte Order Mark at +beginning of input. Does not support changing the underlying std::streambuf +in mid-input. Maintains underlying std::istream and std::streambuf to support +subsequent use of standard std::istream operations to process any input +characters following those used in parsing the JSON input. Clears the +std::istream flags; any input errors (e.g., EOF) will be detected by the first +subsequent call for input from the std::istream. +*/ +class input_stream_adapter +{ + public: + using char_type = char; + + ~input_stream_adapter() + { + // clear stream flags; we use underlying streambuf I/O, do not + // maintain ifstream flags, except eof + if (is != nullptr) + { + is->clear(is->rdstate() & std::ios::eofbit); + } + } + + explicit input_stream_adapter(std::istream& i) + : is(&i), sb(i.rdbuf()) + {} + + // delete because of pointer members + input_stream_adapter(const input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&) = delete; + input_stream_adapter& operator=(input_stream_adapter&&) = delete; + + input_stream_adapter(input_stream_adapter&& rhs) noexcept + : is(rhs.is), sb(rhs.sb) + { + rhs.is = nullptr; + rhs.sb = nullptr; + } + + // std::istream/std::streambuf use std::char_traits::to_int_type, to + // ensure that std::char_traits::eof() and the character 0xFF do not + // end up as the same value, eg. 0xFFFFFFFF. + std::char_traits::int_type get_character() + { + auto res = sb->sbumpc(); + // set eof manually, as we don't use the istream interface. + if (JSON_HEDLEY_UNLIKELY(res == std::char_traits::eof())) + { + is->clear(is->rdstate() | std::ios::eofbit); + } + return res; + } + + private: + /// the associated input stream + std::istream* is = nullptr; + std::streambuf* sb = nullptr; +}; +#endif // JSON_NO_IO + +// General-purpose iterator-based adapter. It might not be as fast as +// theoretically possible for some containers, but it is extremely versatile. +template +class iterator_input_adapter +{ + public: + using char_type = typename std::iterator_traits::value_type; + + iterator_input_adapter(IteratorType first, IteratorType last) + : current(std::move(first)), end(std::move(last)) + {} + + typename std::char_traits::int_type get_character() + { + if (JSON_HEDLEY_LIKELY(current != end)) + { + auto result = std::char_traits::to_int_type(*current); + std::advance(current, 1); + return result; + } + + return std::char_traits::eof(); + } + + private: + IteratorType current; + IteratorType end; + + template + friend struct wide_string_input_helper; + + bool empty() const + { + return current == end; + } +}; + + +template +struct wide_string_input_helper; + +template +struct wide_string_input_helper +{ + // UTF-32 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-32 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (wc <= 0xFFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else if (wc <= 0x10FFFF) + { + utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + // unknown character + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } +}; + +template +struct wide_string_input_helper +{ + // UTF-16 + static void fill_buffer(BaseInputAdapter& input, + std::array::int_type, 4>& utf8_bytes, + size_t& utf8_bytes_index, + size_t& utf8_bytes_filled) + { + utf8_bytes_index = 0; + + if (JSON_HEDLEY_UNLIKELY(input.empty())) + { + utf8_bytes[0] = std::char_traits::eof(); + utf8_bytes_filled = 1; + } + else + { + // get the current character + const auto wc = input.get_character(); + + // UTF-16 to UTF-8 encoding + if (wc < 0x80) + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + else if (wc <= 0x7FF) + { + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 2; + } + else if (0xD800 > wc || wc >= 0xE000) + { + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); + utf8_bytes_filled = 3; + } + else + { + if (JSON_HEDLEY_UNLIKELY(!input.empty())) + { + const auto wc2 = static_cast(input.get_character()); + const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); + utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (charcode & 0x3Fu)); + utf8_bytes_filled = 4; + } + else + { + utf8_bytes[0] = static_cast::int_type>(wc); + utf8_bytes_filled = 1; + } + } + } + } +}; + +// Wraps another input apdater to convert wide character types into individual bytes. +template +class wide_string_input_adapter +{ + public: + using char_type = char; + + wide_string_input_adapter(BaseInputAdapter base) + : base_adapter(base) {} + + typename std::char_traits::int_type get_character() noexcept + { + // check if buffer needs to be filled + if (utf8_bytes_index == utf8_bytes_filled) + { + fill_buffer(); + + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index == 0); + } + + // use buffer + JSON_ASSERT(utf8_bytes_filled > 0); + JSON_ASSERT(utf8_bytes_index < utf8_bytes_filled); + return utf8_bytes[utf8_bytes_index++]; + } + + private: + BaseInputAdapter base_adapter; + + template + void fill_buffer() + { + wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); + } + + /// a buffer for UTF-8 bytes + std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; + + /// index to the utf8_codes array for the next valid byte + std::size_t utf8_bytes_index = 0; + /// number of valid bytes in the utf8_codes array + std::size_t utf8_bytes_filled = 0; +}; + + +template +struct iterator_input_adapter_factory +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using adapter_type = iterator_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(std::move(first), std::move(last)); + } +}; + +template +struct is_iterator_of_multibyte +{ + using value_type = typename std::iterator_traits::value_type; + enum + { + value = sizeof(value_type) > 1 + }; +}; + +template +struct iterator_input_adapter_factory::value>> +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using base_adapter_type = iterator_input_adapter; + using adapter_type = wide_string_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(base_adapter_type(std::move(first), std::move(last))); + } +}; + +// General purpose iterator-based input +template +typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) +{ + using factory_type = iterator_input_adapter_factory; + return factory_type::create(first, last); +} + +// Convenience shorthand from container to iterator +// Enables ADL on begin(container) and end(container) +// Encloses the using declarations in namespace for not to leak them to outside scope + +namespace container_input_adapter_factory_impl +{ + +using std::begin; +using std::end; + +template +struct container_input_adapter_factory {}; + +template +struct container_input_adapter_factory< ContainerType, + void_t()), end(std::declval()))>> + { + using adapter_type = decltype(input_adapter(begin(std::declval()), end(std::declval()))); + + static adapter_type create(const ContainerType& container) +{ + return input_adapter(begin(container), end(container)); +} + }; + +} // namespace container_input_adapter_factory_impl + +template +typename container_input_adapter_factory_impl::container_input_adapter_factory::adapter_type input_adapter(const ContainerType& container) +{ + return container_input_adapter_factory_impl::container_input_adapter_factory::create(container); +} + +#ifndef JSON_NO_IO +// Special cases with fast paths +inline file_input_adapter input_adapter(std::FILE* file) +{ + return file_input_adapter(file); +} + +inline input_stream_adapter input_adapter(std::istream& stream) +{ + return input_stream_adapter(stream); +} + +inline input_stream_adapter input_adapter(std::istream&& stream) +{ + return input_stream_adapter(stream); +} +#endif // JSON_NO_IO + +using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); + +// Null-delimited strings, and the like. +template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + !std::is_array::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > +contiguous_bytes_input_adapter input_adapter(CharT b) +{ + auto length = std::strlen(reinterpret_cast(b)); + const auto* ptr = reinterpret_cast(b); + return input_adapter(ptr, ptr + length); +} + +template +auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) +{ + return input_adapter(array, array + N); +} + +// This class only handles inputs of input_buffer_adapter type. +// It's required so that expressions like {ptr, len} can be implicitely casted +// to the correct adapter. +class span_input_adapter +{ + public: + template < typename CharT, + typename std::enable_if < + std::is_pointer::value&& + std::is_integral::type>::value&& + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > + span_input_adapter(CharT b, std::size_t l) + : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} + + template::iterator_category, std::random_access_iterator_tag>::value, + int>::type = 0> + span_input_adapter(IteratorType first, IteratorType last) + : ia(input_adapter(first, last)) {} + + contiguous_bytes_input_adapter&& get() + { + return std::move(ia); // NOLINT(hicpp-move-const-arg,performance-move-const-arg) + } + + private: + contiguous_bytes_input_adapter ia; +}; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include +#include // string +#include // move +#include // vector + +// #include + +// #include + + +namespace nlohmann +{ + +/*! +@brief SAX interface + +This class describes the SAX interface used by @ref nlohmann::json::sax_parse. +Each function is called in different situations while the input is parsed. The +boolean return value informs the parser whether to continue processing the +input. +*/ +template +struct json_sax +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @brief a null value was read + @return whether parsing should proceed + */ + virtual bool null() = 0; + + /*! + @brief a boolean value was read + @param[in] val boolean value + @return whether parsing should proceed + */ + virtual bool boolean(bool val) = 0; + + /*! + @brief an integer number was read + @param[in] val integer value + @return whether parsing should proceed + */ + virtual bool number_integer(number_integer_t val) = 0; + + /*! + @brief an unsigned integer number was read + @param[in] val unsigned integer value + @return whether parsing should proceed + */ + virtual bool number_unsigned(number_unsigned_t val) = 0; + + /*! + @brief an floating-point number was read + @param[in] val floating-point value + @param[in] s raw token value + @return whether parsing should proceed + */ + virtual bool number_float(number_float_t val, const string_t& s) = 0; + + /*! + @brief a string was read + @param[in] val string value + @return whether parsing should proceed + @note It is safe to move the passed string. + */ + virtual bool string(string_t& val) = 0; + + /*! + @brief a binary string was read + @param[in] val binary value + @return whether parsing should proceed + @note It is safe to move the passed binary. + */ + virtual bool binary(binary_t& val) = 0; + + /*! + @brief the beginning of an object was read + @param[in] elements number of object elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_object(std::size_t elements) = 0; + + /*! + @brief an object key was read + @param[in] val object key + @return whether parsing should proceed + @note It is safe to move the passed string. + */ + virtual bool key(string_t& val) = 0; + + /*! + @brief the end of an object was read + @return whether parsing should proceed + */ + virtual bool end_object() = 0; + + /*! + @brief the beginning of an array was read + @param[in] elements number of array elements or -1 if unknown + @return whether parsing should proceed + @note binary formats may report the number of elements + */ + virtual bool start_array(std::size_t elements) = 0; + + /*! + @brief the end of an array was read + @return whether parsing should proceed + */ + virtual bool end_array() = 0; + + /*! + @brief a parse error occurred + @param[in] position the position in the input where the error occurs + @param[in] last_token the last read token + @param[in] ex an exception object describing the error + @return whether parsing should proceed (must return false) + */ + virtual bool parse_error(std::size_t position, + const std::string& last_token, + const detail::exception& ex) = 0; + + json_sax() = default; + json_sax(const json_sax&) = default; + json_sax(json_sax&&) noexcept = default; + json_sax& operator=(const json_sax&) = default; + json_sax& operator=(json_sax&&) noexcept = default; + virtual ~json_sax() = default; +}; + + +namespace detail +{ +/*! +@brief SAX implementation to create a JSON value from SAX events + +This class implements the @ref json_sax interface and processes the SAX events +to create a JSON value which makes it basically a DOM parser. The structure or +hierarchy of the JSON value is managed by the stack `ref_stack` which contains +a pointer to the respective array or object for each recursion depth. + +After successful parsing, the value that is passed by reference to the +constructor contains the parsed value. + +@tparam BasicJsonType the JSON type +*/ +template +class json_sax_dom_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + /*! + @param[in,out] r reference to a JSON value that is manipulated while + parsing + @param[in] allow_exceptions_ whether parse errors yield exceptions + */ + explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_exceptions_ = true) + : root(r), allow_exceptions(allow_exceptions_) + {} + + // make class move-only + json_sax_dom_parser(const json_sax_dom_parser&) = delete; + json_sax_dom_parser(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete; + json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); + + if (JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len), *ref_stack.back())); + } + + return true; + } + + bool key(string_t& val) + { + // add null at given key and store the reference for later + object_element = &(ref_stack.back()->m_value.object->operator[](val)); + return true; + } + + bool end_object() + { + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } + + bool start_array(std::size_t len) + { + ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); + + if (JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len), *ref_stack.back())); + } + + return true; + } + + bool end_array() + { + ref_stack.back()->set_parents(); + ref_stack.pop_back(); + return true; + } + + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + /*! + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + */ + template + JSON_HEDLEY_RETURNS_NON_NULL + BasicJsonType* handle_value(Value&& v) + { + if (ref_stack.empty()) + { + root = BasicJsonType(std::forward(v)); + return &root; + } + + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->emplace_back(std::forward(v)); + return &(ref_stack.back()->m_value.array->back()); + } + + JSON_ASSERT(ref_stack.back()->is_object()); + JSON_ASSERT(object_element); + *object_element = BasicJsonType(std::forward(v)); + return object_element; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; + +template +class json_sax_dom_callback_parser +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using parser_callback_t = typename BasicJsonType::parser_callback_t; + using parse_event_t = typename BasicJsonType::parse_event_t; + + json_sax_dom_callback_parser(BasicJsonType& r, + const parser_callback_t cb, + const bool allow_exceptions_ = true) + : root(r), callback(cb), allow_exceptions(allow_exceptions_) + { + keep_stack.push_back(true); + } + + // make class move-only + json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + json_sax_dom_callback_parser& operator=(const json_sax_dom_callback_parser&) = delete; + json_sax_dom_callback_parser& operator=(json_sax_dom_callback_parser&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~json_sax_dom_callback_parser() = default; + + bool null() + { + handle_value(nullptr); + return true; + } + + bool boolean(bool val) + { + handle_value(val); + return true; + } + + bool number_integer(number_integer_t val) + { + handle_value(val); + return true; + } + + bool number_unsigned(number_unsigned_t val) + { + handle_value(val); + return true; + } + + bool number_float(number_float_t val, const string_t& /*unused*/) + { + handle_value(val); + return true; + } + + bool string(string_t& val) + { + handle_value(val); + return true; + } + + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + + bool start_object(std::size_t len) + { + // check callback for object start + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::object_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::object, true); + ref_stack.push_back(val.second); + + // check object limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len), *ref_stack.back())); + } + + return true; + } + + bool key(string_t& val) + { + BasicJsonType k = BasicJsonType(val); + + // check callback for key + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::key, k); + key_keep_stack.push_back(keep); + + // add discarded value at given key and store the reference for later + if (keep && ref_stack.back()) + { + object_element = &(ref_stack.back()->m_value.object->operator[](val) = discarded); + } + + return true; + } + + bool end_object() + { + if (ref_stack.back()) + { + if (!callback(static_cast(ref_stack.size()) - 1, parse_event_t::object_end, *ref_stack.back())) + { + // discard object + *ref_stack.back() = discarded; + } + else + { + ref_stack.back()->set_parents(); + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + if (!ref_stack.empty() && ref_stack.back() && ref_stack.back()->is_structured()) + { + // remove discarded value + for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) + { + if (it->is_discarded()) + { + ref_stack.back()->erase(it); + break; + } + } + } + + return true; + } + + bool start_array(std::size_t len) + { + const bool keep = callback(static_cast(ref_stack.size()), parse_event_t::array_start, discarded); + keep_stack.push_back(keep); + + auto val = handle_value(BasicJsonType::value_t::array, true); + ref_stack.push_back(val.second); + + // check array limit + if (ref_stack.back() && JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) && len > ref_stack.back()->max_size())) + { + JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len), *ref_stack.back())); + } + + return true; + } + + bool end_array() + { + bool keep = true; + + if (ref_stack.back()) + { + keep = callback(static_cast(ref_stack.size()) - 1, parse_event_t::array_end, *ref_stack.back()); + if (keep) + { + ref_stack.back()->set_parents(); + } + else + { + // discard array + *ref_stack.back() = discarded; + } + } + + JSON_ASSERT(!ref_stack.empty()); + JSON_ASSERT(!keep_stack.empty()); + ref_stack.pop_back(); + keep_stack.pop_back(); + + // remove discarded value + if (!keep && !ref_stack.empty() && ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->pop_back(); + } + + return true; + } + + template + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, + const Exception& ex) + { + errored = true; + static_cast(ex); + if (allow_exceptions) + { + JSON_THROW(ex); + } + return false; + } + + constexpr bool is_errored() const + { + return errored; + } + + private: + /*! + @param[in] v value to add to the JSON value we build during parsing + @param[in] skip_callback whether we should skip calling the callback + function; this is required after start_array() and + start_object() SAX events, because otherwise we would call the + callback function with an empty array or object, respectively. + + @invariant If the ref stack is empty, then the passed value will be the new + root. + @invariant If the ref stack contains a value, then it is an array or an + object to which we can add elements + + @return pair of boolean (whether value should be kept) and pointer (to the + passed value in the ref_stack hierarchy; nullptr if not kept) + */ + template + std::pair handle_value(Value&& v, const bool skip_callback = false) + { + JSON_ASSERT(!keep_stack.empty()); + + // do not handle this value if we know it would be added to a discarded + // container + if (!keep_stack.back()) + { + return {false, nullptr}; + } + + // create value + auto value = BasicJsonType(std::forward(v)); + + // check callback + const bool keep = skip_callback || callback(static_cast(ref_stack.size()), parse_event_t::value, value); + + // do not handle this value if we just learnt it shall be discarded + if (!keep) + { + return {false, nullptr}; + } + + if (ref_stack.empty()) + { + root = std::move(value); + return {true, &root}; + } + + // skip this value if we already decided to skip the parent + // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360) + if (!ref_stack.back()) + { + return {false, nullptr}; + } + + // we now only expect arrays and objects + JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object()); + + // array + if (ref_stack.back()->is_array()) + { + ref_stack.back()->m_value.array->emplace_back(std::move(value)); + return {true, &(ref_stack.back()->m_value.array->back())}; + } + + // object + JSON_ASSERT(ref_stack.back()->is_object()); + // check if we should store an element for the current key + JSON_ASSERT(!key_keep_stack.empty()); + const bool store_element = key_keep_stack.back(); + key_keep_stack.pop_back(); + + if (!store_element) + { + return {false, nullptr}; + } + + JSON_ASSERT(object_element); + *object_element = std::move(value); + return {true, object_element}; + } + + /// the parsed JSON value + BasicJsonType& root; + /// stack to model hierarchy of values + std::vector ref_stack {}; + /// stack to manage which values to keep + std::vector keep_stack {}; + /// stack to manage which object keys to keep + std::vector key_keep_stack {}; + /// helper to hold the reference for the next object element + BasicJsonType* object_element = nullptr; + /// whether a syntax error occurred + bool errored = false; + /// callback function + const parser_callback_t callback = nullptr; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; + /// a discarded value for the callback + BasicJsonType discarded = BasicJsonType::value_t::discarded; +}; + +template +class json_sax_acceptor +{ + public: + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + + bool null() + { + return true; + } + + bool boolean(bool /*unused*/) + { + return true; + } + + bool number_integer(number_integer_t /*unused*/) + { + return true; + } + + bool number_unsigned(number_unsigned_t /*unused*/) + { + return true; + } + + bool number_float(number_float_t /*unused*/, const string_t& /*unused*/) + { + return true; + } + + bool string(string_t& /*unused*/) + { + return true; + } + + bool binary(binary_t& /*unused*/) + { + return true; + } + + bool start_object(std::size_t /*unused*/ = std::size_t(-1)) + { + return true; + } + + bool key(string_t& /*unused*/) + { + return true; + } + + bool end_object() + { + return true; + } + + bool start_array(std::size_t /*unused*/ = std::size_t(-1)) + { + return true; + } + + bool end_array() + { + return true; + } + + bool parse_error(std::size_t /*unused*/, const std::string& /*unused*/, const detail::exception& /*unused*/) + { + return false; + } +}; +} // namespace detail + +} // namespace nlohmann + +// #include + + +#include // array +#include // localeconv +#include // size_t +#include // snprintf +#include // strtof, strtod, strtold, strtoll, strtoull +#include // initializer_list +#include // char_traits, string +#include // move +#include // vector + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/////////// +// lexer // +/////////// + +template +class lexer_base +{ + public: + /// token types for the parser + enum class token_type + { + uninitialized, ///< indicating the scanner is uninitialized + literal_true, ///< the `true` literal + literal_false, ///< the `false` literal + literal_null, ///< the `null` literal + value_string, ///< a string -- use get_string() for actual value + value_unsigned, ///< an unsigned integer -- use get_number_unsigned() for actual value + value_integer, ///< a signed integer -- use get_number_integer() for actual value + value_float, ///< an floating point number -- use get_number_float() for actual value + begin_array, ///< the character for array begin `[` + begin_object, ///< the character for object begin `{` + end_array, ///< the character for array end `]` + end_object, ///< the character for object end `}` + name_separator, ///< the name separator `:` + value_separator, ///< the value separator `,` + parse_error, ///< indicating a parse error + end_of_input, ///< indicating the end of the input buffer + literal_or_value ///< a literal or the begin of a value (only for diagnostics) + }; + + /// return name of values of type token_type (only used for errors) + JSON_HEDLEY_RETURNS_NON_NULL + JSON_HEDLEY_CONST + static const char* token_type_name(const token_type t) noexcept + { + switch (t) + { + case token_type::uninitialized: + return ""; + case token_type::literal_true: + return "true literal"; + case token_type::literal_false: + return "false literal"; + case token_type::literal_null: + return "null literal"; + case token_type::value_string: + return "string literal"; + case token_type::value_unsigned: + case token_type::value_integer: + case token_type::value_float: + return "number literal"; + case token_type::begin_array: + return "'['"; + case token_type::begin_object: + return "'{'"; + case token_type::end_array: + return "']'"; + case token_type::end_object: + return "'}'"; + case token_type::name_separator: + return "':'"; + case token_type::value_separator: + return "','"; + case token_type::parse_error: + return ""; + case token_type::end_of_input: + return "end of input"; + case token_type::literal_or_value: + return "'[', '{', or a literal"; + // LCOV_EXCL_START + default: // catch non-enum values + return "unknown token"; + // LCOV_EXCL_STOP + } + } +}; +/*! +@brief lexical analysis + +This class organizes the lexical analysis during JSON deserialization. +*/ +template +class lexer : public lexer_base +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + using token_type = typename lexer_base::token_type; + + explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ = false) noexcept + : ia(std::move(adapter)) + , ignore_comments(ignore_comments_) + , decimal_point_char(static_cast(get_decimal_point())) + {} + + // delete because of pointer members + lexer(const lexer&) = delete; + lexer(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + lexer& operator=(lexer&) = delete; + lexer& operator=(lexer&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~lexer() = default; + + private: + ///////////////////// + // locales + ///////////////////// + + /// return the locale-dependent decimal point + JSON_HEDLEY_PURE + static char get_decimal_point() noexcept + { + const auto* loc = localeconv(); + JSON_ASSERT(loc != nullptr); + return (loc->decimal_point == nullptr) ? '.' : *(loc->decimal_point); + } + + ///////////////////// + // scan functions + ///////////////////// + + /*! + @brief get codepoint from 4 hex characters following `\u` + + For input "\u c1 c2 c3 c4" the codepoint is: + (c1 * 0x1000) + (c2 * 0x0100) + (c3 * 0x0010) + c4 + = (c1 << 12) + (c2 << 8) + (c3 << 4) + (c4 << 0) + + Furthermore, the possible characters '0'..'9', 'A'..'F', and 'a'..'f' + must be converted to the integers 0x0..0x9, 0xA..0xF, 0xA..0xF, resp. The + conversion is done by subtracting the offset (0x30, 0x37, and 0x57) + between the ASCII value of the character and the desired integer value. + + @return codepoint (0x0000..0xFFFF) or -1 in case of an error (e.g. EOF or + non-hex character) + */ + int get_codepoint() + { + // this function only makes sense after reading `\u` + JSON_ASSERT(current == 'u'); + int codepoint = 0; + + const auto factors = { 12u, 8u, 4u, 0u }; + for (const auto factor : factors) + { + get(); + + if (current >= '0' && current <= '9') + { + codepoint += static_cast((static_cast(current) - 0x30u) << factor); + } + else if (current >= 'A' && current <= 'F') + { + codepoint += static_cast((static_cast(current) - 0x37u) << factor); + } + else if (current >= 'a' && current <= 'f') + { + codepoint += static_cast((static_cast(current) - 0x57u) << factor); + } + else + { + return -1; + } + } + + JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF); + return codepoint; + } + + /*! + @brief check if the next byte(s) are inside a given range + + Adds the current byte and, for each passed range, reads a new byte and + checks if it is inside the range. If a violation was detected, set up an + error message and return false. Otherwise, return true. + + @param[in] ranges list of integers; interpreted as list of pairs of + inclusive lower and upper bound, respectively + + @pre The passed list @a ranges must have 2, 4, or 6 elements; that is, + 1, 2, or 3 pairs. This precondition is enforced by an assertion. + + @return true if and only if no range violation was detected + */ + bool next_byte_in_range(std::initializer_list ranges) + { + JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6); + add(current); + + for (auto range = ranges.begin(); range != ranges.end(); ++range) + { + get(); + if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) + { + add(current); + } + else + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return false; + } + } + + return true; + } + + /*! + @brief scan a string literal + + This function scans a string according to Sect. 7 of RFC 8259. While + scanning, bytes are escaped and copied into buffer token_buffer. Then the + function returns successfully, token_buffer is *not* null-terminated (as it + may contain \0 bytes), and token_buffer.size() is the number of bytes in the + string. + + @return token_type::value_string if string could be successfully scanned, + token_type::parse_error otherwise + + @note In case of errors, variable error_message contains a textual + description. + */ + token_type scan_string() + { + // reset token_buffer (ignore opening quote) + reset(); + + // we entered the function by reading an open quote + JSON_ASSERT(current == '\"'); + + while (true) + { + // get next character + switch (get()) + { + // end of file while parsing string + case std::char_traits::eof(): + { + error_message = "invalid string: missing closing quote"; + return token_type::parse_error; + } + + // closing quote + case '\"': + { + return token_type::value_string; + } + + // escapes + case '\\': + { + switch (get()) + { + // quotation mark + case '\"': + add('\"'); + break; + // reverse solidus + case '\\': + add('\\'); + break; + // solidus + case '/': + add('/'); + break; + // backspace + case 'b': + add('\b'); + break; + // form feed + case 'f': + add('\f'); + break; + // line feed + case 'n': + add('\n'); + break; + // carriage return + case 'r': + add('\r'); + break; + // tab + case 't': + add('\t'); + break; + + // unicode escapes + case 'u': + { + const int codepoint1 = get_codepoint(); + int codepoint = codepoint1; // start with codepoint1 + + if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if code point is a high surrogate + if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF) + { + // expect next \uxxxx entry + if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u')) + { + const int codepoint2 = get_codepoint(); + + if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1)) + { + error_message = "invalid string: '\\u' must be followed by 4 hex digits"; + return token_type::parse_error; + } + + // check if codepoint2 is a low surrogate + if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF)) + { + // overwrite codepoint + codepoint = static_cast( + // high surrogate occupies the most significant 22 bits + (static_cast(codepoint1) << 10u) + // low surrogate occupies the least significant 15 bits + + static_cast(codepoint2) + // there is still the 0xD800, 0xDC00 and 0x10000 noise + // in the result so we have to subtract with: + // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00 + - 0x35FDC00u); + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; + return token_type::parse_error; + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF)) + { + error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF"; + return token_type::parse_error; + } + } + + // result of the above calculation yields a proper codepoint + JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF); + + // translate codepoint into bytes + if (codepoint < 0x80) + { + // 1-byte characters: 0xxxxxxx (ASCII) + add(static_cast(codepoint)); + } + else if (codepoint <= 0x7FF) + { + // 2-byte characters: 110xxxxx 10xxxxxx + add(static_cast(0xC0u | (static_cast(codepoint) >> 6u))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + else if (codepoint <= 0xFFFF) + { + // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx + add(static_cast(0xE0u | (static_cast(codepoint) >> 12u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + else + { + // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + add(static_cast(0xF0u | (static_cast(codepoint) >> 18u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 12u) & 0x3Fu))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + } + + break; + } + + // other characters after escape + default: + error_message = "invalid string: forbidden character after backslash"; + return token_type::parse_error; + } + + break; + } + + // invalid control characters + case 0x00: + { + error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000"; + return token_type::parse_error; + } + + case 0x01: + { + error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001"; + return token_type::parse_error; + } + + case 0x02: + { + error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002"; + return token_type::parse_error; + } + + case 0x03: + { + error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003"; + return token_type::parse_error; + } + + case 0x04: + { + error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004"; + return token_type::parse_error; + } + + case 0x05: + { + error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005"; + return token_type::parse_error; + } + + case 0x06: + { + error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006"; + return token_type::parse_error; + } + + case 0x07: + { + error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007"; + return token_type::parse_error; + } + + case 0x08: + { + error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b"; + return token_type::parse_error; + } + + case 0x09: + { + error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t"; + return token_type::parse_error; + } + + case 0x0A: + { + error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n"; + return token_type::parse_error; + } + + case 0x0B: + { + error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B"; + return token_type::parse_error; + } + + case 0x0C: + { + error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f"; + return token_type::parse_error; + } + + case 0x0D: + { + error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r"; + return token_type::parse_error; + } + + case 0x0E: + { + error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E"; + return token_type::parse_error; + } + + case 0x0F: + { + error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F"; + return token_type::parse_error; + } + + case 0x10: + { + error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010"; + return token_type::parse_error; + } + + case 0x11: + { + error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011"; + return token_type::parse_error; + } + + case 0x12: + { + error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012"; + return token_type::parse_error; + } + + case 0x13: + { + error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013"; + return token_type::parse_error; + } + + case 0x14: + { + error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014"; + return token_type::parse_error; + } + + case 0x15: + { + error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015"; + return token_type::parse_error; + } + + case 0x16: + { + error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016"; + return token_type::parse_error; + } + + case 0x17: + { + error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017"; + return token_type::parse_error; + } + + case 0x18: + { + error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018"; + return token_type::parse_error; + } + + case 0x19: + { + error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019"; + return token_type::parse_error; + } + + case 0x1A: + { + error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A"; + return token_type::parse_error; + } + + case 0x1B: + { + error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B"; + return token_type::parse_error; + } + + case 0x1C: + { + error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C"; + return token_type::parse_error; + } + + case 0x1D: + { + error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D"; + return token_type::parse_error; + } + + case 0x1E: + { + error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E"; + return token_type::parse_error; + } + + case 0x1F: + { + error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F"; + return token_type::parse_error; + } + + // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace)) + case 0x20: + case 0x21: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + { + add(current); + break; + } + + // U+0080..U+07FF: bytes C2..DF 80..BF + case 0xC2: + case 0xC3: + case 0xC4: + case 0xC5: + case 0xC6: + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD5: + case 0xD6: + case 0xD7: + case 0xD8: + case 0xD9: + case 0xDA: + case 0xDB: + case 0xDC: + case 0xDD: + case 0xDE: + case 0xDF: + { + if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF}))) + { + return token_type::parse_error; + } + break; + } + + // U+0800..U+0FFF: bytes E0 A0..BF 80..BF + case 0xE0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF + // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xEE: + case 0xEF: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+D000..U+D7FF: bytes ED 80..9F 80..BF + case 0xED: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF + case 0xF0: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF + case 0xF1: + case 0xF2: + case 0xF3: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF + case 0xF4: + { + if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) + { + return token_type::parse_error; + } + break; + } + + // remaining bytes (80..C1 and F5..FF) are ill-formed + default: + { + error_message = "invalid string: ill-formed UTF-8 byte"; + return token_type::parse_error; + } + } + } + } + + /*! + * @brief scan a comment + * @return whether comment could be scanned successfully + */ + bool scan_comment() + { + switch (get()) + { + // single-line comments skip input until a newline or EOF is read + case '/': + { + while (true) + { + switch (get()) + { + case '\n': + case '\r': + case std::char_traits::eof(): + case '\0': + return true; + + default: + break; + } + } + } + + // multi-line comments skip input until */ is read + case '*': + { + while (true) + { + switch (get()) + { + case std::char_traits::eof(): + case '\0': + { + error_message = "invalid comment; missing closing '*/'"; + return false; + } + + case '*': + { + switch (get()) + { + case '/': + return true; + + default: + { + unget(); + continue; + } + } + } + + default: + continue; + } + } + } + + // unexpected character after reading '/' + default: + { + error_message = "invalid comment; expecting '/' or '*' after '/'"; + return false; + } + } + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(float& f, const char* str, char** endptr) noexcept + { + f = std::strtof(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(double& f, const char* str, char** endptr) noexcept + { + f = std::strtod(str, endptr); + } + + JSON_HEDLEY_NON_NULL(2) + static void strtof(long double& f, const char* str, char** endptr) noexcept + { + f = std::strtold(str, endptr); + } + + /*! + @brief scan a number literal + + This function scans a string according to Sect. 6 of RFC 8259. + + The function is realized with a deterministic finite state machine derived + from the grammar described in RFC 8259. Starting in state "init", the + input is read and used to determined the next state. Only state "done" + accepts the number. State "error" is a trap state to model errors. In the + table below, "anything" means any character but the ones listed before. + + state | 0 | 1-9 | e E | + | - | . | anything + ---------|----------|----------|----------|---------|---------|----------|----------- + init | zero | any1 | [error] | [error] | minus | [error] | [error] + minus | zero | any1 | [error] | [error] | [error] | [error] | [error] + zero | done | done | exponent | done | done | decimal1 | done + any1 | any1 | any1 | exponent | done | done | decimal1 | done + decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error] + decimal2 | decimal2 | decimal2 | exponent | done | done | done | done + exponent | any2 | any2 | [error] | sign | sign | [error] | [error] + sign | any2 | any2 | [error] | [error] | [error] | [error] | [error] + any2 | any2 | any2 | done | done | done | done | done + + The state machine is realized with one label per state (prefixed with + "scan_number_") and `goto` statements between them. The state machine + contains cycles, but any cycle can be left when EOF is read. Therefore, + the function is guaranteed to terminate. + + During scanning, the read bytes are stored in token_buffer. This string is + then converted to a signed integer, an unsigned integer, or a + floating-point number. + + @return token_type::value_unsigned, token_type::value_integer, or + token_type::value_float if number could be successfully scanned, + token_type::parse_error otherwise + + @note The scanner is independent of the current locale. Internally, the + locale's decimal point is used instead of `.` to work with the + locale-dependent converters. + */ + token_type scan_number() // lgtm [cpp/use-of-goto] + { + // reset token_buffer to store the number's bytes + reset(); + + // the type of the parsed number; initially set to unsigned; will be + // changed if minus sign, decimal point or exponent is read + token_type number_type = token_type::value_unsigned; + + // state (init): we just found out we need to scan a number + switch (current) + { + case '-': + { + add(current); + goto scan_number_minus; + } + + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + // all other characters are rejected outside scan_number() + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + +scan_number_minus: + // state: we just parsed a leading minus sign + number_type = token_type::value_integer; + switch (get()) + { + case '0': + { + add(current); + goto scan_number_zero; + } + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + default: + { + error_message = "invalid number; expected digit after '-'"; + return token_type::parse_error; + } + } + +scan_number_zero: + // state: we just parse a zero (maybe with a leading minus sign) + switch (get()) + { + case '.': + { + add(decimal_point_char); + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_any1: + // state: we just parsed a number 0-9 (maybe with a leading minus sign) + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any1; + } + + case '.': + { + add(decimal_point_char); + goto scan_number_decimal1; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_decimal1: + // state: we just parsed a decimal point + number_type = token_type::value_float; + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + default: + { + error_message = "invalid number; expected digit after '.'"; + return token_type::parse_error; + } + } + +scan_number_decimal2: + // we just parsed at least one number after a decimal point + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_decimal2; + } + + case 'e': + case 'E': + { + add(current); + goto scan_number_exponent; + } + + default: + goto scan_number_done; + } + +scan_number_exponent: + // we just parsed an exponent + number_type = token_type::value_float; + switch (get()) + { + case '+': + case '-': + { + add(current); + goto scan_number_sign; + } + + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = + "invalid number; expected '+', '-', or digit after exponent"; + return token_type::parse_error; + } + } + +scan_number_sign: + // we just parsed an exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + { + error_message = "invalid number; expected digit after exponent sign"; + return token_type::parse_error; + } + } + +scan_number_any2: + // we just parsed a number after the exponent or exponent sign + switch (get()) + { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + add(current); + goto scan_number_any2; + } + + default: + goto scan_number_done; + } + +scan_number_done: + // unget the character after the number (we only read it to know that + // we are done scanning a number) + unget(); + + char* endptr = nullptr; // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + errno = 0; + + // try to parse integers first and fall back to floats + if (number_type == token_type::value_unsigned) + { + const auto x = std::strtoull(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno == 0) + { + value_unsigned = static_cast(x); + if (value_unsigned == x) + { + return token_type::value_unsigned; + } + } + } + else if (number_type == token_type::value_integer) + { + const auto x = std::strtoll(token_buffer.data(), &endptr, 10); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + if (errno == 0) + { + value_integer = static_cast(x); + if (value_integer == x) + { + return token_type::value_integer; + } + } + } + + // this code is reached if we parse a floating-point number or if an + // integer conversion above failed + strtof(value_float, token_buffer.data(), &endptr); + + // we checked the number format before + JSON_ASSERT(endptr == token_buffer.data() + token_buffer.size()); + + return token_type::value_float; + } + + /*! + @param[in] literal_text the literal text to expect + @param[in] length the length of the passed literal text + @param[in] return_type the token type to return on success + */ + JSON_HEDLEY_NON_NULL(2) + token_type scan_literal(const char_type* literal_text, const std::size_t length, + token_type return_type) + { + JSON_ASSERT(std::char_traits::to_char_type(current) == literal_text[0]); + for (std::size_t i = 1; i < length; ++i) + { + if (JSON_HEDLEY_UNLIKELY(std::char_traits::to_char_type(get()) != literal_text[i])) + { + error_message = "invalid literal"; + return token_type::parse_error; + } + } + return return_type; + } + + ///////////////////// + // input management + ///////////////////// + + /// reset token_buffer; current character is beginning of token + void reset() noexcept + { + token_buffer.clear(); + token_string.clear(); + token_string.push_back(std::char_traits::to_char_type(current)); + } + + /* + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a + `std::char_traits::eof()` in that case. Stores the scanned characters + for use in error messages. + + @return character read from the input + */ + char_int_type get() + { + ++position.chars_read_total; + ++position.chars_read_current_line; + + if (next_unget) + { + // just reset the next_unget variable and work with current + next_unget = false; + } + else + { + current = ia.get_character(); + } + + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) + { + token_string.push_back(std::char_traits::to_char_type(current)); + } + + if (current == '\n') + { + ++position.lines_read; + position.chars_read_current_line = 0; + } + + return current; + } + + /*! + @brief unget current character (read it again on next get) + + We implement unget by setting variable next_unget to true. The input is not + changed - we just simulate ungetting by modifying chars_read_total, + chars_read_current_line, and token_string. The next call to get() will + behave as if the unget character is read again. + */ + void unget() + { + next_unget = true; + + --position.chars_read_total; + + // in case we "unget" a newline, we have to also decrement the lines_read + if (position.chars_read_current_line == 0) + { + if (position.lines_read > 0) + { + --position.lines_read; + } + } + else + { + --position.chars_read_current_line; + } + + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) + { + JSON_ASSERT(!token_string.empty()); + token_string.pop_back(); + } + } + + /// add a character to token_buffer + void add(char_int_type c) + { + token_buffer.push_back(static_cast(c)); + } + + public: + ///////////////////// + // value getters + ///////////////////// + + /// return integer value + constexpr number_integer_t get_number_integer() const noexcept + { + return value_integer; + } + + /// return unsigned integer value + constexpr number_unsigned_t get_number_unsigned() const noexcept + { + return value_unsigned; + } + + /// return floating-point value + constexpr number_float_t get_number_float() const noexcept + { + return value_float; + } + + /// return current string value (implicitly resets the token; useful only once) + string_t& get_string() + { + return token_buffer; + } + + ///////////////////// + // diagnostics + ///////////////////// + + /// return position of last read token + constexpr position_t get_position() const noexcept + { + return position; + } + + /// return the last read token (for errors only). Will never contain EOF + /// (an arbitrary value that is not a valid char value, often -1), because + /// 255 may legitimately occur. May contain NUL, which should be escaped. + std::string get_token_string() const + { + // escape control characters + std::string result; + for (const auto c : token_string) + { + if (static_cast(c) <= '\x1F') + { + // escape control characters + std::array cs{{}}; + (std::snprintf)(cs.data(), cs.size(), "", static_cast(c)); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + result += cs.data(); + } + else + { + // add character as is + result.push_back(static_cast(c)); + } + } + + return result; + } + + /// return syntax error message + JSON_HEDLEY_RETURNS_NON_NULL + constexpr const char* get_error_message() const noexcept + { + return error_message; + } + + ///////////////////// + // actual scanner + ///////////////////// + + /*! + @brief skip the UTF-8 byte order mark + @return true iff there is no BOM or the correct BOM has been skipped + */ + bool skip_bom() + { + if (get() == 0xEF) + { + // check if we completely parse the BOM + return get() == 0xBB && get() == 0xBF; + } + + // the first character is not the beginning of the BOM; unget it to + // process is later + unget(); + return true; + } + + void skip_whitespace() + { + do + { + get(); + } + while (current == ' ' || current == '\t' || current == '\n' || current == '\r'); + } + + token_type scan() + { + // initially, skip the BOM + if (position.chars_read_total == 0 && !skip_bom()) + { + error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given"; + return token_type::parse_error; + } + + // read next character and ignore whitespace + skip_whitespace(); + + // ignore comments + while (ignore_comments && current == '/') + { + if (!scan_comment()) + { + return token_type::parse_error; + } + + // skip following whitespace + skip_whitespace(); + } + + switch (current) + { + // structural characters + case '[': + return token_type::begin_array; + case ']': + return token_type::end_array; + case '{': + return token_type::begin_object; + case '}': + return token_type::end_object; + case ':': + return token_type::name_separator; + case ',': + return token_type::value_separator; + + // literals + case 't': + { + std::array true_literal = {{char_type('t'), char_type('r'), char_type('u'), char_type('e')}}; + return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); + } + case 'f': + { + std::array false_literal = {{char_type('f'), char_type('a'), char_type('l'), char_type('s'), char_type('e')}}; + return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false); + } + case 'n': + { + std::array null_literal = {{char_type('n'), char_type('u'), char_type('l'), char_type('l')}}; + return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null); + } + + // string + case '\"': + return scan_string(); + + // number + case '-': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + return scan_number(); + + // end of input (the null byte is needed when parsing from + // string literals) + case '\0': + case std::char_traits::eof(): + return token_type::end_of_input; + + // error + default: + error_message = "invalid literal"; + return token_type::parse_error; + } + } + + private: + /// input adapter + InputAdapterType ia; + + /// whether comments should be ignored (true) or signaled as errors (false) + const bool ignore_comments = false; + + /// the current character + char_int_type current = std::char_traits::eof(); + + /// whether the next get() call should just return current + bool next_unget = false; + + /// the start position of the current token + position_t position {}; + + /// raw input token string (for error messages) + std::vector token_string {}; + + /// buffer for variable-length tokens (numbers, strings) + string_t token_buffer {}; + + /// a description of occurred lexer errors + const char* error_message = ""; + + // number values + number_integer_t value_integer = 0; + number_unsigned_t value_unsigned = 0; + number_float_t value_float = 0; + + /// the decimal point + const char_int_type decimal_point_char = '.'; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // size_t +#include // declval +#include // string + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +using null_function_t = decltype(std::declval().null()); + +template +using boolean_function_t = + decltype(std::declval().boolean(std::declval())); + +template +using number_integer_function_t = + decltype(std::declval().number_integer(std::declval())); + +template +using number_unsigned_function_t = + decltype(std::declval().number_unsigned(std::declval())); + +template +using number_float_function_t = decltype(std::declval().number_float( + std::declval(), std::declval())); + +template +using string_function_t = + decltype(std::declval().string(std::declval())); + +template +using binary_function_t = + decltype(std::declval().binary(std::declval())); + +template +using start_object_function_t = + decltype(std::declval().start_object(std::declval())); + +template +using key_function_t = + decltype(std::declval().key(std::declval())); + +template +using end_object_function_t = decltype(std::declval().end_object()); + +template +using start_array_function_t = + decltype(std::declval().start_array(std::declval())); + +template +using end_array_function_t = decltype(std::declval().end_array()); + +template +using parse_error_function_t = decltype(std::declval().parse_error( + std::declval(), std::declval(), + std::declval())); + +template +struct is_sax +{ + private: + static_assert(is_basic_json::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static constexpr bool value = + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value && + is_detected_exact::value; +}; + +template +struct is_sax_static_asserts +{ + private: + static_assert(is_basic_json::value, + "BasicJsonType must be of type basic_json<...>"); + + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using exception_t = typename BasicJsonType::exception; + + public: + static_assert(is_detected_exact::value, + "Missing/invalid function: bool null()"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool boolean(bool)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool number_integer(number_integer_t)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool number_unsigned(number_unsigned_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool number_float(number_float_t, const string_t&)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool string(string_t&)"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool binary(binary_t&)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool start_object(std::size_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool key(string_t&)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool end_object()"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool start_array(std::size_t)"); + static_assert(is_detected_exact::value, + "Missing/invalid function: bool end_array()"); + static_assert( + is_detected_exact::value, + "Missing/invalid function: bool parse_error(std::size_t, const " + "std::string&, const exception&)"); +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ + +/// how to treat CBOR tags +enum class cbor_tag_handler_t +{ + error, ///< throw a parse_error exception in case of a tag + ignore, ///< ignore tags + store ///< store tags as binary type +}; + +/*! +@brief determine system byte order + +@return true if and only if system's byte order is little endian + +@note from https://stackoverflow.com/a/1001328/266378 +*/ +static inline bool little_endianess(int num = 1) noexcept +{ + return *reinterpret_cast(&num) == 1; +} + + +/////////////////// +// binary reader // +/////////////////// + +/*! +@brief deserialization of CBOR, MessagePack, and UBJSON values +*/ +template> +class binary_reader +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using json_sax_t = SAX; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + /*! + @brief create a binary reader + + @param[in] adapter input adapter to read from + */ + explicit binary_reader(InputAdapterType&& adapter) noexcept : ia(std::move(adapter)) + { + (void)detail::is_sax_static_asserts {}; + } + + // make class move-only + binary_reader(const binary_reader&) = delete; + binary_reader(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + binary_reader& operator=(const binary_reader&) = delete; + binary_reader& operator=(binary_reader&&) = default; // NOLINT(hicpp-noexcept-move,performance-noexcept-move-constructor) + ~binary_reader() = default; + + /*! + @param[in] format the binary format to parse + @param[in] sax_ a SAX event processor + @param[in] strict whether to expect the input to be consumed completed + @param[in] tag_handler how to treat CBOR tags + + @return whether parsing was successful + */ + JSON_HEDLEY_NON_NULL(3) + bool sax_parse(const input_format_t format, + json_sax_t* sax_, + const bool strict = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + sax = sax_; + bool result = false; + + switch (format) + { + case input_format_t::bson: + result = parse_bson_internal(); + break; + + case input_format_t::cbor: + result = parse_cbor_internal(true, tag_handler); + break; + + case input_format_t::msgpack: + result = parse_msgpack_internal(); + break; + + case input_format_t::ubjson: + result = parse_ubjson_internal(); + break; + + case input_format_t::json: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + + // strict mode: next byte must be EOF + if (result && strict) + { + if (format == input_format_t::ubjson) + { + get_ignore_noop(); + } + else + { + get(); + } + + if (JSON_HEDLEY_UNLIKELY(current != std::char_traits::eof())) + { + return sax->parse_error(chars_read, get_token_string(), + parse_error::create(110, chars_read, exception_message(format, "expected end of input; last byte: 0x" + get_token_string(), "value"), BasicJsonType())); + } + } + + return result; + } + + private: + ////////// + // BSON // + ////////// + + /*! + @brief Reads in a BSON-object and passes it to the SAX-parser. + @return whether a valid BSON-value was passed to the SAX parser + */ + bool parse_bson_internal() + { + std::int32_t document_size{}; + get_number(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/false))) + { + return false; + } + + return sax->end_object(); + } + + /*! + @brief Parses a C-style string from the BSON input. + @param[in,out] result A reference to the string variable where the read + string is to be stored. + @return `true` if the \x00-byte indicating the end of the string was + encountered before the EOF; false` indicates an unexpected EOF. + */ + bool get_bson_cstr(string_t& result) + { + auto out = std::back_inserter(result); + while (true) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "cstring"))) + { + return false; + } + if (current == 0x00) + { + return true; + } + *out++ = static_cast(current); + } + } + + /*! + @brief Parses a zero-terminated string of length @a len from the BSON + input. + @param[in] len The length (including the zero-byte at the end) of the + string to be read. + @param[in,out] result A reference to the string variable where the read + string is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 1 + @return `true` if the string was successfully parsed + */ + template + bool get_bson_string(const NumberType len, string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 1)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "string length must be at least 1, is " + std::to_string(len), "string"), BasicJsonType())); + } + + return get_string(input_format_t::bson, len - static_cast(1), result) && get() != std::char_traits::eof(); + } + + /*! + @brief Parses a byte array input of length @a len from the BSON input. + @param[in] len The length of the byte array to be read. + @param[in,out] result A reference to the binary variable where the read + array is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 0 + @return `true` if the byte array was successfully parsed + */ + template + bool get_bson_binary(const NumberType len, binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 0)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "byte array length cannot be negative, is " + std::to_string(len), "binary"), BasicJsonType())); + } + + // All BSON binary values have a subtype + std::uint8_t subtype{}; + get_number(input_format_t::bson, subtype); + result.set_subtype(subtype); + + return get_binary(input_format_t::bson, len, result); + } + + /*! + @brief Read a BSON document element of the given @a element_type. + @param[in] element_type The BSON element type, c.f. http://bsonspec.org/spec.html + @param[in] element_type_parse_position The position in the input stream, + where the `element_type` was read. + @warning Not all BSON element types are supported yet. An unsupported + @a element_type will give rise to a parse_error.114: + Unsupported BSON record type 0x... + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_internal(const char_int_type element_type, + const std::size_t element_type_parse_position) + { + switch (element_type) + { + case 0x01: // double + { + double number{}; + return get_number(input_format_t::bson, number) && sax->number_float(static_cast(number), ""); + } + + case 0x02: // string + { + std::int32_t len{}; + string_t value; + return get_number(input_format_t::bson, len) && get_bson_string(len, value) && sax->string(value); + } + + case 0x03: // object + { + return parse_bson_internal(); + } + + case 0x04: // array + { + return parse_bson_array(); + } + + case 0x05: // binary + { + std::int32_t len{}; + binary_t value; + return get_number(input_format_t::bson, len) && get_bson_binary(len, value) && sax->binary(value); + } + + case 0x08: // boolean + { + return sax->boolean(get() != 0); + } + + case 0x0A: // null + { + return sax->null(); + } + + case 0x10: // int32 + { + std::int32_t value{}; + return get_number(input_format_t::bson, value) && sax->number_integer(value); + } + + case 0x12: // int64 + { + std::int64_t value{}; + return get_number(input_format_t::bson, value) && sax->number_integer(value); + } + + default: // anything else not supported (yet) + { + std::array cr{{}}; + (std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(element_type)); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + return sax->parse_error(element_type_parse_position, std::string(cr.data()), parse_error::create(114, element_type_parse_position, "Unsupported BSON record type 0x" + std::string(cr.data()), BasicJsonType())); + } + } + } + + /*! + @brief Read a BSON element list (as specified in the BSON-spec) + + The same binary layout is used for objects and arrays, hence it must be + indicated with the argument @a is_array which one is expected + (true --> array, false --> object). + + @param[in] is_array Determines if the element list being read is to be + treated as an object (@a is_array == false), or as an + array (@a is_array == true). + @return whether a valid BSON-object/array was passed to the SAX parser + */ + bool parse_bson_element_list(const bool is_array) + { + string_t key; + + while (auto element_type = get()) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::bson, "element list"))) + { + return false; + } + + const std::size_t element_type_parse_position = chars_read; + if (JSON_HEDLEY_UNLIKELY(!get_bson_cstr(key))) + { + return false; + } + + if (!is_array && !sax->key(key)) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_internal(element_type, element_type_parse_position))) + { + return false; + } + + // get_bson_cstr only appends + key.clear(); + } + + return true; + } + + /*! + @brief Reads an array from the BSON input and passes it to the SAX-parser. + @return whether a valid BSON-array was passed to the SAX parser + */ + bool parse_bson_array() + { + std::int32_t document_size{}; + get_number(input_format_t::bson, document_size); + + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_bson_element_list(/*is_array*/true))) + { + return false; + } + + return sax->end_array(); + } + + ////////// + // CBOR // + ////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true) or whether the last read character should + be considered instead (false) + @param[in] tag_handler how CBOR tags should be treated + + @return whether a valid CBOR value was passed to the SAX parser + */ + bool parse_cbor_internal(const bool get_char, + const cbor_tag_handler_t tag_handler) + { + switch (get_char ? get() : current) + { + // EOF + case std::char_traits::eof(): + return unexpect_eof(input_format_t::cbor, "value"); + + // Integer 0x00..0x17 (0..23) + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + return sax->number_unsigned(static_cast(current)); + + case 0x18: // Unsigned integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x19: // Unsigned integer (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1A: // Unsigned integer (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + case 0x1B: // Unsigned integer (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_unsigned(number); + } + + // Negative integer -1-0x00..-1-0x17 (-1..-24) + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + return sax->number_integer(static_cast(0x20 - 1 - current)); + + case 0x38: // Negative integer (one-byte uint8_t follows) + { + std::uint8_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x39: // Negative integer -1-n (two-byte uint16_t follows) + { + std::uint16_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x3A: // Negative integer -1-n (four-byte uint32_t follows) + { + std::uint32_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) - number); + } + + case 0x3B: // Negative integer -1-n (eight-byte uint64_t follows) + { + std::uint64_t number{}; + return get_number(input_format_t::cbor, number) && sax->number_integer(static_cast(-1) + - static_cast(number)); + } + + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: // Binary data (one-byte uint8_t for n follows) + case 0x59: // Binary data (two-byte uint16_t for n follow) + case 0x5A: // Binary data (four-byte uint32_t for n follow) + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + case 0x5F: // Binary data (indefinite length) + { + binary_t b; + return get_cbor_binary(b) && sax->binary(b); + } + + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + case 0x7F: // UTF-8 string (indefinite length) + { + string_t s; + return get_cbor_string(s) && sax->string(s); + } + + // array (0x00..0x17 data items follow) + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + return get_cbor_array(static_cast(static_cast(current) & 0x1Fu), tag_handler); + + case 0x98: // array (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x99: // array (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x9A: // array (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(static_cast(len), tag_handler); + } + + case 0x9B: // array (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_array(detail::conditional_static_cast(len), tag_handler); + } + + case 0x9F: // array (indefinite length) + return get_cbor_array(std::size_t(-1), tag_handler); + + // map (0x00..0x17 pairs of data items follow) + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + return get_cbor_object(static_cast(static_cast(current) & 0x1Fu), tag_handler); + + case 0xB8: // map (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xB9: // map (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xBA: // map (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(static_cast(len), tag_handler); + } + + case 0xBB: // map (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_cbor_object(detail::conditional_static_cast(len), tag_handler); + } + + case 0xBF: // map (indefinite length) + return get_cbor_object(std::size_t(-1), tag_handler); + + case 0xC6: // tagged item + case 0xC7: + case 0xC8: + case 0xC9: + case 0xCA: + case 0xCB: + case 0xCC: + case 0xCD: + case 0xCE: + case 0xCF: + case 0xD0: + case 0xD1: + case 0xD2: + case 0xD3: + case 0xD4: + case 0xD8: // tagged item (1 bytes follow) + case 0xD9: // tagged item (2 bytes follow) + case 0xDA: // tagged item (4 bytes follow) + case 0xDB: // tagged item (8 bytes follow) + { + switch (tag_handler) + { + case cbor_tag_handler_t::error: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, "invalid byte: 0x" + last_token, "value"), BasicJsonType())); + } + + case cbor_tag_handler_t::ignore: + { + // ignore binary subtype + switch (current) + { + case 0xD8: + { + std::uint8_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xD9: + { + std::uint16_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xDA: + { + std::uint32_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + case 0xDB: + { + std::uint64_t subtype_to_ignore{}; + get_number(input_format_t::cbor, subtype_to_ignore); + break; + } + default: + break; + } + return parse_cbor_internal(true, tag_handler); + } + + case cbor_tag_handler_t::store: + { + binary_t b; + // use binary subtype and store in binary container + switch (current) + { + case 0xD8: + { + std::uint8_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xD9: + { + std::uint16_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xDA: + { + std::uint32_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + case 0xDB: + { + std::uint64_t subtype{}; + get_number(input_format_t::cbor, subtype); + b.set_subtype(detail::conditional_static_cast(subtype)); + break; + } + default: + return parse_cbor_internal(true, tag_handler); + } + get(); + return get_cbor_binary(b) && sax->binary(b); + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + case 0xF4: // false + return sax->boolean(false); + + case 0xF5: // true + return sax->boolean(true); + + case 0xF6: // null + return sax->null(); + + case 0xF9: // Half-Precision Float (two-byte IEEE 754) + { + const auto byte1_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + const auto byte2_raw = get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "number"))) + { + return false; + } + + const auto byte1 = static_cast(byte1_raw); + const auto byte2 = static_cast(byte2_raw); + + // code from RFC 7049, Appendix D, Figure 3: + // As half-precision floating-point numbers were only added + // to IEEE 754 in 2008, today's programming platforms often + // still only have limited support for them. It is very + // easy to include at least decoding support for them even + // without such support. An example of a small decoder for + // half-precision floating-point numbers in the C language + // is shown in Fig. 3. + const auto half = static_cast((byte1 << 8u) + byte2); + const double val = [&half] + { + const int exp = (half >> 10u) & 0x1Fu; + const unsigned int mant = half & 0x3FFu; + JSON_ASSERT(0 <= exp&& exp <= 32); + JSON_ASSERT(mant <= 1024); + switch (exp) + { + case 0: + return std::ldexp(mant, -24); + case 31: + return (mant == 0) + ? std::numeric_limits::infinity() + : std::numeric_limits::quiet_NaN(); + default: + return std::ldexp(mant + 1024, exp - 25); + } + }(); + return sax->number_float((half & 0x8000u) != 0 + ? static_cast(-val) + : static_cast(val), ""); + } + + case 0xFA: // Single-Precision Float (four-byte IEEE 754) + { + float number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); + } + + case 0xFB: // Double-Precision Float (eight-byte IEEE 754) + { + double number{}; + return get_number(input_format_t::cbor, number) && sax->number_float(static_cast(number), ""); + } + + default: // anything else (0xFF is handled inside the other types) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::cbor, "invalid byte: 0x" + last_token, "value"), BasicJsonType())); + } + } + } + + /*! + @brief reads a CBOR string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + Additionally, CBOR's strings with indefinite lengths are supported. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_cbor_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "string"))) + { + return false; + } + + switch (current) + { + // UTF-8 string (0x00..0x17 bytes follow) + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + { + return get_string(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x78: // UTF-8 string (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x79: // UTF-8 string (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7A: // UTF-8 string (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7B: // UTF-8 string (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && get_string(input_format_t::cbor, len, result); + } + + case 0x7F: // UTF-8 string (indefinite length) + { + while (get() != 0xFF) + { + string_t chunk; + if (!get_cbor_string(chunk)) + { + return false; + } + result.append(chunk); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x60-0x7B) or indefinite string type (0x7F); last byte: 0x" + last_token, "string"), BasicJsonType())); + } + } + } + + /*! + @brief reads a CBOR byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into the byte array. + Additionally, CBOR's byte arrays with indefinite lengths are supported. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_cbor_binary(binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::cbor, "binary"))) + { + return false; + } + + switch (current) + { + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + { + return get_binary(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x58: // Binary data (one-byte uint8_t for n follows) + { + std::uint8_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x59: // Binary data (two-byte uint16_t for n follow) + { + std::uint16_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5A: // Binary data (four-byte uint32_t for n follow) + { + std::uint32_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + { + std::uint64_t len{}; + return get_number(input_format_t::cbor, len) && + get_binary(input_format_t::cbor, len, result); + } + + case 0x5F: // Binary data (indefinite length) + { + while (get() != 0xFF) + { + binary_t chunk; + if (!get_cbor_binary(chunk)) + { + return false; + } + result.insert(result.end(), chunk.begin(), chunk.end()); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x" + last_token, "binary"), BasicJsonType())); + } + } + } + + /*! + @param[in] len the length of the array or std::size_t(-1) for an + array of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether array creation completed + */ + bool get_cbor_array(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + if (len != std::size_t(-1)) + { + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(false, tag_handler))) + { + return false; + } + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object or std::size_t(-1) for an + object of indefinite size + @param[in] tag_handler how CBOR tags should be treated + @return whether object creation completed + */ + bool get_cbor_object(const std::size_t len, + const cbor_tag_handler_t tag_handler) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + if (len != 0) + { + string_t key; + if (len != std::size_t(-1)) + { + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + else + { + while (get() != 0xFF) + { + if (JSON_HEDLEY_UNLIKELY(!get_cbor_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_cbor_internal(true, tag_handler))) + { + return false; + } + key.clear(); + } + } + } + + return sax->end_object(); + } + + ///////////// + // MsgPack // + ///////////// + + /*! + @return whether a valid MessagePack value was passed to the SAX parser + */ + bool parse_msgpack_internal() + { + switch (get()) + { + // EOF + case std::char_traits::eof(): + return unexpect_eof(input_format_t::msgpack, "value"); + + // positive fixint + case 0x00: + case 0x01: + case 0x02: + case 0x03: + case 0x04: + case 0x05: + case 0x06: + case 0x07: + case 0x08: + case 0x09: + case 0x0A: + case 0x0B: + case 0x0C: + case 0x0D: + case 0x0E: + case 0x0F: + case 0x10: + case 0x11: + case 0x12: + case 0x13: + case 0x14: + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + case 0x1F: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + case 0x29: + case 0x2A: + case 0x2B: + case 0x2C: + case 0x2D: + case 0x2E: + case 0x2F: + case 0x30: + case 0x31: + case 0x32: + case 0x33: + case 0x34: + case 0x35: + case 0x36: + case 0x37: + case 0x38: + case 0x39: + case 0x3A: + case 0x3B: + case 0x3C: + case 0x3D: + case 0x3E: + case 0x3F: + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: + case 0x59: + case 0x5A: + case 0x5B: + case 0x5C: + case 0x5D: + case 0x5E: + case 0x5F: + case 0x60: + case 0x61: + case 0x62: + case 0x63: + case 0x64: + case 0x65: + case 0x66: + case 0x67: + case 0x68: + case 0x69: + case 0x6A: + case 0x6B: + case 0x6C: + case 0x6D: + case 0x6E: + case 0x6F: + case 0x70: + case 0x71: + case 0x72: + case 0x73: + case 0x74: + case 0x75: + case 0x76: + case 0x77: + case 0x78: + case 0x79: + case 0x7A: + case 0x7B: + case 0x7C: + case 0x7D: + case 0x7E: + case 0x7F: + return sax->number_unsigned(static_cast(current)); + + // fixmap + case 0x80: + case 0x81: + case 0x82: + case 0x83: + case 0x84: + case 0x85: + case 0x86: + case 0x87: + case 0x88: + case 0x89: + case 0x8A: + case 0x8B: + case 0x8C: + case 0x8D: + case 0x8E: + case 0x8F: + return get_msgpack_object(static_cast(static_cast(current) & 0x0Fu)); + + // fixarray + case 0x90: + case 0x91: + case 0x92: + case 0x93: + case 0x94: + case 0x95: + case 0x96: + case 0x97: + case 0x98: + case 0x99: + case 0x9A: + case 0x9B: + case 0x9C: + case 0x9D: + case 0x9E: + case 0x9F: + return get_msgpack_array(static_cast(static_cast(current) & 0x0Fu)); + + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + case 0xD9: // str 8 + case 0xDA: // str 16 + case 0xDB: // str 32 + { + string_t s; + return get_msgpack_string(s) && sax->string(s); + } + + case 0xC0: // nil + return sax->null(); + + case 0xC2: // false + return sax->boolean(false); + + case 0xC3: // true + return sax->boolean(true); + + case 0xC4: // bin 8 + case 0xC5: // bin 16 + case 0xC6: // bin 32 + case 0xC7: // ext 8 + case 0xC8: // ext 16 + case 0xC9: // ext 32 + case 0xD4: // fixext 1 + case 0xD5: // fixext 2 + case 0xD6: // fixext 4 + case 0xD7: // fixext 8 + case 0xD8: // fixext 16 + { + binary_t b; + return get_msgpack_binary(b) && sax->binary(b); + } + + case 0xCA: // float 32 + { + float number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); + } + + case 0xCB: // float 64 + { + double number{}; + return get_number(input_format_t::msgpack, number) && sax->number_float(static_cast(number), ""); + } + + case 0xCC: // uint 8 + { + std::uint8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCD: // uint 16 + { + std::uint16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCE: // uint 32 + { + std::uint32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xCF: // uint 64 + { + std::uint64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_unsigned(number); + } + + case 0xD0: // int 8 + { + std::int8_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD1: // int 16 + { + std::int16_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD2: // int 32 + { + std::int32_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xD3: // int 64 + { + std::int64_t number{}; + return get_number(input_format_t::msgpack, number) && sax->number_integer(number); + } + + case 0xDC: // array 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); + } + + case 0xDD: // array 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_array(static_cast(len)); + } + + case 0xDE: // map 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); + } + + case 0xDF: // map 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_msgpack_object(static_cast(len)); + } + + // negative fixint + case 0xE0: + case 0xE1: + case 0xE2: + case 0xE3: + case 0xE4: + case 0xE5: + case 0xE6: + case 0xE7: + case 0xE8: + case 0xE9: + case 0xEA: + case 0xEB: + case 0xEC: + case 0xED: + case 0xEE: + case 0xEF: + case 0xF0: + case 0xF1: + case 0xF2: + case 0xF3: + case 0xF4: + case 0xF5: + case 0xF6: + case 0xF7: + case 0xF8: + case 0xF9: + case 0xFA: + case 0xFB: + case 0xFC: + case 0xFD: + case 0xFE: + case 0xFF: + return sax->number_integer(static_cast(current)); + + default: // anything else + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::msgpack, "invalid byte: 0x" + last_token, "value"), BasicJsonType())); + } + } + } + + /*! + @brief reads a MessagePack string + + This function first reads starting bytes to determine the expected + string length and then copies this number of bytes into a string. + + @param[out] result created string + + @return whether string creation completed + */ + bool get_msgpack_string(string_t& result) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::msgpack, "string"))) + { + return false; + } + + switch (current) + { + // fixstr + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + case 0xA4: + case 0xA5: + case 0xA6: + case 0xA7: + case 0xA8: + case 0xA9: + case 0xAA: + case 0xAB: + case 0xAC: + case 0xAD: + case 0xAE: + case 0xAF: + case 0xB0: + case 0xB1: + case 0xB2: + case 0xB3: + case 0xB4: + case 0xB5: + case 0xB6: + case 0xB7: + case 0xB8: + case 0xB9: + case 0xBA: + case 0xBB: + case 0xBC: + case 0xBD: + case 0xBE: + case 0xBF: + { + return get_string(input_format_t::msgpack, static_cast(current) & 0x1Fu, result); + } + + case 0xD9: // str 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDA: // str 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + case 0xDB: // str 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && get_string(input_format_t::msgpack, len, result); + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::msgpack, "expected length specification (0xA0-0xBF, 0xD9-0xDB); last byte: 0x" + last_token, "string"), BasicJsonType())); + } + } + } + + /*! + @brief reads a MessagePack byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into a byte array. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_msgpack_binary(binary_t& result) + { + // helper function to set the subtype + auto assign_and_return_true = [&result](std::int8_t subtype) + { + result.set_subtype(static_cast(subtype)); + return true; + }; + + switch (current) + { + case 0xC4: // bin 8 + { + std::uint8_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC5: // bin 16 + { + std::uint16_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC6: // bin 32 + { + std::uint32_t len{}; + return get_number(input_format_t::msgpack, len) && + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC7: // ext 8 + { + std::uint8_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC8: // ext 16 + { + std::uint16_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xC9: // ext 32 + { + std::uint32_t len{}; + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, len) && + get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, len, result) && + assign_and_return_true(subtype); + } + + case 0xD4: // fixext 1 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 1, result) && + assign_and_return_true(subtype); + } + + case 0xD5: // fixext 2 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 2, result) && + assign_and_return_true(subtype); + } + + case 0xD6: // fixext 4 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 4, result) && + assign_and_return_true(subtype); + } + + case 0xD7: // fixext 8 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 8, result) && + assign_and_return_true(subtype); + } + + case 0xD8: // fixext 16 + { + std::int8_t subtype{}; + return get_number(input_format_t::msgpack, subtype) && + get_binary(input_format_t::msgpack, 16, result) && + assign_and_return_true(subtype); + } + + default: // LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + + /*! + @param[in] len the length of the array + @return whether array creation completed + */ + bool get_msgpack_array(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(len))) + { + return false; + } + + for (std::size_t i = 0; i < len; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + } + + return sax->end_array(); + } + + /*! + @param[in] len the length of the object + @return whether object creation completed + */ + bool get_msgpack_object(const std::size_t len) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(len))) + { + return false; + } + + string_t key; + for (std::size_t i = 0; i < len; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!get_msgpack_string(key) || !sax->key(key))) + { + return false; + } + + if (JSON_HEDLEY_UNLIKELY(!parse_msgpack_internal())) + { + return false; + } + key.clear(); + } + + return sax->end_object(); + } + + //////////// + // UBJSON // + //////////// + + /*! + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether a valid UBJSON value was passed to the SAX parser + */ + bool parse_ubjson_internal(const bool get_char = true) + { + return get_ubjson_value(get_char ? get_ignore_noop() : current); + } + + /*! + @brief reads a UBJSON string + + This function is either called after reading the 'S' byte explicitly + indicating a string, or in case of an object key where the 'S' byte can be + left out. + + @param[out] result created string + @param[in] get_char whether a new character should be retrieved from the + input (true, default) or whether the last read + character should be considered instead + + @return whether string creation completed + */ + bool get_ubjson_string(string_t& result, const bool get_char = true) + { + if (get_char) + { + get(); // TODO(niels): may we ignore N here? + } + + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "value"))) + { + return false; + } + + switch (current) + { + case 'U': + { + std::uint8_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'i': + { + std::int8_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'I': + { + std::int16_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'l': + { + std::int32_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + case 'L': + { + std::int64_t len{}; + return get_number(input_format_t::ubjson, len) && get_string(input_format_t::ubjson, len, result); + } + + default: + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "expected length type specification (U, i, I, l, L); last byte: 0x" + last_token, "string"), BasicJsonType())); + } + } + + /*! + @param[out] result determined size + @return whether size determination completed + */ + bool get_ubjson_size_value(std::size_t& result) + { + switch (get_ignore_noop()) + { + case 'U': + { + std::uint8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'i': + { + std::int8_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char + return true; + } + + case 'I': + { + std::int16_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'l': + { + std::int32_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + case 'L': + { + std::int64_t number{}; + if (JSON_HEDLEY_UNLIKELY(!get_number(input_format_t::ubjson, number))) + { + return false; + } + result = static_cast(number); + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "expected length type specification (U, i, I, l, L) after '#'; last byte: 0x" + last_token, "size"), BasicJsonType())); + } + } + } + + /*! + @brief determine the type and size for a container + + In the optimized UBJSON format, a type and a size can be provided to allow + for a more compact representation. + + @param[out] result pair of the size and the type + + @return whether pair creation completed + */ + bool get_ubjson_size_type(std::pair& result) + { + result.first = string_t::npos; // size + result.second = 0; // type + + get_ignore_noop(); + + if (current == '$') + { + result.second = get(); // must not ignore 'N', because 'N' maybe the type + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "type"))) + { + return false; + } + + get_ignore_noop(); + if (JSON_HEDLEY_UNLIKELY(current != '#')) + { + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "value"))) + { + return false; + } + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "expected '#' after type information; last byte: 0x" + last_token, "size"), BasicJsonType())); + } + + return get_ubjson_size_value(result.first); + } + + if (current == '#') + { + return get_ubjson_size_value(result.first); + } + + return true; + } + + /*! + @param prefix the previously read or set type prefix + @return whether value creation completed + */ + bool get_ubjson_value(const char_int_type prefix) + { + switch (prefix) + { + case std::char_traits::eof(): // EOF + return unexpect_eof(input_format_t::ubjson, "value"); + + case 'T': // true + return sax->boolean(true); + case 'F': // false + return sax->boolean(false); + + case 'Z': // null + return sax->null(); + + case 'U': + { + std::uint8_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_unsigned(number); + } + + case 'i': + { + std::int8_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'I': + { + std::int16_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'l': + { + std::int32_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'L': + { + std::int64_t number{}; + return get_number(input_format_t::ubjson, number) && sax->number_integer(number); + } + + case 'd': + { + float number{}; + return get_number(input_format_t::ubjson, number) && sax->number_float(static_cast(number), ""); + } + + case 'D': + { + double number{}; + return get_number(input_format_t::ubjson, number) && sax->number_float(static_cast(number), ""); + } + + case 'H': + { + return get_ubjson_high_precision_number(); + } + + case 'C': // char + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "char"))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(current > 127)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "byte after 'C' must be in range 0x00..0x7F; last byte: 0x" + last_token, "char"), BasicJsonType())); + } + string_t s(1, static_cast(current)); + return sax->string(s); + } + + case 'S': // string + { + string_t s; + return get_ubjson_string(s) && sax->string(s); + } + + case '[': // array + return get_ubjson_array(); + + case '{': // object + return get_ubjson_object(); + + default: // anything else + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::ubjson, "invalid byte: 0x" + last_token, "value"), BasicJsonType())); + } + } + } + + /*! + @return whether array creation completed + */ + bool get_ubjson_array() + { + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + if (size_and_type.first != string_t::npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + if (size_and_type.second != 'N') + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + } + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) + { + return false; + } + + while (current != ']') + { + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal(false))) + { + return false; + } + get_ignore_noop(); + } + } + + return sax->end_array(); + } + + /*! + @return whether object creation completed + */ + bool get_ubjson_object() + { + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type))) + { + return false; + } + + string_t key; + if (size_and_type.first != string_t::npos) + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(size_and_type.first))) + { + return false; + } + + if (size_and_type.second != 0) + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second))) + { + return false; + } + key.clear(); + } + } + else + { + for (std::size_t i = 0; i < size_and_type.first; ++i) + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + key.clear(); + } + } + } + else + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) + { + return false; + } + + while (current != '}') + { + if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false) || !sax->key(key))) + { + return false; + } + if (JSON_HEDLEY_UNLIKELY(!parse_ubjson_internal())) + { + return false; + } + get_ignore_noop(); + key.clear(); + } + } + + return sax->end_object(); + } + + // Note, no reader for UBJSON binary types is implemented because they do + // not exist + + bool get_ubjson_high_precision_number() + { + // get size of following number string + std::size_t size{}; + auto res = get_ubjson_size_value(size); + if (JSON_HEDLEY_UNLIKELY(!res)) + { + return res; + } + + // get number string + std::vector number_vector; + for (std::size_t i = 0; i < size; ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(input_format_t::ubjson, "number"))) + { + return false; + } + number_vector.push_back(static_cast(current)); + } + + // parse number string + using ia_type = decltype(detail::input_adapter(number_vector)); + auto number_lexer = detail::lexer(detail::input_adapter(number_vector), false); + const auto result_number = number_lexer.scan(); + const auto number_string = number_lexer.get_token_string(); + const auto result_remainder = number_lexer.scan(); + + using token_type = typename detail::lexer_base::token_type; + + if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input)) + { + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number"), BasicJsonType())); + } + + switch (result_number) + { + case token_type::value_integer: + return sax->number_integer(number_lexer.get_number_integer()); + case token_type::value_unsigned: + return sax->number_unsigned(number_lexer.get_number_unsigned()); + case token_type::value_float: + return sax->number_float(number_lexer.get_number_float(), std::move(number_string)); + case token_type::uninitialized: + case token_type::literal_true: + case token_type::literal_false: + case token_type::literal_null: + case token_type::value_string: + case token_type::begin_array: + case token_type::begin_object: + case token_type::end_array: + case token_type::end_object: + case token_type::name_separator: + case token_type::value_separator: + case token_type::parse_error: + case token_type::end_of_input: + case token_type::literal_or_value: + default: + return sax->parse_error(chars_read, number_string, parse_error::create(115, chars_read, exception_message(input_format_t::ubjson, "invalid number text: " + number_lexer.get_token_string(), "high-precision number"), BasicJsonType())); + } + } + + /////////////////////// + // Utility functions // + /////////////////////// + + /*! + @brief get next character from the input + + This function provides the interface to the used input adapter. It does + not throw in case the input reached EOF, but returns a -'ve valued + `std::char_traits::eof()` in that case. + + @return character read from the input + */ + char_int_type get() + { + ++chars_read; + return current = ia.get_character(); + } + + /*! + @return character read from the input after ignoring all 'N' entries + */ + char_int_type get_ignore_noop() + { + do + { + get(); + } + while (current == 'N'); + + return current; + } + + /* + @brief read a number from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[out] result number of type @a NumberType + + @return whether conversion completed + + @note This function needs to respect the system's endianess, because + bytes in CBOR, MessagePack, and UBJSON are stored in network order + (big endian) and therefore need reordering on little endian systems. + */ + template + bool get_number(const input_format_t format, NumberType& result) + { + // step 1: read input into array with system's byte order + std::array vec{}; + for (std::size_t i = 0; i < sizeof(NumberType); ++i) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "number"))) + { + return false; + } + + // reverse byte order prior to conversion if necessary + if (is_little_endian != InputIsLittleEndian) + { + vec[sizeof(NumberType) - i - 1] = static_cast(current); + } + else + { + vec[i] = static_cast(current); // LCOV_EXCL_LINE + } + } + + // step 2: convert array into number of type T and return + std::memcpy(&result, vec.data(), sizeof(NumberType)); + return true; + } + + /*! + @brief create a string by reading characters from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of characters to read + @param[out] result string created by reading @a len bytes + + @return whether string creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of string memory. + */ + template + bool get_string(const input_format_t format, + const NumberType len, + string_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "string"))) + { + success = false; + break; + } + result.push_back(static_cast(current)); + } + return success; + } + + /*! + @brief create a byte array by reading bytes from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of bytes to read + @param[out] result byte array created by reading @a len bytes + + @return whether byte array creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of memory. + */ + template + bool get_binary(const input_format_t format, + const NumberType len, + binary_t& result) + { + bool success = true; + for (NumberType i = 0; i < len; i++) + { + get(); + if (JSON_HEDLEY_UNLIKELY(!unexpect_eof(format, "binary"))) + { + success = false; + break; + } + result.push_back(static_cast(current)); + } + return success; + } + + /*! + @param[in] format the current format (for diagnostics) + @param[in] context further context information (for diagnostics) + @return whether the last read character is not EOF + */ + JSON_HEDLEY_NON_NULL(3) + bool unexpect_eof(const input_format_t format, const char* context) const + { + if (JSON_HEDLEY_UNLIKELY(current == std::char_traits::eof())) + { + return sax->parse_error(chars_read, "", + parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context), BasicJsonType())); + } + return true; + } + + /*! + @return a string representation of the last read byte + */ + std::string get_token_string() const + { + std::array cr{{}}; + (std::snprintf)(cr.data(), cr.size(), "%.2hhX", static_cast(current)); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + return std::string{cr.data()}; + } + + /*! + @param[in] format the current format + @param[in] detail a detailed error message + @param[in] context further context information + @return a message string to use in the parse_error exceptions + */ + std::string exception_message(const input_format_t format, + const std::string& detail, + const std::string& context) const + { + std::string error_msg = "syntax error while parsing "; + + switch (format) + { + case input_format_t::cbor: + error_msg += "CBOR"; + break; + + case input_format_t::msgpack: + error_msg += "MessagePack"; + break; + + case input_format_t::ubjson: + error_msg += "UBJSON"; + break; + + case input_format_t::bson: + error_msg += "BSON"; + break; + + case input_format_t::json: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + + return error_msg + " " + context + ": " + detail; + } + + private: + /// input adapter + InputAdapterType ia; + + /// the current character + char_int_type current = std::char_traits::eof(); + + /// the number of characters read + std::size_t chars_read = 0; + + /// whether we can assume little endianess + const bool is_little_endian = little_endianess(); + + /// the SAX parser + json_sax_t* sax = nullptr; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + + +#include // isfinite +#include // uint8_t +#include // function +#include // string +#include // move +#include // vector + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +//////////// +// parser // +//////////// + +enum class parse_event_t : std::uint8_t +{ + /// the parser read `{` and started to process a JSON object + object_start, + /// the parser read `}` and finished processing a JSON object + object_end, + /// the parser read `[` and started to process a JSON array + array_start, + /// the parser read `]` and finished processing a JSON array + array_end, + /// the parser read a key of a value in an object + key, + /// the parser finished reading a JSON value + value +}; + +template +using parser_callback_t = + std::function; + +/*! +@brief syntax analysis + +This class implements a recursive descent parser. +*/ +template +class parser +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using lexer_t = lexer; + using token_type = typename lexer_t::token_type; + + public: + /// a parser reading from an input adapter + explicit parser(InputAdapterType&& adapter, + const parser_callback_t cb = nullptr, + const bool allow_exceptions_ = true, + const bool skip_comments = false) + : callback(cb) + , m_lexer(std::move(adapter), skip_comments) + , allow_exceptions(allow_exceptions_) + { + // read first token + get_token(); + } + + /*! + @brief public parser interface + + @param[in] strict whether to expect the last token to be EOF + @param[in,out] result parsed JSON value + + @throw parse_error.101 in case of an unexpected token + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + */ + void parse(const bool strict, BasicJsonType& result) + { + if (callback) + { + json_sax_dom_callback_parser sdp(result, callback, allow_exceptions); + sax_parse_internal(&sdp); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), + exception_message(token_type::end_of_input, "value"), BasicJsonType())); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + + // set top-level value to null if it was discarded by the callback + // function + if (result.is_discarded()) + { + result = nullptr; + } + } + else + { + json_sax_dom_parser sdp(result, allow_exceptions); + sax_parse_internal(&sdp); + + // in strict mode, input must be completely read + if (strict && (get_token() != token_type::end_of_input)) + { + sdp.parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), BasicJsonType())); + } + + // in case of an error, return discarded value + if (sdp.is_errored()) + { + result = value_t::discarded; + return; + } + } + + result.assert_invariant(); + } + + /*! + @brief public accept interface + + @param[in] strict whether to expect the last token to be EOF + @return whether the input is a proper JSON text + */ + bool accept(const bool strict = true) + { + json_sax_acceptor sax_acceptor; + return sax_parse(&sax_acceptor, strict); + } + + template + JSON_HEDLEY_NON_NULL(2) + bool sax_parse(SAX* sax, const bool strict = true) + { + (void)detail::is_sax_static_asserts {}; + const bool result = sax_parse_internal(sax); + + // strict mode: next byte must be EOF + if (result && strict && (get_token() != token_type::end_of_input)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_of_input, "value"), BasicJsonType())); + } + + return result; + } + + private: + template + JSON_HEDLEY_NON_NULL(2) + bool sax_parse_internal(SAX* sax) + { + // stack to remember the hierarchy of structured values we are parsing + // true = array; false = object + std::vector states; + // value to avoid a goto (see comment where set to true) + bool skip_to_state_evaluation = false; + + while (true) + { + if (!skip_to_state_evaluation) + { + // invariant: get_token() was called before each iteration + switch (last_token) + { + case token_type::begin_object: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_object(std::size_t(-1)))) + { + return false; + } + + // closing } -> we are done + if (get_token() == token_type::end_object) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + break; + } + + // parse key + if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), BasicJsonType())); + } + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), BasicJsonType())); + } + + // remember we are now inside an object + states.push_back(false); + + // parse values + get_token(); + continue; + } + + case token_type::begin_array: + { + if (JSON_HEDLEY_UNLIKELY(!sax->start_array(std::size_t(-1)))) + { + return false; + } + + // closing ] -> we are done + if (get_token() == token_type::end_array) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + break; + } + + // remember we are now inside an array + states.push_back(true); + + // parse values (no need to call get_token) + continue; + } + + case token_type::value_float: + { + const auto res = m_lexer.get_number_float(); + + if (JSON_HEDLEY_UNLIKELY(!std::isfinite(res))) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + out_of_range::create(406, "number overflow parsing '" + m_lexer.get_token_string() + "'", BasicJsonType())); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->number_float(res, m_lexer.get_string()))) + { + return false; + } + + break; + } + + case token_type::literal_false: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(false))) + { + return false; + } + break; + } + + case token_type::literal_null: + { + if (JSON_HEDLEY_UNLIKELY(!sax->null())) + { + return false; + } + break; + } + + case token_type::literal_true: + { + if (JSON_HEDLEY_UNLIKELY(!sax->boolean(true))) + { + return false; + } + break; + } + + case token_type::value_integer: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_integer(m_lexer.get_number_integer()))) + { + return false; + } + break; + } + + case token_type::value_string: + { + if (JSON_HEDLEY_UNLIKELY(!sax->string(m_lexer.get_string()))) + { + return false; + } + break; + } + + case token_type::value_unsigned: + { + if (JSON_HEDLEY_UNLIKELY(!sax->number_unsigned(m_lexer.get_number_unsigned()))) + { + return false; + } + break; + } + + case token_type::parse_error: + { + // using "uninitialized" to avoid "expected" message + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::uninitialized, "value"), BasicJsonType())); + } + + case token_type::uninitialized: + case token_type::end_array: + case token_type::end_object: + case token_type::name_separator: + case token_type::value_separator: + case token_type::end_of_input: + case token_type::literal_or_value: + default: // the last token was unexpected + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::literal_or_value, "value"), BasicJsonType())); + } + } + } + else + { + skip_to_state_evaluation = false; + } + + // we reached this line after we successfully parsed a value + if (states.empty()) + { + // empty stack: we reached the end of the hierarchy: done + return true; + } + + if (states.back()) // array + { + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse a new value + get_token(); + continue; + } + + // closing ] + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_array())) + { + return false; + } + + // We are done with this array. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_array, "array"), BasicJsonType())); + } + + // states.back() is false -> object + + // comma -> next value + if (get_token() == token_type::value_separator) + { + // parse key + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"), BasicJsonType())); + } + + if (JSON_HEDLEY_UNLIKELY(!sax->key(m_lexer.get_string()))) + { + return false; + } + + // parse separator (:) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) + { + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::name_separator, "object separator"), BasicJsonType())); + } + + // parse values + get_token(); + continue; + } + + // closing } + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object)) + { + if (JSON_HEDLEY_UNLIKELY(!sax->end_object())) + { + return false; + } + + // We are done with this object. Before we can parse a + // new value, we need to evaluate the new state first. + // By setting skip_to_state_evaluation to false, we + // are effectively jumping to the beginning of this if. + JSON_ASSERT(!states.empty()); + states.pop_back(); + skip_to_state_evaluation = true; + continue; + } + + return sax->parse_error(m_lexer.get_position(), + m_lexer.get_token_string(), + parse_error::create(101, m_lexer.get_position(), exception_message(token_type::end_object, "object"), BasicJsonType())); + } + } + + /// get next token from lexer + token_type get_token() + { + return last_token = m_lexer.scan(); + } + + std::string exception_message(const token_type expected, const std::string& context) + { + std::string error_msg = "syntax error "; + + if (!context.empty()) + { + error_msg += "while parsing " + context + " "; + } + + error_msg += "- "; + + if (last_token == token_type::parse_error) + { + error_msg += std::string(m_lexer.get_error_message()) + "; last read: '" + + m_lexer.get_token_string() + "'"; + } + else + { + error_msg += "unexpected " + std::string(lexer_t::token_type_name(last_token)); + } + + if (expected != token_type::uninitialized) + { + error_msg += "; expected " + std::string(lexer_t::token_type_name(expected)); + } + + return error_msg; + } + + private: + /// callback function + const parser_callback_t callback = nullptr; + /// the type of the last read token + token_type last_token = token_type::uninitialized; + /// the lexer + lexer_t m_lexer; + /// whether to throw exceptions in case of errors + const bool allow_exceptions = true; +}; + +} // namespace detail +} // namespace nlohmann + +// #include + + +// #include + + +#include // ptrdiff_t +#include // numeric_limits + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/* +@brief an iterator for primitive JSON types + +This class models an iterator for primitive JSON types (boolean, number, +string). It's only purpose is to allow the iterator/const_iterator classes +to "iterate" over primitive values. Internally, the iterator is modeled by +a `difference_type` variable. Value begin_value (`0`) models the begin, +end_value (`1`) models past the end. +*/ +class primitive_iterator_t +{ + private: + using difference_type = std::ptrdiff_t; + static constexpr difference_type begin_value = 0; + static constexpr difference_type end_value = begin_value + 1; + + JSON_PRIVATE_UNLESS_TESTED: + /// iterator as signed integer type + difference_type m_it = (std::numeric_limits::min)(); + + public: + constexpr difference_type get_value() const noexcept + { + return m_it; + } + + /// set iterator to a defined beginning + void set_begin() noexcept + { + m_it = begin_value; + } + + /// set iterator to a defined past the end + void set_end() noexcept + { + m_it = end_value; + } + + /// return whether the iterator can be dereferenced + constexpr bool is_begin() const noexcept + { + return m_it == begin_value; + } + + /// return whether the iterator is at end + constexpr bool is_end() const noexcept + { + return m_it == end_value; + } + + friend constexpr bool operator==(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it == rhs.m_it; + } + + friend constexpr bool operator<(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it < rhs.m_it; + } + + primitive_iterator_t operator+(difference_type n) noexcept + { + auto result = *this; + result += n; + return result; + } + + friend constexpr difference_type operator-(primitive_iterator_t lhs, primitive_iterator_t rhs) noexcept + { + return lhs.m_it - rhs.m_it; + } + + primitive_iterator_t& operator++() noexcept + { + ++m_it; + return *this; + } + + primitive_iterator_t const operator++(int) noexcept // NOLINT(readability-const-return-type) + { + auto result = *this; + ++m_it; + return result; + } + + primitive_iterator_t& operator--() noexcept + { + --m_it; + return *this; + } + + primitive_iterator_t const operator--(int) noexcept // NOLINT(readability-const-return-type) + { + auto result = *this; + --m_it; + return result; + } + + primitive_iterator_t& operator+=(difference_type n) noexcept + { + m_it += n; + return *this; + } + + primitive_iterator_t& operator-=(difference_type n) noexcept + { + m_it -= n; + return *this; + } +}; +} // namespace detail +} // namespace nlohmann + + +namespace nlohmann +{ +namespace detail +{ +/*! +@brief an iterator value + +@note This structure could easily be a union, but MSVC currently does not allow +unions members with complex constructors, see https://github.com/nlohmann/json/pull/105. +*/ +template struct internal_iterator +{ + /// iterator for JSON objects + typename BasicJsonType::object_t::iterator object_iterator {}; + /// iterator for JSON arrays + typename BasicJsonType::array_t::iterator array_iterator {}; + /// generic iterator for all other types + primitive_iterator_t primitive_iterator {}; +}; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next +#include // conditional, is_const, remove_const + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +// forward declare, to be able to friend it later on +template class iteration_proxy; +template class iteration_proxy_value; + +/*! +@brief a template for a bidirectional iterator for the @ref basic_json class +This class implements a both iterators (iterator and const_iterator) for the +@ref basic_json class. +@note An iterator is called *initialized* when a pointer to a JSON value has + been set (e.g., by a constructor or a copy assignment). If the iterator is + default-constructed, it is *uninitialized* and most methods are undefined. + **The library uses assertions to detect calls on uninitialized iterators.** +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +@since version 1.0.0, simplified in version 2.0.9, change to bidirectional + iterators in version 3.0.0 (see https://github.com/nlohmann/json/issues/593) +*/ +template +class iter_impl +{ + /// the iterator with BasicJsonType of different const-ness + using other_iter_impl = iter_impl::value, typename std::remove_const::type, const BasicJsonType>::type>; + /// allow basic_json to access private members + friend other_iter_impl; + friend BasicJsonType; + friend iteration_proxy; + friend iteration_proxy_value; + + using object_t = typename BasicJsonType::object_t; + using array_t = typename BasicJsonType::array_t; + // make sure BasicJsonType is basic_json or const basic_json + static_assert(is_basic_json::type>::value, + "iter_impl only accepts (const) basic_json"); + + public: + + /// The std::iterator class template (used as a base class to provide typedefs) is deprecated in C++17. + /// The C++ Standard has never required user-defined iterators to derive from std::iterator. + /// A user-defined iterator should provide publicly accessible typedefs named + /// iterator_category, value_type, difference_type, pointer, and reference. + /// Note that value_type is required to be non-const, even for constant iterators. + using iterator_category = std::bidirectional_iterator_tag; + + /// the type of the values when the iterator is dereferenced + using value_type = typename BasicJsonType::value_type; + /// a type to represent differences between iterators + using difference_type = typename BasicJsonType::difference_type; + /// defines a pointer to the type iterated over (value_type) + using pointer = typename std::conditional::value, + typename BasicJsonType::const_pointer, + typename BasicJsonType::pointer>::type; + /// defines a reference to the type iterated over (value_type) + using reference = + typename std::conditional::value, + typename BasicJsonType::const_reference, + typename BasicJsonType::reference>::type; + + iter_impl() = default; + ~iter_impl() = default; + iter_impl(iter_impl&&) noexcept = default; + iter_impl& operator=(iter_impl&&) noexcept = default; + + /*! + @brief constructor for a given JSON instance + @param[in] object pointer to a JSON object for this iterator + @pre object != nullptr + @post The iterator is initialized; i.e. `m_object != nullptr`. + */ + explicit iter_impl(pointer object) noexcept : m_object(object) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = typename object_t::iterator(); + break; + } + + case value_t::array: + { + m_it.array_iterator = typename array_t::iterator(); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator = primitive_iterator_t(); + break; + } + } + } + + /*! + @note The conventional copy constructor and copy assignment are implicitly + defined. Combined with the following converting constructor and + assignment, they support: (1) copy from iterator to iterator, (2) + copy from const iterator to const iterator, and (3) conversion from + iterator to const iterator. However conversion from const iterator + to iterator is not defined. + */ + + /*! + @brief const copy constructor + @param[in] other const iterator to copy from + @note This copy constructor had to be defined explicitly to circumvent a bug + occurring on msvc v19.0 compiler (VS 2015) debug build. For more + information refer to: https://github.com/nlohmann/json/issues/1608 + */ + iter_impl(const iter_impl& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl& other) noexcept + { + if (&other != this) + { + m_object = other.m_object; + m_it = other.m_it; + } + return *this; + } + + /*! + @brief converting constructor + @param[in] other non-const iterator to copy from + @note It is not checked whether @a other is initialized. + */ + iter_impl(const iter_impl::type>& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other non-const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl::type>& other) noexcept // NOLINT(cert-oop54-cpp) + { + m_object = other.m_object; + m_it = other.m_it; + return *this; + } + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief set the iterator to the first value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_begin() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_value.object->begin(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_value.array->begin(); + break; + } + + case value_t::null: + { + // set to end so begin()==end() is true: null is empty + m_it.primitive_iterator.set_end(); + break; + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator.set_begin(); + break; + } + } + } + + /*! + @brief set the iterator past the last value + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + void set_end() noexcept + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + m_it.object_iterator = m_object->m_value.object->end(); + break; + } + + case value_t::array: + { + m_it.array_iterator = m_object->m_value.array->end(); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator.set_end(); + break; + } + } + } + + public: + /*! + @brief return a reference to the value pointed to by the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator*() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); + return m_it.object_iterator->second; + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); + return *m_it.array_iterator; + } + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value", *m_object)); + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", *m_object)); + } + } + } + + /*! + @brief dereference the iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + pointer operator->() const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + JSON_ASSERT(m_it.object_iterator != m_object->m_value.object->end()); + return &(m_it.object_iterator->second); + } + + case value_t::array: + { + JSON_ASSERT(m_it.array_iterator != m_object->m_value.array->end()); + return &*m_it.array_iterator; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) + { + return m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", *m_object)); + } + } + } + + /*! + @brief post-increment (it++) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl const operator++(int) // NOLINT(readability-const-return-type) + { + auto result = *this; + ++(*this); + return result; + } + + /*! + @brief pre-increment (++it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator++() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, 1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, 1); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + ++m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief post-decrement (it--) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl const operator--(int) // NOLINT(readability-const-return-type) + { + auto result = *this; + --(*this); + return result; + } + + /*! + @brief pre-decrement (--it) + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator--() + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + { + std::advance(m_it.object_iterator, -1); + break; + } + + case value_t::array: + { + std::advance(m_it.array_iterator, -1); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + --m_it.primitive_iterator; + break; + } + } + + return *this; + } + + /*! + @brief comparison: equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + template < typename IterImpl, detail::enable_if_t < (std::is_same::value || std::is_same::value), std::nullptr_t > = nullptr > + bool operator==(const IterImpl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", *m_object)); + } + + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + return (m_it.object_iterator == other.m_it.object_iterator); + + case value_t::array: + return (m_it.array_iterator == other.m_it.array_iterator); + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return (m_it.primitive_iterator == other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: not equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + template < typename IterImpl, detail::enable_if_t < (std::is_same::value || std::is_same::value), std::nullptr_t > = nullptr > + bool operator!=(const IterImpl& other) const + { + return !operator==(other); + } + + /*! + @brief comparison: smaller + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator<(const iter_impl& other) const + { + // if objects are not the same, the comparison is undefined + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) + { + JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers", *m_object)); + } + + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(213, "cannot compare order of object iterators", *m_object)); + + case value_t::array: + return (m_it.array_iterator < other.m_it.array_iterator); + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return (m_it.primitive_iterator < other.m_it.primitive_iterator); + } + } + + /*! + @brief comparison: less than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator<=(const iter_impl& other) const + { + return !other.operator < (*this); + } + + /*! + @brief comparison: greater than + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator>(const iter_impl& other) const + { + return !operator<=(other); + } + + /*! + @brief comparison: greater than or equal + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + bool operator>=(const iter_impl& other) const + { + return !operator<(other); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator+=(difference_type i) + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", *m_object)); + + case value_t::array: + { + std::advance(m_it.array_iterator, i); + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + m_it.primitive_iterator += i; + break; + } + } + + return *this; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl& operator-=(difference_type i) + { + return operator+=(-i); + } + + /*! + @brief add to iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator+(difference_type i) const + { + auto result = *this; + result += i; + return result; + } + + /*! + @brief addition of distance and iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + friend iter_impl operator+(difference_type i, const iter_impl& it) + { + auto result = it; + result += i; + return result; + } + + /*! + @brief subtract from iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + iter_impl operator-(difference_type i) const + { + auto result = *this; + result -= i; + return result; + } + + /*! + @brief return difference + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + difference_type operator-(const iter_impl& other) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(209, "cannot use offsets with object iterators", *m_object)); + + case value_t::array: + return m_it.array_iterator - other.m_it.array_iterator; + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + return m_it.primitive_iterator - other.m_it.primitive_iterator; + } + } + + /*! + @brief access to successor + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference operator[](difference_type n) const + { + JSON_ASSERT(m_object != nullptr); + + switch (m_object->m_type) + { + case value_t::object: + JSON_THROW(invalid_iterator::create(208, "cannot use operator[] for object iterators", *m_object)); + + case value_t::array: + return *std::next(m_it.array_iterator, n); + + case value_t::null: + JSON_THROW(invalid_iterator::create(214, "cannot get value", *m_object)); + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) + { + return *m_object; + } + + JSON_THROW(invalid_iterator::create(214, "cannot get value", *m_object)); + } + } + } + + /*! + @brief return the key of an object iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + const typename object_t::key_type& key() const + { + JSON_ASSERT(m_object != nullptr); + + if (JSON_HEDLEY_LIKELY(m_object->is_object())) + { + return m_it.object_iterator->first; + } + + JSON_THROW(invalid_iterator::create(207, "cannot use key() for non-object iterators", *m_object)); + } + + /*! + @brief return the value of an iterator + @pre The iterator is initialized; i.e. `m_object != nullptr`. + */ + reference value() const + { + return operator*(); + } + + JSON_PRIVATE_UNLESS_TESTED: + /// associated JSON instance + pointer m_object = nullptr; + /// the actual iterator of the associated instance + internal_iterator::type> m_it {}; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // ptrdiff_t +#include // reverse_iterator +#include // declval + +namespace nlohmann +{ +namespace detail +{ +////////////////////// +// reverse_iterator // +////////////////////// + +/*! +@brief a template for a reverse iterator class + +@tparam Base the base iterator type to reverse. Valid types are @ref +iterator (to create @ref reverse_iterator) and @ref const_iterator (to +create @ref const_reverse_iterator). + +@requirement The class satisfies the following concept requirements: +- +[BidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator): + The iterator that can be moved can be moved in both directions (i.e. + incremented and decremented). +- [OutputIterator](https://en.cppreference.com/w/cpp/named_req/OutputIterator): + It is possible to write to the pointed-to element (only if @a Base is + @ref iterator). + +@since version 1.0.0 +*/ +template +class json_reverse_iterator : public std::reverse_iterator +{ + public: + using difference_type = std::ptrdiff_t; + /// shortcut to the reverse iterator adapter + using base_iterator = std::reverse_iterator; + /// the reference type for the pointed-to element + using reference = typename Base::reference; + + /// create reverse iterator from iterator + explicit json_reverse_iterator(const typename base_iterator::iterator_type& it) noexcept + : base_iterator(it) {} + + /// create reverse iterator from base class + explicit json_reverse_iterator(const base_iterator& it) noexcept : base_iterator(it) {} + + /// post-increment (it++) + json_reverse_iterator const operator++(int) // NOLINT(readability-const-return-type) + { + return static_cast(base_iterator::operator++(1)); + } + + /// pre-increment (++it) + json_reverse_iterator& operator++() + { + return static_cast(base_iterator::operator++()); + } + + /// post-decrement (it--) + json_reverse_iterator const operator--(int) // NOLINT(readability-const-return-type) + { + return static_cast(base_iterator::operator--(1)); + } + + /// pre-decrement (--it) + json_reverse_iterator& operator--() + { + return static_cast(base_iterator::operator--()); + } + + /// add to iterator + json_reverse_iterator& operator+=(difference_type i) + { + return static_cast(base_iterator::operator+=(i)); + } + + /// add to iterator + json_reverse_iterator operator+(difference_type i) const + { + return static_cast(base_iterator::operator+(i)); + } + + /// subtract from iterator + json_reverse_iterator operator-(difference_type i) const + { + return static_cast(base_iterator::operator-(i)); + } + + /// return difference + difference_type operator-(const json_reverse_iterator& other) const + { + return base_iterator(*this) - base_iterator(other); + } + + /// access to successor + reference operator[](difference_type n) const + { + return *(this->operator+(n)); + } + + /// return the key of an object iterator + auto key() const -> decltype(std::declval().key()) + { + auto it = --this->base(); + return it.key(); + } + + /// return the value of an iterator + reference value() const + { + auto it = --this->base(); + return it.operator * (); + } +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // all_of +#include // isdigit +#include // max +#include // accumulate +#include // string +#include // move +#include // vector + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +template +class json_pointer +{ + // allow basic_json to access private members + NLOHMANN_BASIC_JSON_TPL_DECLARATION + friend class basic_json; + + public: + /*! + @brief create JSON pointer + + Create a JSON pointer according to the syntax described in + [Section 3 of RFC6901](https://tools.ietf.org/html/rfc6901#section-3). + + @param[in] s string representing the JSON pointer; if omitted, the empty + string is assumed which references the whole JSON value + + @throw parse_error.107 if the given JSON pointer @a s is nonempty and does + not begin with a slash (`/`); see example below + + @throw parse_error.108 if a tilde (`~`) in the given JSON pointer @a s is + not followed by `0` (representing `~`) or `1` (representing `/`); see + example below + + @liveexample{The example shows the construction several valid JSON pointers + as well as the exceptional behavior.,json_pointer} + + @since version 2.0.0 + */ + explicit json_pointer(const std::string& s = "") + : reference_tokens(split(s)) + {} + + /*! + @brief return a string representation of the JSON pointer + + @invariant For each JSON pointer `ptr`, it holds: + @code {.cpp} + ptr == json_pointer(ptr.to_string()); + @endcode + + @return a string representation of the JSON pointer + + @liveexample{The example shows the result of `to_string`.,json_pointer__to_string} + + @since version 2.0.0 + */ + std::string to_string() const + { + return std::accumulate(reference_tokens.begin(), reference_tokens.end(), + std::string{}, + [](const std::string & a, const std::string & b) + { + return a + "/" + detail::escape(b); + }); + } + + /// @copydoc to_string() + operator std::string() const + { + return to_string(); + } + + /*! + @brief append another JSON pointer at the end of this JSON pointer + + @param[in] ptr JSON pointer to append + @return JSON pointer with @a ptr appended + + @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} + + @complexity Linear in the length of @a ptr. + + @sa see @ref operator/=(std::string) to append a reference token + @sa see @ref operator/=(std::size_t) to append an array index + @sa see @ref operator/(const json_pointer&, const json_pointer&) for a binary operator + + @since version 3.6.0 + */ + json_pointer& operator/=(const json_pointer& ptr) + { + reference_tokens.insert(reference_tokens.end(), + ptr.reference_tokens.begin(), + ptr.reference_tokens.end()); + return *this; + } + + /*! + @brief append an unescaped reference token at the end of this JSON pointer + + @param[in] token reference token to append + @return JSON pointer with @a token appended without escaping @a token + + @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} + + @complexity Amortized constant. + + @sa see @ref operator/=(const json_pointer&) to append a JSON pointer + @sa see @ref operator/=(std::size_t) to append an array index + @sa see @ref operator/(const json_pointer&, std::size_t) for a binary operator + + @since version 3.6.0 + */ + json_pointer& operator/=(std::string token) + { + push_back(std::move(token)); + return *this; + } + + /*! + @brief append an array index at the end of this JSON pointer + + @param[in] array_idx array index to append + @return JSON pointer with @a array_idx appended + + @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} + + @complexity Amortized constant. + + @sa see @ref operator/=(const json_pointer&) to append a JSON pointer + @sa see @ref operator/=(std::string) to append a reference token + @sa see @ref operator/(const json_pointer&, std::string) for a binary operator + + @since version 3.6.0 + */ + json_pointer& operator/=(std::size_t array_idx) + { + return *this /= std::to_string(array_idx); + } + + /*! + @brief create a new JSON pointer by appending the right JSON pointer at the end of the left JSON pointer + + @param[in] lhs JSON pointer + @param[in] rhs JSON pointer + @return a new JSON pointer with @a rhs appended to @a lhs + + @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} + + @complexity Linear in the length of @a lhs and @a rhs. + + @sa see @ref operator/=(const json_pointer&) to append a JSON pointer + + @since version 3.6.0 + */ + friend json_pointer operator/(const json_pointer& lhs, + const json_pointer& rhs) + { + return json_pointer(lhs) /= rhs; + } + + /*! + @brief create a new JSON pointer by appending the unescaped token at the end of the JSON pointer + + @param[in] ptr JSON pointer + @param[in] token reference token + @return a new JSON pointer with unescaped @a token appended to @a ptr + + @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} + + @complexity Linear in the length of @a ptr. + + @sa see @ref operator/=(std::string) to append a reference token + + @since version 3.6.0 + */ + friend json_pointer operator/(const json_pointer& ptr, std::string token) // NOLINT(performance-unnecessary-value-param) + { + return json_pointer(ptr) /= std::move(token); + } + + /*! + @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer + + @param[in] ptr JSON pointer + @param[in] array_idx array index + @return a new JSON pointer with @a array_idx appended to @a ptr + + @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} + + @complexity Linear in the length of @a ptr. + + @sa see @ref operator/=(std::size_t) to append an array index + + @since version 3.6.0 + */ + friend json_pointer operator/(const json_pointer& ptr, std::size_t array_idx) + { + return json_pointer(ptr) /= array_idx; + } + + /*! + @brief returns the parent of this JSON pointer + + @return parent of this JSON pointer; in case this JSON pointer is the root, + the root itself is returned + + @complexity Linear in the length of the JSON pointer. + + @liveexample{The example shows the result of `parent_pointer` for different + JSON Pointers.,json_pointer__parent_pointer} + + @since version 3.6.0 + */ + json_pointer parent_pointer() const + { + if (empty()) + { + return *this; + } + + json_pointer res = *this; + res.pop_back(); + return res; + } + + /*! + @brief remove last reference token + + @pre not `empty()` + + @liveexample{The example shows the usage of `pop_back`.,json_pointer__pop_back} + + @complexity Constant. + + @throw out_of_range.405 if JSON pointer has no parent + + @since version 3.6.0 + */ + void pop_back() + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", BasicJsonType())); + } + + reference_tokens.pop_back(); + } + + /*! + @brief return last reference token + + @pre not `empty()` + @return last reference token + + @liveexample{The example shows the usage of `back`.,json_pointer__back} + + @complexity Constant. + + @throw out_of_range.405 if JSON pointer has no parent + + @since version 3.6.0 + */ + const std::string& back() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", BasicJsonType())); + } + + return reference_tokens.back(); + } + + /*! + @brief append an unescaped token at the end of the reference pointer + + @param[in] token token to add + + @complexity Amortized constant. + + @liveexample{The example shows the result of `push_back` for different + JSON Pointers.,json_pointer__push_back} + + @since version 3.6.0 + */ + void push_back(const std::string& token) + { + reference_tokens.push_back(token); + } + + /// @copydoc push_back(const std::string&) + void push_back(std::string&& token) + { + reference_tokens.push_back(std::move(token)); + } + + /*! + @brief return whether pointer points to the root document + + @return true iff the JSON pointer points to the root document + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example shows the result of `empty` for different JSON + Pointers.,json_pointer__empty} + + @since version 3.6.0 + */ + bool empty() const noexcept + { + return reference_tokens.empty(); + } + + private: + /*! + @param[in] s reference token to be converted into an array index + + @return integer representation of @a s + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index begins not with a digit + @throw out_of_range.404 if string @a s could not be converted to an integer + @throw out_of_range.410 if an array index exceeds size_type + */ + static typename BasicJsonType::size_type array_index(const std::string& s) + { + using size_type = typename BasicJsonType::size_type; + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && s[0] == '0')) + { + JSON_THROW(detail::parse_error::create(106, 0, "array index '" + s + "' must not begin with '0'", BasicJsonType())); + } + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 && !(s[0] >= '1' && s[0] <= '9'))) + { + JSON_THROW(detail::parse_error::create(109, 0, "array index '" + s + "' is not a number", BasicJsonType())); + } + + std::size_t processed_chars = 0; + unsigned long long res = 0; // NOLINT(runtime/int) + JSON_TRY + { + res = std::stoull(s, &processed_chars); + } + JSON_CATCH(std::out_of_range&) + { + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'", BasicJsonType())); + } + + // check if the string was completely read + if (JSON_HEDLEY_UNLIKELY(processed_chars != s.size())) + { + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'", BasicJsonType())); + } + + // only triggered on special platforms (like 32bit), see also + // https://github.com/nlohmann/json/pull/2203 + if (res >= static_cast((std::numeric_limits::max)())) // NOLINT(runtime/int) + { + JSON_THROW(detail::out_of_range::create(410, "array index " + s + " exceeds size_type", BasicJsonType())); // LCOV_EXCL_LINE + } + + return static_cast(res); + } + + JSON_PRIVATE_UNLESS_TESTED: + json_pointer top() const + { + if (JSON_HEDLEY_UNLIKELY(empty())) + { + JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent", BasicJsonType())); + } + + json_pointer result = *this; + result.reference_tokens = {reference_tokens[0]}; + return result; + } + + private: + /*! + @brief create and return a reference to the pointed to value + + @complexity Linear in the number of reference tokens. + + @throw parse_error.109 if array index is not a number + @throw type_error.313 if value cannot be unflattened + */ + BasicJsonType& get_and_create(BasicJsonType& j) const + { + auto* result = &j; + + // in case no reference tokens exist, return a reference to the JSON value + // j which will be overwritten by a primitive value + for (const auto& reference_token : reference_tokens) + { + switch (result->type()) + { + case detail::value_t::null: + { + if (reference_token == "0") + { + // start a new array if reference token is 0 + result = &result->operator[](0); + } + else + { + // start a new object otherwise + result = &result->operator[](reference_token); + } + break; + } + + case detail::value_t::object: + { + // create an entry in the object + result = &result->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + // create an entry in the array + result = &result->operator[](array_index(reference_token)); + break; + } + + /* + The following code is only reached if there exists a reference + token _and_ the current value is primitive. In this case, we have + an error situation, because primitive values may only occur as + single value; that is, with an empty list of reference tokens. + */ + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::type_error::create(313, "invalid value to unflatten", j)); + } + } + + return *result; + } + + /*! + @brief return a reference to the pointed to value + + @note This version does not throw if a value is not present, but tries to + create nested values instead. For instance, calling this function + with pointer `"/this/that"` on a null value is equivalent to calling + `operator[]("this").operator[]("that")` on that value, effectively + changing the null value to an object. + + @param[in] ptr a JSON value + + @return reference to the JSON value pointed to by the JSON pointer + + @complexity Linear in the length of the JSON pointer. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + BasicJsonType& get_unchecked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + // convert null values to arrays or objects before continuing + if (ptr->is_null()) + { + // check if reference token is a number + const bool nums = + std::all_of(reference_token.begin(), reference_token.end(), + [](const unsigned char x) + { + return std::isdigit(x); + }); + + // change value to array for numbers or "-" or to object otherwise + *ptr = (nums || reference_token == "-") + ? detail::value_t::array + : detail::value_t::object; + } + + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (reference_token == "-") + { + // explicitly treat "-" as index beyond the end + ptr = &ptr->operator[](ptr->m_value.array->size()); + } + else + { + // convert array index to number; unchecked access + ptr = &ptr->operator[](array_index(reference_token)); + } + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'", *ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + BasicJsonType& get_checked(BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, + "array index '-' (" + std::to_string(ptr->m_value.array->size()) + + ") is out of range", *ptr)); + } + + // note: at performs range check + ptr = &ptr->at(array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'", *ptr)); + } + } + + return *ptr; + } + + /*! + @brief return a const reference to the pointed to value + + @param[in] ptr a JSON value + + @return const reference to the JSON value pointed to by the JSON + pointer + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + const BasicJsonType& get_unchecked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // use unchecked object access + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" cannot be used for const access + JSON_THROW(detail::out_of_range::create(402, "array index '-' (" + std::to_string(ptr->m_value.array->size()) + ") is out of range", *ptr)); + } + + // use unchecked array access + ptr = &ptr->operator[](array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'", *ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + */ + const BasicJsonType& get_checked(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + // note: at performs range check + ptr = &ptr->at(reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + JSON_THROW(detail::out_of_range::create(402, + "array index '-' (" + std::to_string(ptr->m_value.array->size()) + + ") is out of range", *ptr)); + } + + // note: at performs range check + ptr = &ptr->at(array_index(reference_token)); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'", *ptr)); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + */ + bool contains(const BasicJsonType* ptr) const + { + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + if (!ptr->contains(reference_token)) + { + // we did not find the key in the object + return false; + } + + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9"))) + { + // invalid char + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1)) + { + if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9'))) + { + // first char should be between '1' and '9' + return false; + } + for (std::size_t i = 1; i < reference_token.size(); i++) + { + if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9'))) + { + // other char should be between '0' and '9' + return false; + } + } + } + + const auto idx = array_index(reference_token); + if (idx >= ptr->size()) + { + // index out of range + return false; + } + + ptr = &ptr->operator[](idx); + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + { + // we do not expect primitive values if there is still a + // reference token to process + return false; + } + } + } + + // no reference token left means we found a primitive value + return true; + } + + /*! + @brief split the string input to reference tokens + + @note This function is only called by the json_pointer constructor. + All exceptions below are documented there. + + @throw parse_error.107 if the pointer is not empty or begins with '/' + @throw parse_error.108 if character '~' is not followed by '0' or '1' + */ + static std::vector split(const std::string& reference_string) + { + std::vector result; + + // special case: empty reference string -> no reference tokens + if (reference_string.empty()) + { + return result; + } + + // check if nonempty reference string begins with slash + if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/')) + { + JSON_THROW(detail::parse_error::create(107, 1, "JSON pointer must be empty or begin with '/' - was: '" + reference_string + "'", BasicJsonType())); + } + + // extract the reference tokens: + // - slash: position of the last read slash (or end of string) + // - start: position after the previous slash + for ( + // search for the first slash after the first character + std::size_t slash = reference_string.find_first_of('/', 1), + // set the beginning of the first reference token + start = 1; + // we can stop if start == 0 (if slash == std::string::npos) + start != 0; + // set the beginning of the next reference token + // (will eventually be 0 if slash == std::string::npos) + start = (slash == std::string::npos) ? 0 : slash + 1, + // find next slash + slash = reference_string.find_first_of('/', start)) + { + // use the text between the beginning of the reference token + // (start) and the last slash (slash). + auto reference_token = reference_string.substr(start, slash - start); + + // check reference tokens are properly escaped + for (std::size_t pos = reference_token.find_first_of('~'); + pos != std::string::npos; + pos = reference_token.find_first_of('~', pos + 1)) + { + JSON_ASSERT(reference_token[pos] == '~'); + + // ~ must be followed by 0 or 1 + if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 || + (reference_token[pos + 1] != '0' && + reference_token[pos + 1] != '1'))) + { + JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'", BasicJsonType())); + } + } + + // finally, store the reference token + detail::unescape(reference_token); + result.push_back(reference_token); + } + + return result; + } + + private: + /*! + @param[in] reference_string the reference string to the current value + @param[in] value the value to consider + @param[in,out] result the result object to insert values to + + @note Empty objects or arrays are flattened to `null`. + */ + static void flatten(const std::string& reference_string, + const BasicJsonType& value, + BasicJsonType& result) + { + switch (value.type()) + { + case detail::value_t::array: + { + if (value.m_value.array->empty()) + { + // flatten empty array as null + result[reference_string] = nullptr; + } + else + { + // iterate array and use index as reference string + for (std::size_t i = 0; i < value.m_value.array->size(); ++i) + { + flatten(reference_string + "/" + std::to_string(i), + value.m_value.array->operator[](i), result); + } + } + break; + } + + case detail::value_t::object: + { + if (value.m_value.object->empty()) + { + // flatten empty object as null + result[reference_string] = nullptr; + } + else + { + // iterate object and use keys as reference string + for (const auto& element : *value.m_value.object) + { + flatten(reference_string + "/" + detail::escape(element.first), element.second, result); + } + } + break; + } + + case detail::value_t::null: + case detail::value_t::string: + case detail::value_t::boolean: + case detail::value_t::number_integer: + case detail::value_t::number_unsigned: + case detail::value_t::number_float: + case detail::value_t::binary: + case detail::value_t::discarded: + default: + { + // add primitive value with its reference string + result[reference_string] = value; + break; + } + } + } + + /*! + @param[in] value flattened JSON + + @return unflattened JSON + + @throw parse_error.109 if array index is not a number + @throw type_error.314 if value is not an object + @throw type_error.315 if object values are not primitive + @throw type_error.313 if value cannot be unflattened + */ + static BasicJsonType + unflatten(const BasicJsonType& value) + { + if (JSON_HEDLEY_UNLIKELY(!value.is_object())) + { + JSON_THROW(detail::type_error::create(314, "only objects can be unflattened", value)); + } + + BasicJsonType result; + + // iterate the JSON object values + for (const auto& element : *value.m_value.object) + { + if (JSON_HEDLEY_UNLIKELY(!element.second.is_primitive())) + { + JSON_THROW(detail::type_error::create(315, "values in object must be primitive", element.second)); + } + + // assign value to reference pointed to by JSON pointer; Note that if + // the JSON pointer is "" (i.e., points to the whole value), function + // get_and_create returns a reference to result itself. An assignment + // will then create a primitive value. + json_pointer(element.first).get_and_create(result) = element.second; + } + + return result; + } + + /*! + @brief compares two JSON pointers for equality + + @param[in] lhs JSON pointer to compare + @param[in] rhs JSON pointer to compare + @return whether @a lhs is equal to @a rhs + + @complexity Linear in the length of the JSON pointer + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + */ + friend bool operator==(json_pointer const& lhs, + json_pointer const& rhs) noexcept + { + return lhs.reference_tokens == rhs.reference_tokens; + } + + /*! + @brief compares two JSON pointers for inequality + + @param[in] lhs JSON pointer to compare + @param[in] rhs JSON pointer to compare + @return whether @a lhs is not equal @a rhs + + @complexity Linear in the length of the JSON pointer + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + */ + friend bool operator!=(json_pointer const& lhs, + json_pointer const& rhs) noexcept + { + return !(lhs == rhs); + } + + /// the reference tokens + std::vector reference_tokens; +}; +} // namespace nlohmann + +// #include + + +#include +#include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +class json_ref +{ + public: + using value_type = BasicJsonType; + + json_ref(value_type&& value) + : owned_value(std::move(value)) + {} + + json_ref(const value_type& value) + : value_ref(&value) + {} + + json_ref(std::initializer_list init) + : owned_value(init) + {} + + template < + class... Args, + enable_if_t::value, int> = 0 > + json_ref(Args && ... args) + : owned_value(std::forward(args)...) + {} + + // class should be movable only + json_ref(json_ref&&) noexcept = default; + json_ref(const json_ref&) = delete; + json_ref& operator=(const json_ref&) = delete; + json_ref& operator=(json_ref&&) = delete; + ~json_ref() = default; + + value_type moved_or_copied() const + { + if (value_ref == nullptr) + { + return std::move(owned_value); + } + return *value_ref; + } + + value_type const& operator*() const + { + return value_ref ? *value_ref : owned_value; + } + + value_type const* operator->() const + { + return &** this; + } + + private: + mutable value_type owned_value = nullptr; + value_type const* value_ref = nullptr; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + +// #include + +// #include + + +#include // reverse +#include // array +#include // isnan, isinf +#include // uint8_t, uint16_t, uint32_t, uint64_t +#include // memcpy +#include // numeric_limits +#include // string +#include // move + +// #include + +// #include + +// #include + + +#include // copy +#include // size_t +#include // back_inserter +#include // shared_ptr, make_shared +#include // basic_string +#include // vector + +#ifndef JSON_NO_IO + #include // streamsize + #include // basic_ostream +#endif // JSON_NO_IO + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/// abstract output adapter interface +template struct output_adapter_protocol +{ + virtual void write_character(CharType c) = 0; + virtual void write_characters(const CharType* s, std::size_t length) = 0; + virtual ~output_adapter_protocol() = default; + + output_adapter_protocol() = default; + output_adapter_protocol(const output_adapter_protocol&) = default; + output_adapter_protocol(output_adapter_protocol&&) noexcept = default; + output_adapter_protocol& operator=(const output_adapter_protocol&) = default; + output_adapter_protocol& operator=(output_adapter_protocol&&) noexcept = default; +}; + +/// a type to simplify interfaces +template +using output_adapter_t = std::shared_ptr>; + +/// output adapter for byte vectors +template> +class output_vector_adapter : public output_adapter_protocol +{ + public: + explicit output_vector_adapter(std::vector& vec) noexcept + : v(vec) + {} + + void write_character(CharType c) override + { + v.push_back(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + std::copy(s, s + length, std::back_inserter(v)); + } + + private: + std::vector& v; +}; + +#ifndef JSON_NO_IO +/// output adapter for output streams +template +class output_stream_adapter : public output_adapter_protocol +{ + public: + explicit output_stream_adapter(std::basic_ostream& s) noexcept + : stream(s) + {} + + void write_character(CharType c) override + { + stream.put(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + stream.write(s, static_cast(length)); + } + + private: + std::basic_ostream& stream; +}; +#endif // JSON_NO_IO + +/// output adapter for basic_string +template> +class output_string_adapter : public output_adapter_protocol +{ + public: + explicit output_string_adapter(StringType& s) noexcept + : str(s) + {} + + void write_character(CharType c) override + { + str.push_back(c); + } + + JSON_HEDLEY_NON_NULL(2) + void write_characters(const CharType* s, std::size_t length) override + { + str.append(s, length); + } + + private: + StringType& str; +}; + +template> +class output_adapter +{ + public: + template> + output_adapter(std::vector& vec) + : oa(std::make_shared>(vec)) {} + +#ifndef JSON_NO_IO + output_adapter(std::basic_ostream& s) + : oa(std::make_shared>(s)) {} +#endif // JSON_NO_IO + + output_adapter(StringType& s) + : oa(std::make_shared>(s)) {} + + operator output_adapter_t() + { + return oa; + } + + private: + output_adapter_t oa = nullptr; +}; +} // namespace detail +} // namespace nlohmann + + +namespace nlohmann +{ +namespace detail +{ +/////////////////// +// binary writer // +/////////////////// + +/*! +@brief serialization to CBOR and MessagePack values +*/ +template +class binary_writer +{ + using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; + using number_float_t = typename BasicJsonType::number_float_t; + + public: + /*! + @brief create a binary writer + + @param[in] adapter output adapter to write to + */ + explicit binary_writer(output_adapter_t adapter) : oa(std::move(adapter)) + { + JSON_ASSERT(oa); + } + + /*! + @param[in] j JSON value to serialize + @pre j.type() == value_t::object + */ + void write_bson(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::object: + { + write_bson_object(*j.m_value.object); + break; + } + + case value_t::null: + case value_t::array: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + JSON_THROW(type_error::create(317, "to serialize to BSON, top-level type must be object, but is " + std::string(j.type_name()), j)); + } + } + } + + /*! + @param[in] j JSON value to serialize + */ + void write_cbor(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::null: + { + oa->write_character(to_char_type(0xF6)); + break; + } + + case value_t::boolean: + { + oa->write_character(j.m_value.boolean + ? to_char_type(0xF5) + : to_char_type(0xF4)); + break; + } + + case value_t::number_integer: + { + if (j.m_value.number_integer >= 0) + { + // CBOR does not differentiate between positive signed + // integers and unsigned integers. Therefore, we used the + // code from the value_t::number_unsigned case here. + if (j.m_value.number_integer <= 0x17) + { + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x18)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x19)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x1A)); + write_number(static_cast(j.m_value.number_integer)); + } + else + { + oa->write_character(to_char_type(0x1B)); + write_number(static_cast(j.m_value.number_integer)); + } + } + else + { + // The conversions below encode the sign in the first + // byte, and the value is converted to a positive number. + const auto positive_number = -1 - j.m_value.number_integer; + if (j.m_value.number_integer >= -24) + { + write_number(static_cast(0x20 + positive_number)); + } + else if (positive_number <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x38)); + write_number(static_cast(positive_number)); + } + else if (positive_number <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x39)); + write_number(static_cast(positive_number)); + } + else if (positive_number <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x3A)); + write_number(static_cast(positive_number)); + } + else + { + oa->write_character(to_char_type(0x3B)); + write_number(static_cast(positive_number)); + } + } + break; + } + + case value_t::number_unsigned: + { + if (j.m_value.number_unsigned <= 0x17) + { + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x18)); + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x19)); + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x1A)); + write_number(static_cast(j.m_value.number_unsigned)); + } + else + { + oa->write_character(to_char_type(0x1B)); + write_number(static_cast(j.m_value.number_unsigned)); + } + break; + } + + case value_t::number_float: + { + if (std::isnan(j.m_value.number_float)) + { + // NaN is 0xf97e00 in CBOR + oa->write_character(to_char_type(0xF9)); + oa->write_character(to_char_type(0x7E)); + oa->write_character(to_char_type(0x00)); + } + else if (std::isinf(j.m_value.number_float)) + { + // Infinity is 0xf97c00, -Infinity is 0xf9fc00 + oa->write_character(to_char_type(0xf9)); + oa->write_character(j.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC)); + oa->write_character(to_char_type(0x00)); + } + else + { + write_compact_float(j.m_value.number_float, detail::input_format_t::cbor); + } + break; + } + + case value_t::string: + { + // step 1: write control byte and the string length + const auto N = j.m_value.string->size(); + if (N <= 0x17) + { + write_number(static_cast(0x60 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x78)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x79)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x7A)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x7B)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write the string + oa->write_characters( + reinterpret_cast(j.m_value.string->c_str()), + j.m_value.string->size()); + break; + } + + case value_t::array: + { + // step 1: write control byte and the array size + const auto N = j.m_value.array->size(); + if (N <= 0x17) + { + write_number(static_cast(0x80 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x98)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x99)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x9A)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x9B)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + for (const auto& el : *j.m_value.array) + { + write_cbor(el); + } + break; + } + + case value_t::binary: + { + if (j.m_value.binary->has_subtype()) + { + if (j.m_value.binary->subtype() <= (std::numeric_limits::max)()) + { + write_number(static_cast(0xd8)); + write_number(static_cast(j.m_value.binary->subtype())); + } + else if (j.m_value.binary->subtype() <= (std::numeric_limits::max)()) + { + write_number(static_cast(0xd9)); + write_number(static_cast(j.m_value.binary->subtype())); + } + else if (j.m_value.binary->subtype() <= (std::numeric_limits::max)()) + { + write_number(static_cast(0xda)); + write_number(static_cast(j.m_value.binary->subtype())); + } + else if (j.m_value.binary->subtype() <= (std::numeric_limits::max)()) + { + write_number(static_cast(0xdb)); + write_number(static_cast(j.m_value.binary->subtype())); + } + } + + // step 1: write control byte and the binary array size + const auto N = j.m_value.binary->size(); + if (N <= 0x17) + { + write_number(static_cast(0x40 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x58)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x59)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x5A)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x5B)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + N); + + break; + } + + case value_t::object: + { + // step 1: write control byte and the object size + const auto N = j.m_value.object->size(); + if (N <= 0x17) + { + write_number(static_cast(0xA0 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xB8)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xB9)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xBA)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0xBB)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + for (const auto& el : *j.m_value.object) + { + write_cbor(el.first); + write_cbor(el.second); + } + break; + } + + case value_t::discarded: + default: + break; + } + } + + /*! + @param[in] j JSON value to serialize + */ + void write_msgpack(const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::null: // nil + { + oa->write_character(to_char_type(0xC0)); + break; + } + + case value_t::boolean: // true and false + { + oa->write_character(j.m_value.boolean + ? to_char_type(0xC3) + : to_char_type(0xC2)); + break; + } + + case value_t::number_integer: + { + if (j.m_value.number_integer >= 0) + { + // MessagePack does not differentiate between positive + // signed integers and unsigned integers. Therefore, we used + // the code from the value_t::number_unsigned case here. + if (j.m_value.number_unsigned < 128) + { + // positive fixnum + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 8 + oa->write_character(to_char_type(0xCC)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 16 + oa->write_character(to_char_type(0xCD)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 32 + oa->write_character(to_char_type(0xCE)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 64 + oa->write_character(to_char_type(0xCF)); + write_number(static_cast(j.m_value.number_integer)); + } + } + else + { + if (j.m_value.number_integer >= -32) + { + // negative fixnum + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 8 + oa->write_character(to_char_type(0xD0)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 16 + oa->write_character(to_char_type(0xD1)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 32 + oa->write_character(to_char_type(0xD2)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_integer >= (std::numeric_limits::min)() && + j.m_value.number_integer <= (std::numeric_limits::max)()) + { + // int 64 + oa->write_character(to_char_type(0xD3)); + write_number(static_cast(j.m_value.number_integer)); + } + } + break; + } + + case value_t::number_unsigned: + { + if (j.m_value.number_unsigned < 128) + { + // positive fixnum + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 8 + oa->write_character(to_char_type(0xCC)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 16 + oa->write_character(to_char_type(0xCD)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 32 + oa->write_character(to_char_type(0xCE)); + write_number(static_cast(j.m_value.number_integer)); + } + else if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + { + // uint 64 + oa->write_character(to_char_type(0xCF)); + write_number(static_cast(j.m_value.number_integer)); + } + break; + } + + case value_t::number_float: + { + write_compact_float(j.m_value.number_float, detail::input_format_t::msgpack); + break; + } + + case value_t::string: + { + // step 1: write control byte and the string length + const auto N = j.m_value.string->size(); + if (N <= 31) + { + // fixstr + write_number(static_cast(0xA0 | N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // str 8 + oa->write_character(to_char_type(0xD9)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // str 16 + oa->write_character(to_char_type(0xDA)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // str 32 + oa->write_character(to_char_type(0xDB)); + write_number(static_cast(N)); + } + + // step 2: write the string + oa->write_characters( + reinterpret_cast(j.m_value.string->c_str()), + j.m_value.string->size()); + break; + } + + case value_t::array: + { + // step 1: write control byte and the array size + const auto N = j.m_value.array->size(); + if (N <= 15) + { + // fixarray + write_number(static_cast(0x90 | N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // array 16 + oa->write_character(to_char_type(0xDC)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // array 32 + oa->write_character(to_char_type(0xDD)); + write_number(static_cast(N)); + } + + // step 2: write each element + for (const auto& el : *j.m_value.array) + { + write_msgpack(el); + } + break; + } + + case value_t::binary: + { + // step 0: determine if the binary type has a set subtype to + // determine whether or not to use the ext or fixext types + const bool use_ext = j.m_value.binary->has_subtype(); + + // step 1: write control byte and the byte string length + const auto N = j.m_value.binary->size(); + if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type{}; + bool fixed = true; + if (use_ext) + { + switch (N) + { + case 1: + output_type = 0xD4; // fixext 1 + break; + case 2: + output_type = 0xD5; // fixext 2 + break; + case 4: + output_type = 0xD6; // fixext 4 + break; + case 8: + output_type = 0xD7; // fixext 8 + break; + case 16: + output_type = 0xD8; // fixext 16 + break; + default: + output_type = 0xC7; // ext 8 + fixed = false; + break; + } + + } + else + { + output_type = 0xC4; // bin 8 + fixed = false; + } + + oa->write_character(to_char_type(output_type)); + if (!fixed) + { + write_number(static_cast(N)); + } + } + else if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type = use_ext + ? 0xC8 // ext 16 + : 0xC5; // bin 16 + + oa->write_character(to_char_type(output_type)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type = use_ext + ? 0xC9 // ext 32 + : 0xC6; // bin 32 + + oa->write_character(to_char_type(output_type)); + write_number(static_cast(N)); + } + + // step 1.5: if this is an ext type, write the subtype + if (use_ext) + { + write_number(static_cast(j.m_value.binary->subtype())); + } + + // step 2: write the byte string + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + N); + + break; + } + + case value_t::object: + { + // step 1: write control byte and the object size + const auto N = j.m_value.object->size(); + if (N <= 15) + { + // fixmap + write_number(static_cast(0x80 | (N & 0xF))); + } + else if (N <= (std::numeric_limits::max)()) + { + // map 16 + oa->write_character(to_char_type(0xDE)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + // map 32 + oa->write_character(to_char_type(0xDF)); + write_number(static_cast(N)); + } + + // step 2: write each element + for (const auto& el : *j.m_value.object) + { + write_msgpack(el.first); + write_msgpack(el.second); + } + break; + } + + case value_t::discarded: + default: + break; + } + } + + /*! + @param[in] j JSON value to serialize + @param[in] use_count whether to use '#' prefixes (optimized format) + @param[in] use_type whether to use '$' prefixes (optimized format) + @param[in] add_prefix whether prefixes need to be used for this value + */ + void write_ubjson(const BasicJsonType& j, const bool use_count, + const bool use_type, const bool add_prefix = true) + { + switch (j.type()) + { + case value_t::null: + { + if (add_prefix) + { + oa->write_character(to_char_type('Z')); + } + break; + } + + case value_t::boolean: + { + if (add_prefix) + { + oa->write_character(j.m_value.boolean + ? to_char_type('T') + : to_char_type('F')); + } + break; + } + + case value_t::number_integer: + { + write_number_with_ubjson_prefix(j.m_value.number_integer, add_prefix); + break; + } + + case value_t::number_unsigned: + { + write_number_with_ubjson_prefix(j.m_value.number_unsigned, add_prefix); + break; + } + + case value_t::number_float: + { + write_number_with_ubjson_prefix(j.m_value.number_float, add_prefix); + break; + } + + case value_t::string: + { + if (add_prefix) + { + oa->write_character(to_char_type('S')); + } + write_number_with_ubjson_prefix(j.m_value.string->size(), true); + oa->write_characters( + reinterpret_cast(j.m_value.string->c_str()), + j.m_value.string->size()); + break; + } + + case value_t::array: + { + if (add_prefix) + { + oa->write_character(to_char_type('[')); + } + + bool prefix_required = true; + if (use_type && !j.m_value.array->empty()) + { + JSON_ASSERT(use_count); + const CharType first_prefix = ubjson_prefix(j.front()); + const bool same_prefix = std::all_of(j.begin() + 1, j.end(), + [this, first_prefix](const BasicJsonType & v) + { + return ubjson_prefix(v) == first_prefix; + }); + + if (same_prefix) + { + prefix_required = false; + oa->write_character(to_char_type('$')); + oa->write_character(first_prefix); + } + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_value.array->size(), true); + } + + for (const auto& el : *j.m_value.array) + { + write_ubjson(el, use_count, use_type, prefix_required); + } + + if (!use_count) + { + oa->write_character(to_char_type(']')); + } + + break; + } + + case value_t::binary: + { + if (add_prefix) + { + oa->write_character(to_char_type('[')); + } + + if (use_type && !j.m_value.binary->empty()) + { + JSON_ASSERT(use_count); + oa->write_character(to_char_type('$')); + oa->write_character('U'); + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_value.binary->size(), true); + } + + if (use_type) + { + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + j.m_value.binary->size()); + } + else + { + for (size_t i = 0; i < j.m_value.binary->size(); ++i) + { + oa->write_character(to_char_type('U')); + oa->write_character(j.m_value.binary->data()[i]); + } + } + + if (!use_count) + { + oa->write_character(to_char_type(']')); + } + + break; + } + + case value_t::object: + { + if (add_prefix) + { + oa->write_character(to_char_type('{')); + } + + bool prefix_required = true; + if (use_type && !j.m_value.object->empty()) + { + JSON_ASSERT(use_count); + const CharType first_prefix = ubjson_prefix(j.front()); + const bool same_prefix = std::all_of(j.begin(), j.end(), + [this, first_prefix](const BasicJsonType & v) + { + return ubjson_prefix(v) == first_prefix; + }); + + if (same_prefix) + { + prefix_required = false; + oa->write_character(to_char_type('$')); + oa->write_character(first_prefix); + } + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_value.object->size(), true); + } + + for (const auto& el : *j.m_value.object) + { + write_number_with_ubjson_prefix(el.first.size(), true); + oa->write_characters( + reinterpret_cast(el.first.c_str()), + el.first.size()); + write_ubjson(el.second, use_count, use_type, prefix_required); + } + + if (!use_count) + { + oa->write_character(to_char_type('}')); + } + + break; + } + + case value_t::discarded: + default: + break; + } + } + + private: + ////////// + // BSON // + ////////// + + /*! + @return The size of a BSON document entry header, including the id marker + and the entry name size (and its null-terminator). + */ + static std::size_t calc_bson_entry_header_size(const string_t& name, const BasicJsonType& j) + { + const auto it = name.find(static_cast(0)); + if (JSON_HEDLEY_UNLIKELY(it != BasicJsonType::string_t::npos)) + { + JSON_THROW(out_of_range::create(409, "BSON key cannot contain code point U+0000 (at byte " + std::to_string(it) + ")", j)); + static_cast(j); + } + + return /*id*/ 1ul + name.size() + /*zero-terminator*/1u; + } + + /*! + @brief Writes the given @a element_type and @a name to the output adapter + */ + void write_bson_entry_header(const string_t& name, + const std::uint8_t element_type) + { + oa->write_character(to_char_type(element_type)); // boolean + oa->write_characters( + reinterpret_cast(name.c_str()), + name.size() + 1u); + } + + /*! + @brief Writes a BSON element with key @a name and boolean value @a value + */ + void write_bson_boolean(const string_t& name, + const bool value) + { + write_bson_entry_header(name, 0x08); + oa->write_character(value ? to_char_type(0x01) : to_char_type(0x00)); + } + + /*! + @brief Writes a BSON element with key @a name and double value @a value + */ + void write_bson_double(const string_t& name, + const double value) + { + write_bson_entry_header(name, 0x01); + write_number(value); + } + + /*! + @return The size of the BSON-encoded string in @a value + */ + static std::size_t calc_bson_string_size(const string_t& value) + { + return sizeof(std::int32_t) + value.size() + 1ul; + } + + /*! + @brief Writes a BSON element with key @a name and string value @a value + */ + void write_bson_string(const string_t& name, + const string_t& value) + { + write_bson_entry_header(name, 0x02); + + write_number(static_cast(value.size() + 1ul)); + oa->write_characters( + reinterpret_cast(value.c_str()), + value.size() + 1); + } + + /*! + @brief Writes a BSON element with key @a name and null value + */ + void write_bson_null(const string_t& name) + { + write_bson_entry_header(name, 0x0A); + } + + /*! + @return The size of the BSON-encoded integer @a value + */ + static std::size_t calc_bson_integer_size(const std::int64_t value) + { + return (std::numeric_limits::min)() <= value && value <= (std::numeric_limits::max)() + ? sizeof(std::int32_t) + : sizeof(std::int64_t); + } + + /*! + @brief Writes a BSON element with key @a name and integer @a value + */ + void write_bson_integer(const string_t& name, + const std::int64_t value) + { + if ((std::numeric_limits::min)() <= value && value <= (std::numeric_limits::max)()) + { + write_bson_entry_header(name, 0x10); // int32 + write_number(static_cast(value)); + } + else + { + write_bson_entry_header(name, 0x12); // int64 + write_number(static_cast(value)); + } + } + + /*! + @return The size of the BSON-encoded unsigned integer in @a j + */ + static constexpr std::size_t calc_bson_unsigned_size(const std::uint64_t value) noexcept + { + return (value <= static_cast((std::numeric_limits::max)())) + ? sizeof(std::int32_t) + : sizeof(std::int64_t); + } + + /*! + @brief Writes a BSON element with key @a name and unsigned @a value + */ + void write_bson_unsigned(const string_t& name, + const BasicJsonType& j) + { + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + write_bson_entry_header(name, 0x10 /* int32 */); + write_number(static_cast(j.m_value.number_unsigned)); + } + else if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + write_bson_entry_header(name, 0x12 /* int64 */); + write_number(static_cast(j.m_value.number_unsigned)); + } + else + { + JSON_THROW(out_of_range::create(407, "integer number " + std::to_string(j.m_value.number_unsigned) + " cannot be represented by BSON as it does not fit int64", j)); + } + } + + /*! + @brief Writes a BSON element with key @a name and object @a value + */ + void write_bson_object_entry(const string_t& name, + const typename BasicJsonType::object_t& value) + { + write_bson_entry_header(name, 0x03); // object + write_bson_object(value); + } + + /*! + @return The size of the BSON-encoded array @a value + */ + static std::size_t calc_bson_array_size(const typename BasicJsonType::array_t& value) + { + std::size_t array_index = 0ul; + + const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), std::size_t(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type & el) + { + return result + calc_bson_element_size(std::to_string(array_index++), el); + }); + + return sizeof(std::int32_t) + embedded_document_size + 1ul; + } + + /*! + @return The size of the BSON-encoded binary array @a value + */ + static std::size_t calc_bson_binary_size(const typename BasicJsonType::binary_t& value) + { + return sizeof(std::int32_t) + value.size() + 1ul; + } + + /*! + @brief Writes a BSON element with key @a name and array @a value + */ + void write_bson_array(const string_t& name, + const typename BasicJsonType::array_t& value) + { + write_bson_entry_header(name, 0x04); // array + write_number(static_cast(calc_bson_array_size(value))); + + std::size_t array_index = 0ul; + + for (const auto& el : value) + { + write_bson_element(std::to_string(array_index++), el); + } + + oa->write_character(to_char_type(0x00)); + } + + /*! + @brief Writes a BSON element with key @a name and binary value @a value + */ + void write_bson_binary(const string_t& name, + const binary_t& value) + { + write_bson_entry_header(name, 0x05); + + write_number(static_cast(value.size())); + write_number(value.has_subtype() ? static_cast(value.subtype()) : std::uint8_t(0x00)); + + oa->write_characters(reinterpret_cast(value.data()), value.size()); + } + + /*! + @brief Calculates the size necessary to serialize the JSON value @a j with its @a name + @return The calculated size for the BSON document entry for @a j with the given @a name. + */ + static std::size_t calc_bson_element_size(const string_t& name, + const BasicJsonType& j) + { + const auto header_size = calc_bson_entry_header_size(name, j); + switch (j.type()) + { + case value_t::object: + return header_size + calc_bson_object_size(*j.m_value.object); + + case value_t::array: + return header_size + calc_bson_array_size(*j.m_value.array); + + case value_t::binary: + return header_size + calc_bson_binary_size(*j.m_value.binary); + + case value_t::boolean: + return header_size + 1ul; + + case value_t::number_float: + return header_size + 8ul; + + case value_t::number_integer: + return header_size + calc_bson_integer_size(j.m_value.number_integer); + + case value_t::number_unsigned: + return header_size + calc_bson_unsigned_size(j.m_value.number_unsigned); + + case value_t::string: + return header_size + calc_bson_string_size(*j.m_value.string); + + case value_t::null: + return header_size + 0ul; + + // LCOV_EXCL_START + case value_t::discarded: + default: + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) + return 0ul; + // LCOV_EXCL_STOP + } + } + + /*! + @brief Serializes the JSON value @a j to BSON and associates it with the + key @a name. + @param name The name to associate with the JSON entity @a j within the + current BSON document + */ + void write_bson_element(const string_t& name, + const BasicJsonType& j) + { + switch (j.type()) + { + case value_t::object: + return write_bson_object_entry(name, *j.m_value.object); + + case value_t::array: + return write_bson_array(name, *j.m_value.array); + + case value_t::binary: + return write_bson_binary(name, *j.m_value.binary); + + case value_t::boolean: + return write_bson_boolean(name, j.m_value.boolean); + + case value_t::number_float: + return write_bson_double(name, j.m_value.number_float); + + case value_t::number_integer: + return write_bson_integer(name, j.m_value.number_integer); + + case value_t::number_unsigned: + return write_bson_unsigned(name, j); + + case value_t::string: + return write_bson_string(name, *j.m_value.string); + + case value_t::null: + return write_bson_null(name); + + // LCOV_EXCL_START + case value_t::discarded: + default: + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) + return; + // LCOV_EXCL_STOP + } + } + + /*! + @brief Calculates the size of the BSON serialization of the given + JSON-object @a j. + @param[in] value JSON value to serialize + @pre value.type() == value_t::object + */ + static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value) + { + std::size_t document_size = std::accumulate(value.begin(), value.end(), std::size_t(0), + [](size_t result, const typename BasicJsonType::object_t::value_type & el) + { + return result += calc_bson_element_size(el.first, el.second); + }); + + return sizeof(std::int32_t) + document_size + 1ul; + } + + /*! + @param[in] value JSON value to serialize + @pre value.type() == value_t::object + */ + void write_bson_object(const typename BasicJsonType::object_t& value) + { + write_number(static_cast(calc_bson_object_size(value))); + + for (const auto& el : value) + { + write_bson_element(el.first, el.second); + } + + oa->write_character(to_char_type(0x00)); + } + + ////////// + // CBOR // + ////////// + + static constexpr CharType get_cbor_float_prefix(float /*unused*/) + { + return to_char_type(0xFA); // Single-Precision Float + } + + static constexpr CharType get_cbor_float_prefix(double /*unused*/) + { + return to_char_type(0xFB); // Double-Precision Float + } + + ///////////// + // MsgPack // + ///////////// + + static constexpr CharType get_msgpack_float_prefix(float /*unused*/) + { + return to_char_type(0xCA); // float 32 + } + + static constexpr CharType get_msgpack_float_prefix(double /*unused*/) + { + return to_char_type(0xCB); // float 64 + } + + //////////// + // UBJSON // + //////////// + + // UBJSON: write number (floating point) + template::value, int>::type = 0> + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix) + { + if (add_prefix) + { + oa->write_character(get_ubjson_float_prefix(n)); + } + write_number(n); + } + + // UBJSON: write number (unsigned integer) + template::value, int>::type = 0> + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix) + { + if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('i')); // int8 + } + write_number(static_cast(n)); + } + else if (n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('U')); // uint8 + } + write_number(static_cast(n)); + } + else if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('I')); // int16 + } + write_number(static_cast(n)); + } + else if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('l')); // int32 + } + write_number(static_cast(n)); + } + else if (n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('L')); // int64 + } + write_number(static_cast(n)); + } + else + { + if (add_prefix) + { + oa->write_character(to_char_type('H')); // high-precision number + } + + const auto number = BasicJsonType(n).dump(); + write_number_with_ubjson_prefix(number.size(), true); + for (std::size_t i = 0; i < number.size(); ++i) + { + oa->write_character(to_char_type(static_cast(number[i]))); + } + } + } + + // UBJSON: write number (signed integer) + template < typename NumberType, typename std::enable_if < + std::is_signed::value&& + !std::is_floating_point::value, int >::type = 0 > + void write_number_with_ubjson_prefix(const NumberType n, + const bool add_prefix) + { + if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('i')); // int8 + } + write_number(static_cast(n)); + } + else if (static_cast((std::numeric_limits::min)()) <= n && n <= static_cast((std::numeric_limits::max)())) + { + if (add_prefix) + { + oa->write_character(to_char_type('U')); // uint8 + } + write_number(static_cast(n)); + } + else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('I')); // int16 + } + write_number(static_cast(n)); + } + else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('l')); // int32 + } + write_number(static_cast(n)); + } + else if ((std::numeric_limits::min)() <= n && n <= (std::numeric_limits::max)()) + { + if (add_prefix) + { + oa->write_character(to_char_type('L')); // int64 + } + write_number(static_cast(n)); + } + // LCOV_EXCL_START + else + { + if (add_prefix) + { + oa->write_character(to_char_type('H')); // high-precision number + } + + const auto number = BasicJsonType(n).dump(); + write_number_with_ubjson_prefix(number.size(), true); + for (std::size_t i = 0; i < number.size(); ++i) + { + oa->write_character(to_char_type(static_cast(number[i]))); + } + } + // LCOV_EXCL_STOP + } + + /*! + @brief determine the type prefix of container values + */ + CharType ubjson_prefix(const BasicJsonType& j) const noexcept + { + switch (j.type()) + { + case value_t::null: + return 'Z'; + + case value_t::boolean: + return j.m_value.boolean ? 'T' : 'F'; + + case value_t::number_integer: + { + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'i'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'U'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'I'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'l'; + } + if ((std::numeric_limits::min)() <= j.m_value.number_integer && j.m_value.number_integer <= (std::numeric_limits::max)()) + { + return 'L'; + } + // anything else is treated as high-precision number + return 'H'; // LCOV_EXCL_LINE + } + + case value_t::number_unsigned: + { + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'i'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'U'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'I'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'l'; + } + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) + { + return 'L'; + } + // anything else is treated as high-precision number + return 'H'; // LCOV_EXCL_LINE + } + + case value_t::number_float: + return get_ubjson_float_prefix(j.m_value.number_float); + + case value_t::string: + return 'S'; + + case value_t::array: // fallthrough + case value_t::binary: + return '['; + + case value_t::object: + return '{'; + + case value_t::discarded: + default: // discarded values + return 'N'; + } + } + + static constexpr CharType get_ubjson_float_prefix(float /*unused*/) + { + return 'd'; // float 32 + } + + static constexpr CharType get_ubjson_float_prefix(double /*unused*/) + { + return 'D'; // float 64 + } + + /////////////////////// + // Utility functions // + /////////////////////// + + /* + @brief write a number to output input + @param[in] n number of type @a NumberType + @tparam NumberType the type of the number + @tparam OutputIsLittleEndian Set to true if output data is + required to be little endian + + @note This function needs to respect the system's endianess, because bytes + in CBOR, MessagePack, and UBJSON are stored in network order (big + endian) and therefore need reordering on little endian systems. + */ + template + void write_number(const NumberType n) + { + // step 1: write number to array of length NumberType + std::array vec{}; + std::memcpy(vec.data(), &n, sizeof(NumberType)); + + // step 2: write array to output (with possible reordering) + if (is_little_endian != OutputIsLittleEndian) + { + // reverse byte order prior to conversion if necessary + std::reverse(vec.begin(), vec.end()); + } + + oa->write_characters(vec.data(), sizeof(NumberType)); + } + + void write_compact_float(const number_float_t n, detail::input_format_t format) + { +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + if (static_cast(n) >= static_cast(std::numeric_limits::lowest()) && + static_cast(n) <= static_cast((std::numeric_limits::max)()) && + static_cast(static_cast(n)) == static_cast(n)) + { + oa->write_character(format == detail::input_format_t::cbor + ? get_cbor_float_prefix(static_cast(n)) + : get_msgpack_float_prefix(static_cast(n))); + write_number(static_cast(n)); + } + else + { + oa->write_character(format == detail::input_format_t::cbor + ? get_cbor_float_prefix(n) + : get_msgpack_float_prefix(n)); + write_number(n); + } +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + } + + public: + // The following to_char_type functions are implement the conversion + // between uint8_t and CharType. In case CharType is not unsigned, + // such a conversion is required to allow values greater than 128. + // See for a discussion. + template < typename C = CharType, + enable_if_t < std::is_signed::value && std::is_signed::value > * = nullptr > + static constexpr CharType to_char_type(std::uint8_t x) noexcept + { + return *reinterpret_cast(&x); + } + + template < typename C = CharType, + enable_if_t < std::is_signed::value && std::is_unsigned::value > * = nullptr > + static CharType to_char_type(std::uint8_t x) noexcept + { + static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t"); + static_assert(std::is_trivial::value, "CharType must be trivial"); + CharType result; + std::memcpy(&result, &x, sizeof(x)); + return result; + } + + template::value>* = nullptr> + static constexpr CharType to_char_type(std::uint8_t x) noexcept + { + return x; + } + + template < typename InputCharType, typename C = CharType, + enable_if_t < + std::is_signed::value && + std::is_signed::value && + std::is_same::type>::value + > * = nullptr > + static constexpr CharType to_char_type(InputCharType x) noexcept + { + return x; + } + + private: + /// whether we can assume little endianess + const bool is_little_endian = little_endianess(); + + /// the output + output_adapter_t oa = nullptr; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + + +#include // reverse, remove, fill, find, none_of +#include // array +#include // localeconv, lconv +#include // labs, isfinite, isnan, signbit +#include // size_t, ptrdiff_t +#include // uint8_t +#include // snprintf +#include // numeric_limits +#include // string, char_traits +#include // is_same +#include // move + +// #include + + +#include // array +#include // signbit, isfinite +#include // intN_t, uintN_t +#include // memcpy, memmove +#include // numeric_limits +#include // conditional + +// #include + + +namespace nlohmann +{ +namespace detail +{ + +/*! +@brief implements the Grisu2 algorithm for binary to decimal floating-point +conversion. + +This implementation is a slightly modified version of the reference +implementation which may be obtained from +http://florian.loitsch.com/publications (bench.tar.gz). + +The code is distributed under the MIT license, Copyright (c) 2009 Florian Loitsch. + +For a detailed description of the algorithm see: + +[1] Loitsch, "Printing Floating-Point Numbers Quickly and Accurately with + Integers", Proceedings of the ACM SIGPLAN 2010 Conference on Programming + Language Design and Implementation, PLDI 2010 +[2] Burger, Dybvig, "Printing Floating-Point Numbers Quickly and Accurately", + Proceedings of the ACM SIGPLAN 1996 Conference on Programming Language + Design and Implementation, PLDI 1996 +*/ +namespace dtoa_impl +{ + +template +Target reinterpret_bits(const Source source) +{ + static_assert(sizeof(Target) == sizeof(Source), "size mismatch"); + + Target target; + std::memcpy(&target, &source, sizeof(Source)); + return target; +} + +struct diyfp // f * 2^e +{ + static constexpr int kPrecision = 64; // = q + + std::uint64_t f = 0; + int e = 0; + + constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_) {} + + /*! + @brief returns x - y + @pre x.e == y.e and x.f >= y.f + */ + static diyfp sub(const diyfp& x, const diyfp& y) noexcept + { + JSON_ASSERT(x.e == y.e); + JSON_ASSERT(x.f >= y.f); + + return {x.f - y.f, x.e}; + } + + /*! + @brief returns x * y + @note The result is rounded. (Only the upper q bits are returned.) + */ + static diyfp mul(const diyfp& x, const diyfp& y) noexcept + { + static_assert(kPrecision == 64, "internal error"); + + // Computes: + // f = round((x.f * y.f) / 2^q) + // e = x.e + y.e + q + + // Emulate the 64-bit * 64-bit multiplication: + // + // p = u * v + // = (u_lo + 2^32 u_hi) (v_lo + 2^32 v_hi) + // = (u_lo v_lo ) + 2^32 ((u_lo v_hi ) + (u_hi v_lo )) + 2^64 (u_hi v_hi ) + // = (p0 ) + 2^32 ((p1 ) + (p2 )) + 2^64 (p3 ) + // = (p0_lo + 2^32 p0_hi) + 2^32 ((p1_lo + 2^32 p1_hi) + (p2_lo + 2^32 p2_hi)) + 2^64 (p3 ) + // = (p0_lo ) + 2^32 (p0_hi + p1_lo + p2_lo ) + 2^64 (p1_hi + p2_hi + p3) + // = (p0_lo ) + 2^32 (Q ) + 2^64 (H ) + // = (p0_lo ) + 2^32 (Q_lo + 2^32 Q_hi ) + 2^64 (H ) + // + // (Since Q might be larger than 2^32 - 1) + // + // = (p0_lo + 2^32 Q_lo) + 2^64 (Q_hi + H) + // + // (Q_hi + H does not overflow a 64-bit int) + // + // = p_lo + 2^64 p_hi + + const std::uint64_t u_lo = x.f & 0xFFFFFFFFu; + const std::uint64_t u_hi = x.f >> 32u; + const std::uint64_t v_lo = y.f & 0xFFFFFFFFu; + const std::uint64_t v_hi = y.f >> 32u; + + const std::uint64_t p0 = u_lo * v_lo; + const std::uint64_t p1 = u_lo * v_hi; + const std::uint64_t p2 = u_hi * v_lo; + const std::uint64_t p3 = u_hi * v_hi; + + const std::uint64_t p0_hi = p0 >> 32u; + const std::uint64_t p1_lo = p1 & 0xFFFFFFFFu; + const std::uint64_t p1_hi = p1 >> 32u; + const std::uint64_t p2_lo = p2 & 0xFFFFFFFFu; + const std::uint64_t p2_hi = p2 >> 32u; + + std::uint64_t Q = p0_hi + p1_lo + p2_lo; + + // The full product might now be computed as + // + // p_hi = p3 + p2_hi + p1_hi + (Q >> 32) + // p_lo = p0_lo + (Q << 32) + // + // But in this particular case here, the full p_lo is not required. + // Effectively we only need to add the highest bit in p_lo to p_hi (and + // Q_hi + 1 does not overflow). + + Q += std::uint64_t{1} << (64u - 32u - 1u); // round, ties up + + const std::uint64_t h = p3 + p2_hi + p1_hi + (Q >> 32u); + + return {h, x.e + y.e + 64}; + } + + /*! + @brief normalize x such that the significand is >= 2^(q-1) + @pre x.f != 0 + */ + static diyfp normalize(diyfp x) noexcept + { + JSON_ASSERT(x.f != 0); + + while ((x.f >> 63u) == 0) + { + x.f <<= 1u; + x.e--; + } + + return x; + } + + /*! + @brief normalize x such that the result has the exponent E + @pre e >= x.e and the upper e - x.e bits of x.f must be zero. + */ + static diyfp normalize_to(const diyfp& x, const int target_exponent) noexcept + { + const int delta = x.e - target_exponent; + + JSON_ASSERT(delta >= 0); + JSON_ASSERT(((x.f << delta) >> delta) == x.f); + + return {x.f << delta, target_exponent}; + } +}; + +struct boundaries +{ + diyfp w; + diyfp minus; + diyfp plus; +}; + +/*! +Compute the (normalized) diyfp representing the input number 'value' and its +boundaries. + +@pre value must be finite and positive +*/ +template +boundaries compute_boundaries(FloatType value) +{ + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // Convert the IEEE representation into a diyfp. + // + // If v is denormal: + // value = 0.F * 2^(1 - bias) = ( F) * 2^(1 - bias - (p-1)) + // If v is normalized: + // value = 1.F * 2^(E - bias) = (2^(p-1) + F) * 2^(E - bias - (p-1)) + + static_assert(std::numeric_limits::is_iec559, + "internal error: dtoa_short requires an IEEE-754 floating-point implementation"); + + constexpr int kPrecision = std::numeric_limits::digits; // = p (includes the hidden bit) + constexpr int kBias = std::numeric_limits::max_exponent - 1 + (kPrecision - 1); + constexpr int kMinExp = 1 - kBias; + constexpr std::uint64_t kHiddenBit = std::uint64_t{1} << (kPrecision - 1); // = 2^(p-1) + + using bits_type = typename std::conditional::type; + + const auto bits = static_cast(reinterpret_bits(value)); + const std::uint64_t E = bits >> (kPrecision - 1); + const std::uint64_t F = bits & (kHiddenBit - 1); + + const bool is_denormal = E == 0; + const diyfp v = is_denormal + ? diyfp(F, kMinExp) + : diyfp(F + kHiddenBit, static_cast(E) - kBias); + + // Compute the boundaries m- and m+ of the floating-point value + // v = f * 2^e. + // + // Determine v- and v+, the floating-point predecessor and successor if v, + // respectively. + // + // v- = v - 2^e if f != 2^(p-1) or e == e_min (A) + // = v - 2^(e-1) if f == 2^(p-1) and e > e_min (B) + // + // v+ = v + 2^e + // + // Let m- = (v- + v) / 2 and m+ = (v + v+) / 2. All real numbers _strictly_ + // between m- and m+ round to v, regardless of how the input rounding + // algorithm breaks ties. + // + // ---+-------------+-------------+-------------+-------------+--- (A) + // v- m- v m+ v+ + // + // -----------------+------+------+-------------+-------------+--- (B) + // v- m- v m+ v+ + + const bool lower_boundary_is_closer = F == 0 && E > 1; + const diyfp m_plus = diyfp(2 * v.f + 1, v.e - 1); + const diyfp m_minus = lower_boundary_is_closer + ? diyfp(4 * v.f - 1, v.e - 2) // (B) + : diyfp(2 * v.f - 1, v.e - 1); // (A) + + // Determine the normalized w+ = m+. + const diyfp w_plus = diyfp::normalize(m_plus); + + // Determine w- = m- such that e_(w-) = e_(w+). + const diyfp w_minus = diyfp::normalize_to(m_minus, w_plus.e); + + return {diyfp::normalize(v), w_minus, w_plus}; +} + +// Given normalized diyfp w, Grisu needs to find a (normalized) cached +// power-of-ten c, such that the exponent of the product c * w = f * 2^e lies +// within a certain range [alpha, gamma] (Definition 3.2 from [1]) +// +// alpha <= e = e_c + e_w + q <= gamma +// +// or +// +// f_c * f_w * 2^alpha <= f_c 2^(e_c) * f_w 2^(e_w) * 2^q +// <= f_c * f_w * 2^gamma +// +// Since c and w are normalized, i.e. 2^(q-1) <= f < 2^q, this implies +// +// 2^(q-1) * 2^(q-1) * 2^alpha <= c * w * 2^q < 2^q * 2^q * 2^gamma +// +// or +// +// 2^(q - 2 + alpha) <= c * w < 2^(q + gamma) +// +// The choice of (alpha,gamma) determines the size of the table and the form of +// the digit generation procedure. Using (alpha,gamma)=(-60,-32) works out well +// in practice: +// +// The idea is to cut the number c * w = f * 2^e into two parts, which can be +// processed independently: An integral part p1, and a fractional part p2: +// +// f * 2^e = ( (f div 2^-e) * 2^-e + (f mod 2^-e) ) * 2^e +// = (f div 2^-e) + (f mod 2^-e) * 2^e +// = p1 + p2 * 2^e +// +// The conversion of p1 into decimal form requires a series of divisions and +// modulos by (a power of) 10. These operations are faster for 32-bit than for +// 64-bit integers, so p1 should ideally fit into a 32-bit integer. This can be +// achieved by choosing +// +// -e >= 32 or e <= -32 := gamma +// +// In order to convert the fractional part +// +// p2 * 2^e = p2 / 2^-e = d[-1] / 10^1 + d[-2] / 10^2 + ... +// +// into decimal form, the fraction is repeatedly multiplied by 10 and the digits +// d[-i] are extracted in order: +// +// (10 * p2) div 2^-e = d[-1] +// (10 * p2) mod 2^-e = d[-2] / 10^1 + ... +// +// The multiplication by 10 must not overflow. It is sufficient to choose +// +// 10 * p2 < 16 * p2 = 2^4 * p2 <= 2^64. +// +// Since p2 = f mod 2^-e < 2^-e, +// +// -e <= 60 or e >= -60 := alpha + +constexpr int kAlpha = -60; +constexpr int kGamma = -32; + +struct cached_power // c = f * 2^e ~= 10^k +{ + std::uint64_t f; + int e; + int k; +}; + +/*! +For a normalized diyfp w = f * 2^e, this function returns a (normalized) cached +power-of-ten c = f_c * 2^e_c, such that the exponent of the product w * c +satisfies (Definition 3.2 from [1]) + + alpha <= e_c + e + q <= gamma. +*/ +inline cached_power get_cached_power_for_binary_exponent(int e) +{ + // Now + // + // alpha <= e_c + e + q <= gamma (1) + // ==> f_c * 2^alpha <= c * 2^e * 2^q + // + // and since the c's are normalized, 2^(q-1) <= f_c, + // + // ==> 2^(q - 1 + alpha) <= c * 2^(e + q) + // ==> 2^(alpha - e - 1) <= c + // + // If c were an exact power of ten, i.e. c = 10^k, one may determine k as + // + // k = ceil( log_10( 2^(alpha - e - 1) ) ) + // = ceil( (alpha - e - 1) * log_10(2) ) + // + // From the paper: + // "In theory the result of the procedure could be wrong since c is rounded, + // and the computation itself is approximated [...]. In practice, however, + // this simple function is sufficient." + // + // For IEEE double precision floating-point numbers converted into + // normalized diyfp's w = f * 2^e, with q = 64, + // + // e >= -1022 (min IEEE exponent) + // -52 (p - 1) + // -52 (p - 1, possibly normalize denormal IEEE numbers) + // -11 (normalize the diyfp) + // = -1137 + // + // and + // + // e <= +1023 (max IEEE exponent) + // -52 (p - 1) + // -11 (normalize the diyfp) + // = 960 + // + // This binary exponent range [-1137,960] results in a decimal exponent + // range [-307,324]. One does not need to store a cached power for each + // k in this range. For each such k it suffices to find a cached power + // such that the exponent of the product lies in [alpha,gamma]. + // This implies that the difference of the decimal exponents of adjacent + // table entries must be less than or equal to + // + // floor( (gamma - alpha) * log_10(2) ) = 8. + // + // (A smaller distance gamma-alpha would require a larger table.) + + // NB: + // Actually this function returns c, such that -60 <= e_c + e + 64 <= -34. + + constexpr int kCachedPowersMinDecExp = -300; + constexpr int kCachedPowersDecStep = 8; + + static constexpr std::array kCachedPowers = + { + { + { 0xAB70FE17C79AC6CA, -1060, -300 }, + { 0xFF77B1FCBEBCDC4F, -1034, -292 }, + { 0xBE5691EF416BD60C, -1007, -284 }, + { 0x8DD01FAD907FFC3C, -980, -276 }, + { 0xD3515C2831559A83, -954, -268 }, + { 0x9D71AC8FADA6C9B5, -927, -260 }, + { 0xEA9C227723EE8BCB, -901, -252 }, + { 0xAECC49914078536D, -874, -244 }, + { 0x823C12795DB6CE57, -847, -236 }, + { 0xC21094364DFB5637, -821, -228 }, + { 0x9096EA6F3848984F, -794, -220 }, + { 0xD77485CB25823AC7, -768, -212 }, + { 0xA086CFCD97BF97F4, -741, -204 }, + { 0xEF340A98172AACE5, -715, -196 }, + { 0xB23867FB2A35B28E, -688, -188 }, + { 0x84C8D4DFD2C63F3B, -661, -180 }, + { 0xC5DD44271AD3CDBA, -635, -172 }, + { 0x936B9FCEBB25C996, -608, -164 }, + { 0xDBAC6C247D62A584, -582, -156 }, + { 0xA3AB66580D5FDAF6, -555, -148 }, + { 0xF3E2F893DEC3F126, -529, -140 }, + { 0xB5B5ADA8AAFF80B8, -502, -132 }, + { 0x87625F056C7C4A8B, -475, -124 }, + { 0xC9BCFF6034C13053, -449, -116 }, + { 0x964E858C91BA2655, -422, -108 }, + { 0xDFF9772470297EBD, -396, -100 }, + { 0xA6DFBD9FB8E5B88F, -369, -92 }, + { 0xF8A95FCF88747D94, -343, -84 }, + { 0xB94470938FA89BCF, -316, -76 }, + { 0x8A08F0F8BF0F156B, -289, -68 }, + { 0xCDB02555653131B6, -263, -60 }, + { 0x993FE2C6D07B7FAC, -236, -52 }, + { 0xE45C10C42A2B3B06, -210, -44 }, + { 0xAA242499697392D3, -183, -36 }, + { 0xFD87B5F28300CA0E, -157, -28 }, + { 0xBCE5086492111AEB, -130, -20 }, + { 0x8CBCCC096F5088CC, -103, -12 }, + { 0xD1B71758E219652C, -77, -4 }, + { 0x9C40000000000000, -50, 4 }, + { 0xE8D4A51000000000, -24, 12 }, + { 0xAD78EBC5AC620000, 3, 20 }, + { 0x813F3978F8940984, 30, 28 }, + { 0xC097CE7BC90715B3, 56, 36 }, + { 0x8F7E32CE7BEA5C70, 83, 44 }, + { 0xD5D238A4ABE98068, 109, 52 }, + { 0x9F4F2726179A2245, 136, 60 }, + { 0xED63A231D4C4FB27, 162, 68 }, + { 0xB0DE65388CC8ADA8, 189, 76 }, + { 0x83C7088E1AAB65DB, 216, 84 }, + { 0xC45D1DF942711D9A, 242, 92 }, + { 0x924D692CA61BE758, 269, 100 }, + { 0xDA01EE641A708DEA, 295, 108 }, + { 0xA26DA3999AEF774A, 322, 116 }, + { 0xF209787BB47D6B85, 348, 124 }, + { 0xB454E4A179DD1877, 375, 132 }, + { 0x865B86925B9BC5C2, 402, 140 }, + { 0xC83553C5C8965D3D, 428, 148 }, + { 0x952AB45CFA97A0B3, 455, 156 }, + { 0xDE469FBD99A05FE3, 481, 164 }, + { 0xA59BC234DB398C25, 508, 172 }, + { 0xF6C69A72A3989F5C, 534, 180 }, + { 0xB7DCBF5354E9BECE, 561, 188 }, + { 0x88FCF317F22241E2, 588, 196 }, + { 0xCC20CE9BD35C78A5, 614, 204 }, + { 0x98165AF37B2153DF, 641, 212 }, + { 0xE2A0B5DC971F303A, 667, 220 }, + { 0xA8D9D1535CE3B396, 694, 228 }, + { 0xFB9B7CD9A4A7443C, 720, 236 }, + { 0xBB764C4CA7A44410, 747, 244 }, + { 0x8BAB8EEFB6409C1A, 774, 252 }, + { 0xD01FEF10A657842C, 800, 260 }, + { 0x9B10A4E5E9913129, 827, 268 }, + { 0xE7109BFBA19C0C9D, 853, 276 }, + { 0xAC2820D9623BF429, 880, 284 }, + { 0x80444B5E7AA7CF85, 907, 292 }, + { 0xBF21E44003ACDD2D, 933, 300 }, + { 0x8E679C2F5E44FF8F, 960, 308 }, + { 0xD433179D9C8CB841, 986, 316 }, + { 0x9E19DB92B4E31BA9, 1013, 324 }, + } + }; + + // This computation gives exactly the same results for k as + // k = ceil((kAlpha - e - 1) * 0.30102999566398114) + // for |e| <= 1500, but doesn't require floating-point operations. + // NB: log_10(2) ~= 78913 / 2^18 + JSON_ASSERT(e >= -1500); + JSON_ASSERT(e <= 1500); + const int f = kAlpha - e - 1; + const int k = (f * 78913) / (1 << 18) + static_cast(f > 0); + + const int index = (-kCachedPowersMinDecExp + k + (kCachedPowersDecStep - 1)) / kCachedPowersDecStep; + JSON_ASSERT(index >= 0); + JSON_ASSERT(static_cast(index) < kCachedPowers.size()); + + const cached_power cached = kCachedPowers[static_cast(index)]; + JSON_ASSERT(kAlpha <= cached.e + e + 64); + JSON_ASSERT(kGamma >= cached.e + e + 64); + + return cached; +} + +/*! +For n != 0, returns k, such that pow10 := 10^(k-1) <= n < 10^k. +For n == 0, returns 1 and sets pow10 := 1. +*/ +inline int find_largest_pow10(const std::uint32_t n, std::uint32_t& pow10) +{ + // LCOV_EXCL_START + if (n >= 1000000000) + { + pow10 = 1000000000; + return 10; + } + // LCOV_EXCL_STOP + if (n >= 100000000) + { + pow10 = 100000000; + return 9; + } + if (n >= 10000000) + { + pow10 = 10000000; + return 8; + } + if (n >= 1000000) + { + pow10 = 1000000; + return 7; + } + if (n >= 100000) + { + pow10 = 100000; + return 6; + } + if (n >= 10000) + { + pow10 = 10000; + return 5; + } + if (n >= 1000) + { + pow10 = 1000; + return 4; + } + if (n >= 100) + { + pow10 = 100; + return 3; + } + if (n >= 10) + { + pow10 = 10; + return 2; + } + + pow10 = 1; + return 1; +} + +inline void grisu2_round(char* buf, int len, std::uint64_t dist, std::uint64_t delta, + std::uint64_t rest, std::uint64_t ten_k) +{ + JSON_ASSERT(len >= 1); + JSON_ASSERT(dist <= delta); + JSON_ASSERT(rest <= delta); + JSON_ASSERT(ten_k > 0); + + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // ten_k + // <------> + // <---- rest ----> + // --------------[------------------+----+--------------]-------------- + // w V + // = buf * 10^k + // + // ten_k represents a unit-in-the-last-place in the decimal representation + // stored in buf. + // Decrement buf by ten_k while this takes buf closer to w. + + // The tests are written in this order to avoid overflow in unsigned + // integer arithmetic. + + while (rest < dist + && delta - rest >= ten_k + && (rest + ten_k < dist || dist - rest > rest + ten_k - dist)) + { + JSON_ASSERT(buf[len - 1] != '0'); + buf[len - 1]--; + rest += ten_k; + } +} + +/*! +Generates V = buffer * 10^decimal_exponent, such that M- <= V <= M+. +M- and M+ must be normalized and share the same exponent -60 <= e <= -32. +*/ +inline void grisu2_digit_gen(char* buffer, int& length, int& decimal_exponent, + diyfp M_minus, diyfp w, diyfp M_plus) +{ + static_assert(kAlpha >= -60, "internal error"); + static_assert(kGamma <= -32, "internal error"); + + // Generates the digits (and the exponent) of a decimal floating-point + // number V = buffer * 10^decimal_exponent in the range [M-, M+]. The diyfp's + // w, M- and M+ share the same exponent e, which satisfies alpha <= e <= gamma. + // + // <--------------------------- delta ----> + // <---- dist ---------> + // --------------[------------------+-------------------]-------------- + // M- w M+ + // + // Grisu2 generates the digits of M+ from left to right and stops as soon as + // V is in [M-,M+]. + + JSON_ASSERT(M_plus.e >= kAlpha); + JSON_ASSERT(M_plus.e <= kGamma); + + std::uint64_t delta = diyfp::sub(M_plus, M_minus).f; // (significand of (M+ - M-), implicit exponent is e) + std::uint64_t dist = diyfp::sub(M_plus, w ).f; // (significand of (M+ - w ), implicit exponent is e) + + // Split M+ = f * 2^e into two parts p1 and p2 (note: e < 0): + // + // M+ = f * 2^e + // = ((f div 2^-e) * 2^-e + (f mod 2^-e)) * 2^e + // = ((p1 ) * 2^-e + (p2 )) * 2^e + // = p1 + p2 * 2^e + + const diyfp one(std::uint64_t{1} << -M_plus.e, M_plus.e); + + auto p1 = static_cast(M_plus.f >> -one.e); // p1 = f div 2^-e (Since -e >= 32, p1 fits into a 32-bit int.) + std::uint64_t p2 = M_plus.f & (one.f - 1); // p2 = f mod 2^-e + + // 1) + // + // Generate the digits of the integral part p1 = d[n-1]...d[1]d[0] + + JSON_ASSERT(p1 > 0); + + std::uint32_t pow10{}; + const int k = find_largest_pow10(p1, pow10); + + // 10^(k-1) <= p1 < 10^k, pow10 = 10^(k-1) + // + // p1 = (p1 div 10^(k-1)) * 10^(k-1) + (p1 mod 10^(k-1)) + // = (d[k-1] ) * 10^(k-1) + (p1 mod 10^(k-1)) + // + // M+ = p1 + p2 * 2^e + // = d[k-1] * 10^(k-1) + (p1 mod 10^(k-1)) + p2 * 2^e + // = d[k-1] * 10^(k-1) + ((p1 mod 10^(k-1)) * 2^-e + p2) * 2^e + // = d[k-1] * 10^(k-1) + ( rest) * 2^e + // + // Now generate the digits d[n] of p1 from left to right (n = k-1,...,0) + // + // p1 = d[k-1]...d[n] * 10^n + d[n-1]...d[0] + // + // but stop as soon as + // + // rest * 2^e = (d[n-1]...d[0] * 2^-e + p2) * 2^e <= delta * 2^e + + int n = k; + while (n > 0) + { + // Invariants: + // M+ = buffer * 10^n + (p1 + p2 * 2^e) (buffer = 0 for n = k) + // pow10 = 10^(n-1) <= p1 < 10^n + // + const std::uint32_t d = p1 / pow10; // d = p1 div 10^(n-1) + const std::uint32_t r = p1 % pow10; // r = p1 mod 10^(n-1) + // + // M+ = buffer * 10^n + (d * 10^(n-1) + r) + p2 * 2^e + // = (buffer * 10 + d) * 10^(n-1) + (r + p2 * 2^e) + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(n-1) + (r + p2 * 2^e) + // + p1 = r; + n--; + // + // M+ = buffer * 10^n + (p1 + p2 * 2^e) + // pow10 = 10^n + // + + // Now check if enough digits have been generated. + // Compute + // + // p1 + p2 * 2^e = (p1 * 2^-e + p2) * 2^e = rest * 2^e + // + // Note: + // Since rest and delta share the same exponent e, it suffices to + // compare the significands. + const std::uint64_t rest = (std::uint64_t{p1} << -one.e) + p2; + if (rest <= delta) + { + // V = buffer * 10^n, with M- <= V <= M+. + + decimal_exponent += n; + + // We may now just stop. But instead look if the buffer could be + // decremented to bring V closer to w. + // + // pow10 = 10^n is now 1 ulp in the decimal representation V. + // The rounding procedure works with diyfp's with an implicit + // exponent of e. + // + // 10^n = (10^n * 2^-e) * 2^e = ulp * 2^e + // + const std::uint64_t ten_n = std::uint64_t{pow10} << -one.e; + grisu2_round(buffer, length, dist, delta, rest, ten_n); + + return; + } + + pow10 /= 10; + // + // pow10 = 10^(n-1) <= p1 < 10^n + // Invariants restored. + } + + // 2) + // + // The digits of the integral part have been generated: + // + // M+ = d[k-1]...d[1]d[0] + p2 * 2^e + // = buffer + p2 * 2^e + // + // Now generate the digits of the fractional part p2 * 2^e. + // + // Note: + // No decimal point is generated: the exponent is adjusted instead. + // + // p2 actually represents the fraction + // + // p2 * 2^e + // = p2 / 2^-e + // = d[-1] / 10^1 + d[-2] / 10^2 + ... + // + // Now generate the digits d[-m] of p1 from left to right (m = 1,2,...) + // + // p2 * 2^e = d[-1]d[-2]...d[-m] * 10^-m + // + 10^-m * (d[-m-1] / 10^1 + d[-m-2] / 10^2 + ...) + // + // using + // + // 10^m * p2 = ((10^m * p2) div 2^-e) * 2^-e + ((10^m * p2) mod 2^-e) + // = ( d) * 2^-e + ( r) + // + // or + // 10^m * p2 * 2^e = d + r * 2^e + // + // i.e. + // + // M+ = buffer + p2 * 2^e + // = buffer + 10^-m * (d + r * 2^e) + // = (buffer * 10^m + d) * 10^-m + 10^-m * r * 2^e + // + // and stop as soon as 10^-m * r * 2^e <= delta * 2^e + + JSON_ASSERT(p2 > delta); + + int m = 0; + for (;;) + { + // Invariant: + // M+ = buffer * 10^-m + 10^-m * (d[-m-1] / 10 + d[-m-2] / 10^2 + ...) * 2^e + // = buffer * 10^-m + 10^-m * (p2 ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (10 * p2) ) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * ((10*p2 div 2^-e) * 2^-e + (10*p2 mod 2^-e)) * 2^e + // + JSON_ASSERT(p2 <= (std::numeric_limits::max)() / 10); + p2 *= 10; + const std::uint64_t d = p2 >> -one.e; // d = (10 * p2) div 2^-e + const std::uint64_t r = p2 & (one.f - 1); // r = (10 * p2) mod 2^-e + // + // M+ = buffer * 10^-m + 10^-m * (1/10 * (d * 2^-e + r) * 2^e + // = buffer * 10^-m + 10^-m * (1/10 * (d + r * 2^e)) + // = (buffer * 10 + d) * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + JSON_ASSERT(d <= 9); + buffer[length++] = static_cast('0' + d); // buffer := buffer * 10 + d + // + // M+ = buffer * 10^(-m-1) + 10^(-m-1) * r * 2^e + // + p2 = r; + m++; + // + // M+ = buffer * 10^-m + 10^-m * p2 * 2^e + // Invariant restored. + + // Check if enough digits have been generated. + // + // 10^-m * p2 * 2^e <= delta * 2^e + // p2 * 2^e <= 10^m * delta * 2^e + // p2 <= 10^m * delta + delta *= 10; + dist *= 10; + if (p2 <= delta) + { + break; + } + } + + // V = buffer * 10^-m, with M- <= V <= M+. + + decimal_exponent -= m; + + // 1 ulp in the decimal representation is now 10^-m. + // Since delta and dist are now scaled by 10^m, we need to do the + // same with ulp in order to keep the units in sync. + // + // 10^m * 10^-m = 1 = 2^-e * 2^e = ten_m * 2^e + // + const std::uint64_t ten_m = one.f; + grisu2_round(buffer, length, dist, delta, p2, ten_m); + + // By construction this algorithm generates the shortest possible decimal + // number (Loitsch, Theorem 6.2) which rounds back to w. + // For an input number of precision p, at least + // + // N = 1 + ceil(p * log_10(2)) + // + // decimal digits are sufficient to identify all binary floating-point + // numbers (Matula, "In-and-Out conversions"). + // This implies that the algorithm does not produce more than N decimal + // digits. + // + // N = 17 for p = 53 (IEEE double precision) + // N = 9 for p = 24 (IEEE single precision) +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +JSON_HEDLEY_NON_NULL(1) +inline void grisu2(char* buf, int& len, int& decimal_exponent, + diyfp m_minus, diyfp v, diyfp m_plus) +{ + JSON_ASSERT(m_plus.e == m_minus.e); + JSON_ASSERT(m_plus.e == v.e); + + // --------(-----------------------+-----------------------)-------- (A) + // m- v m+ + // + // --------------------(-----------+-----------------------)-------- (B) + // m- v m+ + // + // First scale v (and m- and m+) such that the exponent is in the range + // [alpha, gamma]. + + const cached_power cached = get_cached_power_for_binary_exponent(m_plus.e); + + const diyfp c_minus_k(cached.f, cached.e); // = c ~= 10^-k + + // The exponent of the products is = v.e + c_minus_k.e + q and is in the range [alpha,gamma] + const diyfp w = diyfp::mul(v, c_minus_k); + const diyfp w_minus = diyfp::mul(m_minus, c_minus_k); + const diyfp w_plus = diyfp::mul(m_plus, c_minus_k); + + // ----(---+---)---------------(---+---)---------------(---+---)---- + // w- w w+ + // = c*m- = c*v = c*m+ + // + // diyfp::mul rounds its result and c_minus_k is approximated too. w, w- and + // w+ are now off by a small amount. + // In fact: + // + // w - v * 10^k < 1 ulp + // + // To account for this inaccuracy, add resp. subtract 1 ulp. + // + // --------+---[---------------(---+---)---------------]---+-------- + // w- M- w M+ w+ + // + // Now any number in [M-, M+] (bounds included) will round to w when input, + // regardless of how the input rounding algorithm breaks ties. + // + // And digit_gen generates the shortest possible such number in [M-, M+]. + // Note that this does not mean that Grisu2 always generates the shortest + // possible number in the interval (m-, m+). + const diyfp M_minus(w_minus.f + 1, w_minus.e); + const diyfp M_plus (w_plus.f - 1, w_plus.e ); + + decimal_exponent = -cached.k; // = -(-k) = k + + grisu2_digit_gen(buf, len, decimal_exponent, M_minus, w, M_plus); +} + +/*! +v = buf * 10^decimal_exponent +len is the length of the buffer (number of decimal digits) +The buffer must be large enough, i.e. >= max_digits10. +*/ +template +JSON_HEDLEY_NON_NULL(1) +void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) +{ + static_assert(diyfp::kPrecision >= std::numeric_limits::digits + 3, + "internal error: not enough precision"); + + JSON_ASSERT(std::isfinite(value)); + JSON_ASSERT(value > 0); + + // If the neighbors (and boundaries) of 'value' are always computed for double-precision + // numbers, all float's can be recovered using strtod (and strtof). However, the resulting + // decimal representations are not exactly "short". + // + // The documentation for 'std::to_chars' (https://en.cppreference.com/w/cpp/utility/to_chars) + // says "value is converted to a string as if by std::sprintf in the default ("C") locale" + // and since sprintf promotes float's to double's, I think this is exactly what 'std::to_chars' + // does. + // On the other hand, the documentation for 'std::to_chars' requires that "parsing the + // representation using the corresponding std::from_chars function recovers value exactly". That + // indicates that single precision floating-point numbers should be recovered using + // 'std::strtof'. + // + // NB: If the neighbors are computed for single-precision numbers, there is a single float + // (7.0385307e-26f) which can't be recovered using strtod. The resulting double precision + // value is off by 1 ulp. +#if 0 + const boundaries w = compute_boundaries(static_cast(value)); +#else + const boundaries w = compute_boundaries(value); +#endif + + grisu2(buf, len, decimal_exponent, w.minus, w.w, w.plus); +} + +/*! +@brief appends a decimal representation of e to buf +@return a pointer to the element following the exponent. +@pre -1000 < e < 1000 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* append_exponent(char* buf, int e) +{ + JSON_ASSERT(e > -1000); + JSON_ASSERT(e < 1000); + + if (e < 0) + { + e = -e; + *buf++ = '-'; + } + else + { + *buf++ = '+'; + } + + auto k = static_cast(e); + if (k < 10) + { + // Always print at least two digits in the exponent. + // This is for compatibility with printf("%g"). + *buf++ = '0'; + *buf++ = static_cast('0' + k); + } + else if (k < 100) + { + *buf++ = static_cast('0' + k / 10); + k %= 10; + *buf++ = static_cast('0' + k); + } + else + { + *buf++ = static_cast('0' + k / 100); + k %= 100; + *buf++ = static_cast('0' + k / 10); + k %= 10; + *buf++ = static_cast('0' + k); + } + + return buf; +} + +/*! +@brief prettify v = buf * 10^decimal_exponent + +If v is in the range [10^min_exp, 10^max_exp) it will be printed in fixed-point +notation. Otherwise it will be printed in exponential notation. + +@pre min_exp < 0 +@pre max_exp > 0 +*/ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL +inline char* format_buffer(char* buf, int len, int decimal_exponent, + int min_exp, int max_exp) +{ + JSON_ASSERT(min_exp < 0); + JSON_ASSERT(max_exp > 0); + + const int k = len; + const int n = len + decimal_exponent; + + // v = buf * 10^(n-k) + // k is the length of the buffer (number of decimal digits) + // n is the position of the decimal point relative to the start of the buffer. + + if (k <= n && n <= max_exp) + { + // digits[000] + // len <= max_exp + 2 + + std::memset(buf + k, '0', static_cast(n) - static_cast(k)); + // Make it look like a floating-point number (#362, #378) + buf[n + 0] = '.'; + buf[n + 1] = '0'; + return buf + (static_cast(n) + 2); + } + + if (0 < n && n <= max_exp) + { + // dig.its + // len <= max_digits10 + 1 + + JSON_ASSERT(k > n); + + std::memmove(buf + (static_cast(n) + 1), buf + n, static_cast(k) - static_cast(n)); + buf[n] = '.'; + return buf + (static_cast(k) + 1U); + } + + if (min_exp < n && n <= 0) + { + // 0.[000]digits + // len <= 2 + (-min_exp - 1) + max_digits10 + + std::memmove(buf + (2 + static_cast(-n)), buf, static_cast(k)); + buf[0] = '0'; + buf[1] = '.'; + std::memset(buf + 2, '0', static_cast(-n)); + return buf + (2U + static_cast(-n) + static_cast(k)); + } + + if (k == 1) + { + // dE+123 + // len <= 1 + 5 + + buf += 1; + } + else + { + // d.igitsE+123 + // len <= max_digits10 + 1 + 5 + + std::memmove(buf + 2, buf + 1, static_cast(k) - 1); + buf[1] = '.'; + buf += 1 + static_cast(k); + } + + *buf++ = 'e'; + return append_exponent(buf, n - 1); +} + +} // namespace dtoa_impl + +/*! +@brief generates a decimal representation of the floating-point number value in [first, last). + +The format of the resulting decimal representation is similar to printf's %g +format. Returns an iterator pointing past-the-end of the decimal representation. + +@note The input number must be finite, i.e. NaN's and Inf's are not supported. +@note The buffer must be large enough. +@note The result is NOT null-terminated. +*/ +template +JSON_HEDLEY_NON_NULL(1, 2) +JSON_HEDLEY_RETURNS_NON_NULL +char* to_chars(char* first, const char* last, FloatType value) +{ + static_cast(last); // maybe unused - fix warning + JSON_ASSERT(std::isfinite(value)); + + // Use signbit(value) instead of (value < 0) since signbit works for -0. + if (std::signbit(value)) + { + value = -value; + *first++ = '-'; + } + +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + if (value == 0) // +-0 + { + *first++ = '0'; + // Make it look like a floating-point number (#362, #378) + *first++ = '.'; + *first++ = '0'; + return first; + } +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + + JSON_ASSERT(last - first >= std::numeric_limits::max_digits10); + + // Compute v = buffer * 10^decimal_exponent. + // The decimal digits are stored in the buffer, which needs to be interpreted + // as an unsigned decimal integer. + // len is the length of the buffer, i.e. the number of decimal digits. + int len = 0; + int decimal_exponent = 0; + dtoa_impl::grisu2(first, len, decimal_exponent, value); + + JSON_ASSERT(len <= std::numeric_limits::max_digits10); + + // Format the buffer like printf("%.*g", prec, value) + constexpr int kMinExp = -4; + // Use digits10 here to increase compatibility with version 2. + constexpr int kMaxExp = std::numeric_limits::digits10; + + JSON_ASSERT(last - first >= kMaxExp + 2); + JSON_ASSERT(last - first >= 2 + (-kMinExp - 1) + std::numeric_limits::max_digits10); + JSON_ASSERT(last - first >= std::numeric_limits::max_digits10 + 6); + + return dtoa_impl::format_buffer(first, len, decimal_exponent, kMinExp, kMaxExp); +} + +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + +// #include + +// #include + +// #include + + +namespace nlohmann +{ +namespace detail +{ +/////////////////// +// serialization // +/////////////////// + +/// how to treat decoding errors +enum class error_handler_t +{ + strict, ///< throw a type_error exception in case of invalid UTF-8 + replace, ///< replace invalid UTF-8 sequences with U+FFFD + ignore ///< ignore invalid UTF-8 sequences +}; + +template +class serializer +{ + using string_t = typename BasicJsonType::string_t; + using number_float_t = typename BasicJsonType::number_float_t; + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using binary_char_t = typename BasicJsonType::binary_t::value_type; + static constexpr std::uint8_t UTF8_ACCEPT = 0; + static constexpr std::uint8_t UTF8_REJECT = 1; + + public: + /*! + @param[in] s output stream to serialize to + @param[in] ichar indentation character to use + @param[in] error_handler_ how to react on decoding errors + */ + serializer(output_adapter_t s, const char ichar, + error_handler_t error_handler_ = error_handler_t::strict) + : o(std::move(s)) + , loc(std::localeconv()) + , thousands_sep(loc->thousands_sep == nullptr ? '\0' : std::char_traits::to_char_type(* (loc->thousands_sep))) + , decimal_point(loc->decimal_point == nullptr ? '\0' : std::char_traits::to_char_type(* (loc->decimal_point))) + , indent_char(ichar) + , indent_string(512, indent_char) + , error_handler(error_handler_) + {} + + // delete because of pointer members + serializer(const serializer&) = delete; + serializer& operator=(const serializer&) = delete; + serializer(serializer&&) = delete; + serializer& operator=(serializer&&) = delete; + ~serializer() = default; + + /*! + @brief internal implementation of the serialization function + + This function is called by the public member function dump and organizes + the serialization internally. The indentation level is propagated as + additional parameter. In case of arrays and objects, the function is + called recursively. + + - strings and object keys are escaped using `escape_string()` + - integer numbers are converted implicitly via `operator<<` + - floating-point numbers are converted to a string using `"%g"` format + - binary values are serialized as objects containing the subtype and the + byte array + + @param[in] val value to serialize + @param[in] pretty_print whether the output shall be pretty-printed + @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters + in the output are escaped with `\uXXXX` sequences, and the result consists + of ASCII characters only. + @param[in] indent_step the indent level + @param[in] current_indent the current indent level (only used internally) + */ + void dump(const BasicJsonType& val, + const bool pretty_print, + const bool ensure_ascii, + const unsigned int indent_step, + const unsigned int current_indent = 0) + { + switch (val.m_type) + { + case value_t::object: + { + if (val.m_value.object->empty()) + { + o->write_characters("{}", 2); + return; + } + + if (pretty_print) + { + o->write_characters("{\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + // first n-1 elements + auto i = val.m_value.object->cbegin(); + for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i) + { + o->write_characters(indent_string.c_str(), new_indent); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\": ", 3); + dump(i->second, true, ensure_ascii, indent_step, new_indent); + o->write_characters(",\n", 2); + } + + // last element + JSON_ASSERT(i != val.m_value.object->cend()); + JSON_ASSERT(std::next(i) == val.m_value.object->cend()); + o->write_characters(indent_string.c_str(), new_indent); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\": ", 3); + dump(i->second, true, ensure_ascii, indent_step, new_indent); + + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character('}'); + } + else + { + o->write_character('{'); + + // first n-1 elements + auto i = val.m_value.object->cbegin(); + for (std::size_t cnt = 0; cnt < val.m_value.object->size() - 1; ++cnt, ++i) + { + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\":", 2); + dump(i->second, false, ensure_ascii, indent_step, current_indent); + o->write_character(','); + } + + // last element + JSON_ASSERT(i != val.m_value.object->cend()); + JSON_ASSERT(std::next(i) == val.m_value.object->cend()); + o->write_character('\"'); + dump_escaped(i->first, ensure_ascii); + o->write_characters("\":", 2); + dump(i->second, false, ensure_ascii, indent_step, current_indent); + + o->write_character('}'); + } + + return; + } + + case value_t::array: + { + if (val.m_value.array->empty()) + { + o->write_characters("[]", 2); + return; + } + + if (pretty_print) + { + o->write_characters("[\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + // first n-1 elements + for (auto i = val.m_value.array->cbegin(); + i != val.m_value.array->cend() - 1; ++i) + { + o->write_characters(indent_string.c_str(), new_indent); + dump(*i, true, ensure_ascii, indent_step, new_indent); + o->write_characters(",\n", 2); + } + + // last element + JSON_ASSERT(!val.m_value.array->empty()); + o->write_characters(indent_string.c_str(), new_indent); + dump(val.m_value.array->back(), true, ensure_ascii, indent_step, new_indent); + + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character(']'); + } + else + { + o->write_character('['); + + // first n-1 elements + for (auto i = val.m_value.array->cbegin(); + i != val.m_value.array->cend() - 1; ++i) + { + dump(*i, false, ensure_ascii, indent_step, current_indent); + o->write_character(','); + } + + // last element + JSON_ASSERT(!val.m_value.array->empty()); + dump(val.m_value.array->back(), false, ensure_ascii, indent_step, current_indent); + + o->write_character(']'); + } + + return; + } + + case value_t::string: + { + o->write_character('\"'); + dump_escaped(*val.m_value.string, ensure_ascii); + o->write_character('\"'); + return; + } + + case value_t::binary: + { + if (pretty_print) + { + o->write_characters("{\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + o->write_characters(indent_string.c_str(), new_indent); + + o->write_characters("\"bytes\": [", 10); + + if (!val.m_value.binary->empty()) + { + for (auto i = val.m_value.binary->cbegin(); + i != val.m_value.binary->cend() - 1; ++i) + { + dump_integer(*i); + o->write_characters(", ", 2); + } + dump_integer(val.m_value.binary->back()); + } + + o->write_characters("],\n", 3); + o->write_characters(indent_string.c_str(), new_indent); + + o->write_characters("\"subtype\": ", 11); + if (val.m_value.binary->has_subtype()) + { + dump_integer(val.m_value.binary->subtype()); + } + else + { + o->write_characters("null", 4); + } + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character('}'); + } + else + { + o->write_characters("{\"bytes\":[", 10); + + if (!val.m_value.binary->empty()) + { + for (auto i = val.m_value.binary->cbegin(); + i != val.m_value.binary->cend() - 1; ++i) + { + dump_integer(*i); + o->write_character(','); + } + dump_integer(val.m_value.binary->back()); + } + + o->write_characters("],\"subtype\":", 12); + if (val.m_value.binary->has_subtype()) + { + dump_integer(val.m_value.binary->subtype()); + o->write_character('}'); + } + else + { + o->write_characters("null}", 5); + } + } + return; + } + + case value_t::boolean: + { + if (val.m_value.boolean) + { + o->write_characters("true", 4); + } + else + { + o->write_characters("false", 5); + } + return; + } + + case value_t::number_integer: + { + dump_integer(val.m_value.number_integer); + return; + } + + case value_t::number_unsigned: + { + dump_integer(val.m_value.number_unsigned); + return; + } + + case value_t::number_float: + { + dump_float(val.m_value.number_float); + return; + } + + case value_t::discarded: + { + o->write_characters("", 11); + return; + } + + case value_t::null: + { + o->write_characters("null", 4); + return; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + } + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief dump escaped string + + Escape a string by replacing certain special characters by a sequence of an + escape character (backslash) and another character and other control + characters by a sequence of "\u" followed by a four-digit hex + representation. The escaped string is written to output stream @a o. + + @param[in] s the string to escape + @param[in] ensure_ascii whether to escape non-ASCII characters with + \uXXXX sequences + + @complexity Linear in the length of string @a s. + */ + void dump_escaped(const string_t& s, const bool ensure_ascii) + { + std::uint32_t codepoint{}; + std::uint8_t state = UTF8_ACCEPT; + std::size_t bytes = 0; // number of bytes written to string_buffer + + // number of bytes written at the point of the last valid byte + std::size_t bytes_after_last_accept = 0; + std::size_t undumped_chars = 0; + + for (std::size_t i = 0; i < s.size(); ++i) + { + const auto byte = static_cast(s[i]); + + switch (decode(state, codepoint, byte)) + { + case UTF8_ACCEPT: // decode found a new code point + { + switch (codepoint) + { + case 0x08: // backspace + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'b'; + break; + } + + case 0x09: // horizontal tab + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 't'; + break; + } + + case 0x0A: // newline + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'n'; + break; + } + + case 0x0C: // formfeed + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'f'; + break; + } + + case 0x0D: // carriage return + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'r'; + break; + } + + case 0x22: // quotation mark + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = '\"'; + break; + } + + case 0x5C: // reverse solidus + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = '\\'; + break; + } + + default: + { + // escape control characters (0x00..0x1F) or, if + // ensure_ascii parameter is used, non-ASCII characters + if ((codepoint <= 0x1F) || (ensure_ascii && (codepoint >= 0x7F))) + { + if (codepoint <= 0xFFFF) + { + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + (std::snprintf)(string_buffer.data() + bytes, 7, "\\u%04x", + static_cast(codepoint)); + bytes += 6; + } + else + { + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + (std::snprintf)(string_buffer.data() + bytes, 13, "\\u%04x\\u%04x", + static_cast(0xD7C0u + (codepoint >> 10u)), + static_cast(0xDC00u + (codepoint & 0x3FFu))); + bytes += 12; + } + } + else + { + // copy byte to buffer (all previous bytes + // been copied have in default case above) + string_buffer[bytes++] = s[i]; + } + break; + } + } + + // write buffer and reset index; there must be 13 bytes + // left, as this is the maximal number of bytes to be + // written ("\uxxxx\uxxxx\0") for one code point + if (string_buffer.size() - bytes < 13) + { + o->write_characters(string_buffer.data(), bytes); + bytes = 0; + } + + // remember the byte position of this accept + bytes_after_last_accept = bytes; + undumped_chars = 0; + break; + } + + case UTF8_REJECT: // decode found invalid UTF-8 byte + { + switch (error_handler) + { + case error_handler_t::strict: + { + std::string sn(9, '\0'); + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + (std::snprintf)(&sn[0], sn.size(), "%.2X", byte); + JSON_THROW(type_error::create(316, "invalid UTF-8 byte at index " + std::to_string(i) + ": 0x" + sn, BasicJsonType())); + } + + case error_handler_t::ignore: + case error_handler_t::replace: + { + // in case we saw this character the first time, we + // would like to read it again, because the byte + // may be OK for itself, but just not OK for the + // previous sequence + if (undumped_chars > 0) + { + --i; + } + + // reset length buffer to the last accepted index; + // thus removing/ignoring the invalid characters + bytes = bytes_after_last_accept; + + if (error_handler == error_handler_t::replace) + { + // add a replacement character + if (ensure_ascii) + { + string_buffer[bytes++] = '\\'; + string_buffer[bytes++] = 'u'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'f'; + string_buffer[bytes++] = 'd'; + } + else + { + string_buffer[bytes++] = detail::binary_writer::to_char_type('\xEF'); + string_buffer[bytes++] = detail::binary_writer::to_char_type('\xBF'); + string_buffer[bytes++] = detail::binary_writer::to_char_type('\xBD'); + } + + // write buffer and reset index; there must be 13 bytes + // left, as this is the maximal number of bytes to be + // written ("\uxxxx\uxxxx\0") for one code point + if (string_buffer.size() - bytes < 13) + { + o->write_characters(string_buffer.data(), bytes); + bytes = 0; + } + + bytes_after_last_accept = bytes; + } + + undumped_chars = 0; + + // continue processing the string + state = UTF8_ACCEPT; + break; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + break; + } + + default: // decode found yet incomplete multi-byte code point + { + if (!ensure_ascii) + { + // code point will not be escaped - copy byte to buffer + string_buffer[bytes++] = s[i]; + } + ++undumped_chars; + break; + } + } + } + + // we finished processing the string + if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT)) + { + // write buffer + if (bytes > 0) + { + o->write_characters(string_buffer.data(), bytes); + } + } + else + { + // we finish reading, but do not accept: string was incomplete + switch (error_handler) + { + case error_handler_t::strict: + { + std::string sn(9, '\0'); + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + (std::snprintf)(&sn[0], sn.size(), "%.2X", static_cast(s.back())); + JSON_THROW(type_error::create(316, "incomplete UTF-8 string; last byte: 0x" + sn, BasicJsonType())); + } + + case error_handler_t::ignore: + { + // write all accepted bytes + o->write_characters(string_buffer.data(), bytes_after_last_accept); + break; + } + + case error_handler_t::replace: + { + // write all accepted bytes + o->write_characters(string_buffer.data(), bytes_after_last_accept); + // add a replacement character + if (ensure_ascii) + { + o->write_characters("\\ufffd", 6); + } + else + { + o->write_characters("\xEF\xBF\xBD", 3); + } + break; + } + + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + } + } + + private: + /*! + @brief count digits + + Count the number of decimal (base 10) digits for an input unsigned integer. + + @param[in] x unsigned integer number to count its digits + @return number of decimal digits + */ + inline unsigned int count_digits(number_unsigned_t x) noexcept + { + unsigned int n_digits = 1; + for (;;) + { + if (x < 10) + { + return n_digits; + } + if (x < 100) + { + return n_digits + 1; + } + if (x < 1000) + { + return n_digits + 2; + } + if (x < 10000) + { + return n_digits + 3; + } + x = x / 10000u; + n_digits += 4; + } + } + + /*! + @brief dump an integer + + Dump a given integer to output stream @a o. Works internally with + @a number_buffer. + + @param[in] x integer number (signed or unsigned) to dump + @tparam NumberType either @a number_integer_t or @a number_unsigned_t + */ + template < typename NumberType, detail::enable_if_t < + std::is_integral::value || + std::is_same::value || + std::is_same::value || + std::is_same::value, + int > = 0 > + void dump_integer(NumberType x) + { + static constexpr std::array, 100> digits_to_99 + { + { + {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}}, + {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}}, + {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}}, + {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}}, + {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}}, + {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}}, + {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}}, + {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}}, + {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}}, + {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}}, + } + }; + + // special case for "0" + if (x == 0) + { + o->write_character('0'); + return; + } + + // use a pointer to fill the buffer + auto buffer_ptr = number_buffer.begin(); // NOLINT(llvm-qualified-auto,readability-qualified-auto,cppcoreguidelines-pro-type-vararg,hicpp-vararg) + + const bool is_negative = std::is_signed::value && !(x >= 0); // see issue #755 + number_unsigned_t abs_value; + + unsigned int n_chars{}; + + if (is_negative) + { + *buffer_ptr = '-'; + abs_value = remove_sign(static_cast(x)); + + // account one more byte for the minus sign + n_chars = 1 + count_digits(abs_value); + } + else + { + abs_value = static_cast(x); + n_chars = count_digits(abs_value); + } + + // spare 1 byte for '\0' + JSON_ASSERT(n_chars < number_buffer.size() - 1); + + // jump to the end to generate the string from backward + // so we later avoid reversing the result + buffer_ptr += n_chars; + + // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu + // See: https://www.youtube.com/watch?v=o4-CwDo2zpg + while (abs_value >= 100) + { + const auto digits_index = static_cast((abs_value % 100)); + abs_value /= 100; + *(--buffer_ptr) = digits_to_99[digits_index][1]; + *(--buffer_ptr) = digits_to_99[digits_index][0]; + } + + if (abs_value >= 10) + { + const auto digits_index = static_cast(abs_value); + *(--buffer_ptr) = digits_to_99[digits_index][1]; + *(--buffer_ptr) = digits_to_99[digits_index][0]; + } + else + { + *(--buffer_ptr) = static_cast('0' + abs_value); + } + + o->write_characters(number_buffer.data(), n_chars); + } + + /*! + @brief dump a floating-point number + + Dump a given floating-point number to output stream @a o. Works internally + with @a number_buffer. + + @param[in] x floating-point number to dump + */ + void dump_float(number_float_t x) + { + // NaN / inf + if (!std::isfinite(x)) + { + o->write_characters("null", 4); + return; + } + + // If number_float_t is an IEEE-754 single or double precision number, + // use the Grisu2 algorithm to produce short numbers which are + // guaranteed to round-trip, using strtof and strtod, resp. + // + // NB: The test below works if == . + static constexpr bool is_ieee_single_or_double + = (std::numeric_limits::is_iec559 && std::numeric_limits::digits == 24 && std::numeric_limits::max_exponent == 128) || + (std::numeric_limits::is_iec559 && std::numeric_limits::digits == 53 && std::numeric_limits::max_exponent == 1024); + + dump_float(x, std::integral_constant()); + } + + void dump_float(number_float_t x, std::true_type /*is_ieee_single_or_double*/) + { + auto* begin = number_buffer.data(); + auto* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x); + + o->write_characters(begin, static_cast(end - begin)); + } + + void dump_float(number_float_t x, std::false_type /*is_ieee_single_or_double*/) + { + // get number of digits for a float -> text -> float round-trip + static constexpr auto d = std::numeric_limits::max_digits10; + + // the actual conversion + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-vararg,hicpp-vararg) + std::ptrdiff_t len = (std::snprintf)(number_buffer.data(), number_buffer.size(), "%.*g", d, x); + + // negative value indicates an error + JSON_ASSERT(len > 0); + // check if buffer was large enough + JSON_ASSERT(static_cast(len) < number_buffer.size()); + + // erase thousands separator + if (thousands_sep != '\0') + { + // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::remove returns an iterator, see https://github.com/nlohmann/json/issues/3081 + const auto end = std::remove(number_buffer.begin(), number_buffer.begin() + len, thousands_sep); + std::fill(end, number_buffer.end(), '\0'); + JSON_ASSERT((end - number_buffer.begin()) <= len); + len = (end - number_buffer.begin()); + } + + // convert decimal point to '.' + if (decimal_point != '\0' && decimal_point != '.') + { + // NOLINTNEXTLINE(readability-qualified-auto,llvm-qualified-auto): std::find returns an iterator, see https://github.com/nlohmann/json/issues/3081 + const auto dec_pos = std::find(number_buffer.begin(), number_buffer.end(), decimal_point); + if (dec_pos != number_buffer.end()) + { + *dec_pos = '.'; + } + } + + o->write_characters(number_buffer.data(), static_cast(len)); + + // determine if need to append ".0" + const bool value_is_int_like = + std::none_of(number_buffer.begin(), number_buffer.begin() + len + 1, + [](char c) + { + return c == '.' || c == 'e'; + }); + + if (value_is_int_like) + { + o->write_characters(".0", 2); + } + } + + /*! + @brief check whether a string is UTF-8 encoded + + The function checks each byte of a string whether it is UTF-8 encoded. The + result of the check is stored in the @a state parameter. The function must + be called initially with state 0 (accept). State 1 means the string must + be rejected, because the current byte is not allowed. If the string is + completely processed, but the state is non-zero, the string ended + prematurely; that is, the last byte indicated more bytes should have + followed. + + @param[in,out] state the state of the decoding + @param[in,out] codep codepoint (valid only if resulting state is UTF8_ACCEPT) + @param[in] byte next byte to decode + @return new state + + @note The function has been edited: a std::array is used. + + @copyright Copyright (c) 2008-2009 Bjoern Hoehrmann + @sa http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ + */ + static std::uint8_t decode(std::uint8_t& state, std::uint32_t& codep, const std::uint8_t byte) noexcept + { + static const std::array utf8d = + { + { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7F + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF + 8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF + 0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF + 0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF + 0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2 + 1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4 + 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6 + 1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8 + } + }; + + JSON_ASSERT(byte < utf8d.size()); + const std::uint8_t type = utf8d[byte]; + + codep = (state != UTF8_ACCEPT) + ? (byte & 0x3fu) | (codep << 6u) + : (0xFFu >> type) & (byte); + + std::size_t index = 256u + static_cast(state) * 16u + static_cast(type); + JSON_ASSERT(index < 400); + state = utf8d[index]; + return state; + } + + /* + * Overload to make the compiler happy while it is instantiating + * dump_integer for number_unsigned_t. + * Must never be called. + */ + number_unsigned_t remove_sign(number_unsigned_t x) + { + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + return x; // LCOV_EXCL_LINE + } + + /* + * Helper function for dump_integer + * + * This function takes a negative signed integer and returns its absolute + * value as unsigned integer. The plus/minus shuffling is necessary as we can + * not directly remove the sign of an arbitrary signed integer as the + * absolute values of INT_MIN and INT_MAX are usually not the same. See + * #1708 for details. + */ + inline number_unsigned_t remove_sign(number_integer_t x) noexcept + { + JSON_ASSERT(x < 0 && x < (std::numeric_limits::max)()); // NOLINT(misc-redundant-expression) + return static_cast(-(x + 1)) + 1; + } + + private: + /// the output of the serializer + output_adapter_t o = nullptr; + + /// a (hopefully) large enough character buffer + std::array number_buffer{{}}; + + /// the locale + const std::lconv* loc = nullptr; + /// the locale's thousand separator character + const char thousands_sep = '\0'; + /// the locale's decimal point character + const char decimal_point = '\0'; + + /// string buffer + std::array string_buffer{{}}; + + /// the indentation character + const char indent_char; + /// the indentation string + string_t indent_string; + + /// error_handler how to react on decoding errors + const error_handler_t error_handler; +}; +} // namespace detail +} // namespace nlohmann + +// #include + +// #include + +// #include + + +#include // less +#include // initializer_list +#include // input_iterator_tag, iterator_traits +#include // allocator +#include // for out_of_range +#include // enable_if, is_convertible +#include // pair +#include // vector + +// #include + + +namespace nlohmann +{ + +/// ordered_map: a minimal map-like container that preserves insertion order +/// for use within nlohmann::basic_json +template , + class Allocator = std::allocator>> + struct ordered_map : std::vector, Allocator> +{ + using key_type = Key; + using mapped_type = T; + using Container = std::vector, Allocator>; + using typename Container::iterator; + using typename Container::const_iterator; + using typename Container::size_type; + using typename Container::value_type; + + // Explicit constructors instead of `using Container::Container` + // otherwise older compilers choke on it (GCC <= 5.5, xcode <= 9.4) + ordered_map(const Allocator& alloc = Allocator()) : Container{alloc} {} + template + ordered_map(It first, It last, const Allocator& alloc = Allocator()) + : Container{first, last, alloc} {} + ordered_map(std::initializer_list init, const Allocator& alloc = Allocator() ) + : Container{init, alloc} {} + + std::pair emplace(const key_type& key, T&& t) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return {it, false}; + } + } + Container::emplace_back(key, t); + return {--this->end(), true}; + } + + T& operator[](const Key& key) + { + return emplace(key, T{}).first->second; + } + + const T& operator[](const Key& key) const + { + return at(key); + } + + T& at(const Key& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it->second; + } + } + + JSON_THROW(std::out_of_range("key not found")); + } + + const T& at(const Key& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it->second; + } + } + + JSON_THROW(std::out_of_range("key not found")); + } + + size_type erase(const Key& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + // Since we cannot move const Keys, re-construct them in place + for (auto next = it; ++next != this->end(); ++it) + { + it->~value_type(); // Destroy but keep allocation + new (&*it) value_type{std::move(*next)}; + } + Container::pop_back(); + return 1; + } + } + return 0; + } + + iterator erase(iterator pos) + { + auto it = pos; + + // Since we cannot move const Keys, re-construct them in place + for (auto next = it; ++next != this->end(); ++it) + { + it->~value_type(); // Destroy but keep allocation + new (&*it) value_type{std::move(*next)}; + } + Container::pop_back(); + return pos; + } + + size_type count(const Key& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return 1; + } + } + return 0; + } + + iterator find(const Key& key) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it; + } + } + return Container::end(); + } + + const_iterator find(const Key& key) const + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == key) + { + return it; + } + } + return Container::end(); + } + + std::pair insert( value_type&& value ) + { + return emplace(value.first, std::move(value.second)); + } + + std::pair insert( const value_type& value ) + { + for (auto it = this->begin(); it != this->end(); ++it) + { + if (it->first == value.first) + { + return {it, false}; + } + } + Container::push_back(value); + return {--this->end(), true}; + } + + template + using require_input_iter = typename std::enable_if::iterator_category, + std::input_iterator_tag>::value>::type; + + template> + void insert(InputIt first, InputIt last) + { + for (auto it = first; it != last; ++it) + { + insert(*it); + } + } +}; + +} // namespace nlohmann + + +#if defined(JSON_HAS_CPP_17) + #include +#endif + +/*! +@brief namespace for Niels Lohmann +@see https://github.com/nlohmann +@since version 1.0.0 +*/ +namespace nlohmann +{ + +/*! +@brief a class to store JSON values + +@tparam ObjectType type for JSON objects (`std::map` by default; will be used +in @ref object_t) +@tparam ArrayType type for JSON arrays (`std::vector` by default; will be used +in @ref array_t) +@tparam StringType type for JSON strings and object keys (`std::string` by +default; will be used in @ref string_t) +@tparam BooleanType type for JSON booleans (`bool` by default; will be used +in @ref boolean_t) +@tparam NumberIntegerType type for JSON integer numbers (`int64_t` by +default; will be used in @ref number_integer_t) +@tparam NumberUnsignedType type for JSON unsigned integer numbers (@c +`uint64_t` by default; will be used in @ref number_unsigned_t) +@tparam NumberFloatType type for JSON floating-point numbers (`double` by +default; will be used in @ref number_float_t) +@tparam BinaryType type for packed binary data for compatibility with binary +serialization formats (`std::vector` by default; will be used in +@ref binary_t) +@tparam AllocatorType type of the allocator to use (`std::allocator` by +default) +@tparam JSONSerializer the serializer to resolve internal calls to `to_json()` +and `from_json()` (@ref adl_serializer by default) + +@requirement The class satisfies the following concept requirements: +- Basic + - [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible): + JSON values can be default constructed. The result will be a JSON null + value. + - [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible): + A JSON value can be constructed from an rvalue argument. + - [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible): + A JSON value can be copy-constructed from an lvalue expression. + - [MoveAssignable](https://en.cppreference.com/w/cpp/named_req/MoveAssignable): + A JSON value van be assigned from an rvalue argument. + - [CopyAssignable](https://en.cppreference.com/w/cpp/named_req/CopyAssignable): + A JSON value can be copy-assigned from an lvalue expression. + - [Destructible](https://en.cppreference.com/w/cpp/named_req/Destructible): + JSON values can be destructed. +- Layout + - [StandardLayoutType](https://en.cppreference.com/w/cpp/named_req/StandardLayoutType): + JSON values have + [standard layout](https://en.cppreference.com/w/cpp/language/data_members#Standard_layout): + All non-static data members are private and standard layout types, the + class has no virtual functions or (virtual) base classes. +- Library-wide + - [EqualityComparable](https://en.cppreference.com/w/cpp/named_req/EqualityComparable): + JSON values can be compared with `==`, see @ref + operator==(const_reference,const_reference). + - [LessThanComparable](https://en.cppreference.com/w/cpp/named_req/LessThanComparable): + JSON values can be compared with `<`, see @ref + operator<(const_reference,const_reference). + - [Swappable](https://en.cppreference.com/w/cpp/named_req/Swappable): + Any JSON lvalue or rvalue of can be swapped with any lvalue or rvalue of + other compatible types, using unqualified function call @ref swap(). + - [NullablePointer](https://en.cppreference.com/w/cpp/named_req/NullablePointer): + JSON values can be compared against `std::nullptr_t` objects which are used + to model the `null` value. +- Container + - [Container](https://en.cppreference.com/w/cpp/named_req/Container): + JSON values can be used like STL containers and provide iterator access. + - [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer); + JSON values can be used like STL containers and provide reverse iterator + access. + +@invariant The member variables @a m_value and @a m_type have the following +relationship: +- If `m_type == value_t::object`, then `m_value.object != nullptr`. +- If `m_type == value_t::array`, then `m_value.array != nullptr`. +- If `m_type == value_t::string`, then `m_value.string != nullptr`. +The invariants are checked by member function assert_invariant(). + +@internal +@note ObjectType trick from https://stackoverflow.com/a/9860911 +@endinternal + +@see [RFC 8259: The JavaScript Object Notation (JSON) Data Interchange +Format](https://tools.ietf.org/html/rfc8259) + +@since version 1.0.0 + +@nosubgrouping +*/ +NLOHMANN_BASIC_JSON_TPL_DECLARATION +class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-special-member-functions) +{ + private: + template friend struct detail::external_constructor; + friend ::nlohmann::json_pointer; + + template + friend class ::nlohmann::detail::parser; + friend ::nlohmann::detail::serializer; + template + friend class ::nlohmann::detail::iter_impl; + template + friend class ::nlohmann::detail::binary_writer; + template + friend class ::nlohmann::detail::binary_reader; + template + friend class ::nlohmann::detail::json_sax_dom_parser; + template + friend class ::nlohmann::detail::json_sax_dom_callback_parser; + friend class ::nlohmann::detail::exception; + + /// workaround type for MSVC + using basic_json_t = NLOHMANN_BASIC_JSON_TPL; + + JSON_PRIVATE_UNLESS_TESTED: + // convenience aliases for types residing in namespace detail; + using lexer = ::nlohmann::detail::lexer_base; + + template + static ::nlohmann::detail::parser parser( + InputAdapterType adapter, + detail::parser_callback_tcb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false + ) + { + return ::nlohmann::detail::parser(std::move(adapter), + std::move(cb), allow_exceptions, ignore_comments); + } + + private: + using primitive_iterator_t = ::nlohmann::detail::primitive_iterator_t; + template + using internal_iterator = ::nlohmann::detail::internal_iterator; + template + using iter_impl = ::nlohmann::detail::iter_impl; + template + using iteration_proxy = ::nlohmann::detail::iteration_proxy; + template using json_reverse_iterator = ::nlohmann::detail::json_reverse_iterator; + + template + using output_adapter_t = ::nlohmann::detail::output_adapter_t; + + template + using binary_reader = ::nlohmann::detail::binary_reader; + template using binary_writer = ::nlohmann::detail::binary_writer; + + JSON_PRIVATE_UNLESS_TESTED: + using serializer = ::nlohmann::detail::serializer; + + public: + using value_t = detail::value_t; + /// JSON Pointer, see @ref nlohmann::json_pointer + using json_pointer = ::nlohmann::json_pointer; + template + using json_serializer = JSONSerializer; + /// how to treat decoding errors + using error_handler_t = detail::error_handler_t; + /// how to treat CBOR tags + using cbor_tag_handler_t = detail::cbor_tag_handler_t; + /// helper type for initializer lists of basic_json values + using initializer_list_t = std::initializer_list>; + + using input_format_t = detail::input_format_t; + /// SAX interface type, see @ref nlohmann::json_sax + using json_sax_t = json_sax; + + //////////////// + // exceptions // + //////////////// + + /// @name exceptions + /// Classes to implement user-defined exceptions. + /// @{ + + /// @copydoc detail::exception + using exception = detail::exception; + /// @copydoc detail::parse_error + using parse_error = detail::parse_error; + /// @copydoc detail::invalid_iterator + using invalid_iterator = detail::invalid_iterator; + /// @copydoc detail::type_error + using type_error = detail::type_error; + /// @copydoc detail::out_of_range + using out_of_range = detail::out_of_range; + /// @copydoc detail::other_error + using other_error = detail::other_error; + + /// @} + + + ///////////////////// + // container types // + ///////////////////// + + /// @name container types + /// The canonic container types to use @ref basic_json like any other STL + /// container. + /// @{ + + /// the type of elements in a basic_json container + using value_type = basic_json; + + /// the type of an element reference + using reference = value_type&; + /// the type of an element const reference + using const_reference = const value_type&; + + /// a type to represent differences between iterators + using difference_type = std::ptrdiff_t; + /// a type to represent container sizes + using size_type = std::size_t; + + /// the allocator type + using allocator_type = AllocatorType; + + /// the type of an element pointer + using pointer = typename std::allocator_traits::pointer; + /// the type of an element const pointer + using const_pointer = typename std::allocator_traits::const_pointer; + + /// an iterator for a basic_json container + using iterator = iter_impl; + /// a const iterator for a basic_json container + using const_iterator = iter_impl; + /// a reverse iterator for a basic_json container + using reverse_iterator = json_reverse_iterator; + /// a const reverse iterator for a basic_json container + using const_reverse_iterator = json_reverse_iterator; + + /// @} + + + /*! + @brief returns the allocator associated with the container + */ + static allocator_type get_allocator() + { + return allocator_type(); + } + + /*! + @brief returns version information on the library + + This function returns a JSON object with information about the library, + including the version number and information on the platform and compiler. + + @return JSON object holding version information + key | description + ----------- | --------------- + `compiler` | Information on the used compiler. It is an object with the following keys: `c++` (the used C++ standard), `family` (the compiler family; possible values are `clang`, `icc`, `gcc`, `ilecpp`, `msvc`, `pgcpp`, `sunpro`, and `unknown`), and `version` (the compiler version). + `copyright` | The copyright line for the library as string. + `name` | The name of the library as string. + `platform` | The used platform as string. Possible values are `win32`, `linux`, `apple`, `unix`, and `unknown`. + `url` | The URL of the project as string. + `version` | The version of the library. It is an object with the following keys: `major`, `minor`, and `patch` as defined by [Semantic Versioning](http://semver.org), and `string` (the version string). + + @liveexample{The following code shows an example output of the `meta()` + function.,meta} + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @complexity Constant. + + @since 2.1.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json meta() + { + basic_json result; + + result["copyright"] = "(C) 2013-2021 Niels Lohmann"; + result["name"] = "JSON for Modern C++"; + result["url"] = "https://github.com/nlohmann/json"; + result["version"]["string"] = + std::to_string(NLOHMANN_JSON_VERSION_MAJOR) + "." + + std::to_string(NLOHMANN_JSON_VERSION_MINOR) + "." + + std::to_string(NLOHMANN_JSON_VERSION_PATCH); + result["version"]["major"] = NLOHMANN_JSON_VERSION_MAJOR; + result["version"]["minor"] = NLOHMANN_JSON_VERSION_MINOR; + result["version"]["patch"] = NLOHMANN_JSON_VERSION_PATCH; + +#ifdef _WIN32 + result["platform"] = "win32"; +#elif defined __linux__ + result["platform"] = "linux"; +#elif defined __APPLE__ + result["platform"] = "apple"; +#elif defined __unix__ + result["platform"] = "unix"; +#else + result["platform"] = "unknown"; +#endif + +#if defined(__ICC) || defined(__INTEL_COMPILER) + result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}}; +#elif defined(__clang__) + result["compiler"] = {{"family", "clang"}, {"version", __clang_version__}}; +#elif defined(__GNUC__) || defined(__GNUG__) + result["compiler"] = {{"family", "gcc"}, {"version", std::to_string(__GNUC__) + "." + std::to_string(__GNUC_MINOR__) + "." + std::to_string(__GNUC_PATCHLEVEL__)}}; +#elif defined(__HP_cc) || defined(__HP_aCC) + result["compiler"] = "hp" +#elif defined(__IBMCPP__) + result["compiler"] = {{"family", "ilecpp"}, {"version", __IBMCPP__}}; +#elif defined(_MSC_VER) + result["compiler"] = {{"family", "msvc"}, {"version", _MSC_VER}}; +#elif defined(__PGI) + result["compiler"] = {{"family", "pgcpp"}, {"version", __PGI}}; +#elif defined(__SUNPRO_CC) + result["compiler"] = {{"family", "sunpro"}, {"version", __SUNPRO_CC}}; +#else + result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}}; +#endif + +#ifdef __cplusplus + result["compiler"]["c++"] = std::to_string(__cplusplus); +#else + result["compiler"]["c++"] = "unknown"; +#endif + return result; + } + + + /////////////////////////// + // JSON value data types // + /////////////////////////// + + /// @name JSON value data types + /// The data types to store a JSON value. These types are derived from + /// the template arguments passed to class @ref basic_json. + /// @{ + +#if defined(JSON_HAS_CPP_14) + // Use transparent comparator if possible, combined with perfect forwarding + // on find() and count() calls prevents unnecessary string construction. + using object_comparator_t = std::less<>; +#else + using object_comparator_t = std::less; +#endif + + /*! + @brief a type for an object + + [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON objects as follows: + > An object is an unordered collection of zero or more name/value pairs, + > where a name is a string and a value is a string, number, boolean, null, + > object, or array. + + To store objects in C++, a type is defined by the template parameters + described below. + + @tparam ObjectType the container to store objects (e.g., `std::map` or + `std::unordered_map`) + @tparam StringType the type of the keys or names (e.g., `std::string`). + The comparison function `std::less` is used to order elements + inside the container. + @tparam AllocatorType the allocator to use for objects (e.g., + `std::allocator`) + + #### Default type + + With the default values for @a ObjectType (`std::map`), @a StringType + (`std::string`), and @a AllocatorType (`std::allocator`), the default + value for @a object_t is: + + @code {.cpp} + std::map< + std::string, // key_type + basic_json, // value_type + std::less, // key_compare + std::allocator> // allocator_type + > + @endcode + + #### Behavior + + The choice of @a object_t influences the behavior of the JSON class. With + the default type, objects have the following behavior: + + - When all names are unique, objects will be interoperable in the sense + that all software implementations receiving that object will agree on + the name-value mappings. + - When the names within an object are not unique, it is unspecified which + one of the values for a given key will be chosen. For instance, + `{"key": 2, "key": 1}` could be equal to either `{"key": 1}` or + `{"key": 2}`. + - Internally, name/value pairs are stored in lexicographical order of the + names. Objects will also be serialized (see @ref dump) in this order. + For instance, `{"b": 1, "a": 2}` and `{"a": 2, "b": 1}` will be stored + and serialized as `{"a": 2, "b": 1}`. + - When comparing objects, the order of the name/value pairs is irrelevant. + This makes objects interoperable in the sense that they will not be + affected by these differences. For instance, `{"b": 1, "a": 2}` and + `{"a": 2, "b": 1}` will be treated as equal. + + #### Limits + + [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: + > An implementation may set limits on the maximum depth of nesting. + + In this class, the object's limit of nesting is not explicitly constrained. + However, a maximum depth of nesting may be introduced by the compiler or + runtime environment. A theoretical limit can be queried by calling the + @ref max_size function of a JSON object. + + #### Storage + + Objects are stored as pointers in a @ref basic_json type. That is, for any + access to object values, a pointer of type `object_t*` must be + dereferenced. + + @sa see @ref array_t -- type for an array value + + @since version 1.0.0 + + @note The order name/value pairs are added to the object is *not* + preserved by the library. Therefore, iterating an object may return + name/value pairs in a different order than they were originally stored. In + fact, keys will be traversed in alphabetical order as `std::map` with + `std::less` is used by default. Please note this behavior conforms to [RFC + 8259](https://tools.ietf.org/html/rfc8259), because any order implements the + specified "unordered" nature of JSON objects. + */ + using object_t = ObjectType>>; + + /*! + @brief a type for an array + + [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON arrays as follows: + > An array is an ordered sequence of zero or more values. + + To store objects in C++, a type is defined by the template parameters + explained below. + + @tparam ArrayType container type to store arrays (e.g., `std::vector` or + `std::list`) + @tparam AllocatorType allocator to use for arrays (e.g., `std::allocator`) + + #### Default type + + With the default values for @a ArrayType (`std::vector`) and @a + AllocatorType (`std::allocator`), the default value for @a array_t is: + + @code {.cpp} + std::vector< + basic_json, // value_type + std::allocator // allocator_type + > + @endcode + + #### Limits + + [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: + > An implementation may set limits on the maximum depth of nesting. + + In this class, the array's limit of nesting is not explicitly constrained. + However, a maximum depth of nesting may be introduced by the compiler or + runtime environment. A theoretical limit can be queried by calling the + @ref max_size function of a JSON array. + + #### Storage + + Arrays are stored as pointers in a @ref basic_json type. That is, for any + access to array values, a pointer of type `array_t*` must be dereferenced. + + @sa see @ref object_t -- type for an object value + + @since version 1.0.0 + */ + using array_t = ArrayType>; + + /*! + @brief a type for a string + + [RFC 8259](https://tools.ietf.org/html/rfc8259) describes JSON strings as follows: + > A string is a sequence of zero or more Unicode characters. + + To store objects in C++, a type is defined by the template parameter + described below. Unicode values are split by the JSON class into + byte-sized characters during deserialization. + + @tparam StringType the container to store strings (e.g., `std::string`). + Note this container is used for keys/names in objects, see @ref object_t. + + #### Default type + + With the default values for @a StringType (`std::string`), the default + value for @a string_t is: + + @code {.cpp} + std::string + @endcode + + #### Encoding + + Strings are stored in UTF-8 encoding. Therefore, functions like + `std::string::size()` or `std::string::length()` return the number of + bytes in the string rather than the number of characters or glyphs. + + #### String comparison + + [RFC 8259](https://tools.ietf.org/html/rfc8259) states: + > Software implementations are typically required to test names of object + > members for equality. Implementations that transform the textual + > representation into sequences of Unicode code units and then perform the + > comparison numerically, code unit by code unit, are interoperable in the + > sense that implementations will agree in all cases on equality or + > inequality of two strings. For example, implementations that compare + > strings with escaped characters unconverted may incorrectly find that + > `"a\\b"` and `"a\u005Cb"` are not equal. + + This implementation is interoperable as it does compare strings code unit + by code unit. + + #### Storage + + String values are stored as pointers in a @ref basic_json type. That is, + for any access to string values, a pointer of type `string_t*` must be + dereferenced. + + @since version 1.0.0 + */ + using string_t = StringType; + + /*! + @brief a type for a boolean + + [RFC 8259](https://tools.ietf.org/html/rfc8259) implicitly describes a boolean as a + type which differentiates the two literals `true` and `false`. + + To store objects in C++, a type is defined by the template parameter @a + BooleanType which chooses the type to use. + + #### Default type + + With the default values for @a BooleanType (`bool`), the default value for + @a boolean_t is: + + @code {.cpp} + bool + @endcode + + #### Storage + + Boolean values are stored directly inside a @ref basic_json type. + + @since version 1.0.0 + */ + using boolean_t = BooleanType; + + /*! + @brief a type for a number (integer) + + [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows: + > The representation of numbers is similar to that used in most + > programming languages. A number is represented in base 10 using decimal + > digits. It contains an integer component that may be prefixed with an + > optional minus sign, which may be followed by a fraction part and/or an + > exponent part. Leading zeros are not allowed. (...) Numeric values that + > cannot be represented in the grammar below (such as Infinity and NaN) + > are not permitted. + + This description includes both integer and floating-point numbers. + However, C++ allows more precise storage if it is known whether the number + is a signed integer, an unsigned integer or a floating-point number. + Therefore, three different types, @ref number_integer_t, @ref + number_unsigned_t and @ref number_float_t are used. + + To store integer numbers in C++, a type is defined by the template + parameter @a NumberIntegerType which chooses the type to use. + + #### Default type + + With the default values for @a NumberIntegerType (`int64_t`), the default + value for @a number_integer_t is: + + @code {.cpp} + int64_t + @endcode + + #### Default behavior + + - The restrictions about leading zeros is not enforced in C++. Instead, + leading zeros in integer literals lead to an interpretation as octal + number. Internally, the value will be stored as decimal number. For + instance, the C++ integer literal `010` will be serialized to `8`. + During deserialization, leading zeros yield an error. + - Not-a-number (NaN) values will be serialized to `null`. + + #### Limits + + [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: + > An implementation may set limits on the range and precision of numbers. + + When the default type is used, the maximal integer number that can be + stored is `9223372036854775807` (INT64_MAX) and the minimal integer number + that can be stored is `-9223372036854775808` (INT64_MIN). Integer numbers + that are out of range will yield over/underflow when used in a + constructor. During deserialization, too large or small integer numbers + will be automatically be stored as @ref number_unsigned_t or @ref + number_float_t. + + [RFC 8259](https://tools.ietf.org/html/rfc8259) further states: + > Note that when such software is used, numbers that are integers and are + > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense + > that implementations will agree exactly on their numeric values. + + As this range is a subrange of the exactly supported range [INT64_MIN, + INT64_MAX], this class's integer type is interoperable. + + #### Storage + + Integer number values are stored directly inside a @ref basic_json type. + + @sa see @ref number_float_t -- type for number values (floating-point) + + @sa see @ref number_unsigned_t -- type for number values (unsigned integer) + + @since version 1.0.0 + */ + using number_integer_t = NumberIntegerType; + + /*! + @brief a type for a number (unsigned) + + [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows: + > The representation of numbers is similar to that used in most + > programming languages. A number is represented in base 10 using decimal + > digits. It contains an integer component that may be prefixed with an + > optional minus sign, which may be followed by a fraction part and/or an + > exponent part. Leading zeros are not allowed. (...) Numeric values that + > cannot be represented in the grammar below (such as Infinity and NaN) + > are not permitted. + + This description includes both integer and floating-point numbers. + However, C++ allows more precise storage if it is known whether the number + is a signed integer, an unsigned integer or a floating-point number. + Therefore, three different types, @ref number_integer_t, @ref + number_unsigned_t and @ref number_float_t are used. + + To store unsigned integer numbers in C++, a type is defined by the + template parameter @a NumberUnsignedType which chooses the type to use. + + #### Default type + + With the default values for @a NumberUnsignedType (`uint64_t`), the + default value for @a number_unsigned_t is: + + @code {.cpp} + uint64_t + @endcode + + #### Default behavior + + - The restrictions about leading zeros is not enforced in C++. Instead, + leading zeros in integer literals lead to an interpretation as octal + number. Internally, the value will be stored as decimal number. For + instance, the C++ integer literal `010` will be serialized to `8`. + During deserialization, leading zeros yield an error. + - Not-a-number (NaN) values will be serialized to `null`. + + #### Limits + + [RFC 8259](https://tools.ietf.org/html/rfc8259) specifies: + > An implementation may set limits on the range and precision of numbers. + + When the default type is used, the maximal integer number that can be + stored is `18446744073709551615` (UINT64_MAX) and the minimal integer + number that can be stored is `0`. Integer numbers that are out of range + will yield over/underflow when used in a constructor. During + deserialization, too large or small integer numbers will be automatically + be stored as @ref number_integer_t or @ref number_float_t. + + [RFC 8259](https://tools.ietf.org/html/rfc8259) further states: + > Note that when such software is used, numbers that are integers and are + > in the range \f$[-2^{53}+1, 2^{53}-1]\f$ are interoperable in the sense + > that implementations will agree exactly on their numeric values. + + As this range is a subrange (when considered in conjunction with the + number_integer_t type) of the exactly supported range [0, UINT64_MAX], + this class's integer type is interoperable. + + #### Storage + + Integer number values are stored directly inside a @ref basic_json type. + + @sa see @ref number_float_t -- type for number values (floating-point) + @sa see @ref number_integer_t -- type for number values (integer) + + @since version 2.0.0 + */ + using number_unsigned_t = NumberUnsignedType; + + /*! + @brief a type for a number (floating-point) + + [RFC 8259](https://tools.ietf.org/html/rfc8259) describes numbers as follows: + > The representation of numbers is similar to that used in most + > programming languages. A number is represented in base 10 using decimal + > digits. It contains an integer component that may be prefixed with an + > optional minus sign, which may be followed by a fraction part and/or an + > exponent part. Leading zeros are not allowed. (...) Numeric values that + > cannot be represented in the grammar below (such as Infinity and NaN) + > are not permitted. + + This description includes both integer and floating-point numbers. + However, C++ allows more precise storage if it is known whether the number + is a signed integer, an unsigned integer or a floating-point number. + Therefore, three different types, @ref number_integer_t, @ref + number_unsigned_t and @ref number_float_t are used. + + To store floating-point numbers in C++, a type is defined by the template + parameter @a NumberFloatType which chooses the type to use. + + #### Default type + + With the default values for @a NumberFloatType (`double`), the default + value for @a number_float_t is: + + @code {.cpp} + double + @endcode + + #### Default behavior + + - The restrictions about leading zeros is not enforced in C++. Instead, + leading zeros in floating-point literals will be ignored. Internally, + the value will be stored as decimal number. For instance, the C++ + floating-point literal `01.2` will be serialized to `1.2`. During + deserialization, leading zeros yield an error. + - Not-a-number (NaN) values will be serialized to `null`. + + #### Limits + + [RFC 8259](https://tools.ietf.org/html/rfc8259) states: + > This specification allows implementations to set limits on the range and + > precision of numbers accepted. Since software that implements IEEE + > 754-2008 binary64 (double precision) numbers is generally available and + > widely used, good interoperability can be achieved by implementations + > that expect no more precision or range than these provide, in the sense + > that implementations will approximate JSON numbers within the expected + > precision. + + This implementation does exactly follow this approach, as it uses double + precision floating-point numbers. Note values smaller than + `-1.79769313486232e+308` and values greater than `1.79769313486232e+308` + will be stored as NaN internally and be serialized to `null`. + + #### Storage + + Floating-point number values are stored directly inside a @ref basic_json + type. + + @sa see @ref number_integer_t -- type for number values (integer) + + @sa see @ref number_unsigned_t -- type for number values (unsigned integer) + + @since version 1.0.0 + */ + using number_float_t = NumberFloatType; + + /*! + @brief a type for a packed binary type + + This type is a type designed to carry binary data that appears in various + serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and + BSON's generic binary subtype. This type is NOT a part of standard JSON and + exists solely for compatibility with these binary types. As such, it is + simply defined as an ordered sequence of zero or more byte values. + + Additionally, as an implementation detail, the subtype of the binary data is + carried around as a `std::uint8_t`, which is compatible with both of the + binary data formats that use binary subtyping, (though the specific + numbering is incompatible with each other, and it is up to the user to + translate between them). + + [CBOR's RFC 7049](https://tools.ietf.org/html/rfc7049) describes this type + as: + > Major type 2: a byte string. The string's length in bytes is represented + > following the rules for positive integers (major type 0). + + [MessagePack's documentation on the bin type + family](https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family) + describes this type as: + > Bin format family stores an byte array in 2, 3, or 5 bytes of extra bytes + > in addition to the size of the byte array. + + [BSON's specifications](http://bsonspec.org/spec.html) describe several + binary types; however, this type is intended to represent the generic binary + type which has the description: + > Generic binary subtype - This is the most commonly used binary subtype and + > should be the 'default' for drivers and tools. + + None of these impose any limitations on the internal representation other + than the basic unit of storage be some type of array whose parts are + decomposable into bytes. + + The default representation of this binary format is a + `std::vector`, which is a very common way to represent a byte + array in modern C++. + + #### Default type + + The default values for @a BinaryType is `std::vector` + + #### Storage + + Binary Arrays are stored as pointers in a @ref basic_json type. That is, + for any access to array values, a pointer of the type `binary_t*` must be + dereferenced. + + #### Notes on subtypes + + - CBOR + - Binary values are represented as byte strings. Subtypes are serialized + as tagged values. + - MessagePack + - If a subtype is given and the binary array contains exactly 1, 2, 4, 8, + or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) + is used. For other sizes, the ext family (ext8, ext16, ext32) is used. + The subtype is then added as singed 8-bit integer. + - If no subtype is given, the bin family (bin8, bin16, bin32) is used. + - BSON + - If a subtype is given, it is used and added as unsigned 8-bit integer. + - If no subtype is given, the generic binary subtype 0x00 is used. + + @sa see @ref binary -- create a binary array + + @since version 3.8.0 + */ + using binary_t = nlohmann::byte_container_with_subtype; + /// @} + + private: + + /// helper for exception-safe object creation + template + JSON_HEDLEY_RETURNS_NON_NULL + static T* create(Args&& ... args) + { + AllocatorType alloc; + using AllocatorTraits = std::allocator_traits>; + + auto deleter = [&](T * obj) + { + AllocatorTraits::deallocate(alloc, obj, 1); + }; + std::unique_ptr obj(AllocatorTraits::allocate(alloc, 1), deleter); + AllocatorTraits::construct(alloc, obj.get(), std::forward(args)...); + JSON_ASSERT(obj != nullptr); + return obj.release(); + } + + //////////////////////// + // JSON value storage // + //////////////////////// + + JSON_PRIVATE_UNLESS_TESTED: + /*! + @brief a JSON value + + The actual storage for a JSON value of the @ref basic_json class. This + union combines the different storage types for the JSON value types + defined in @ref value_t. + + JSON type | value_t type | used type + --------- | --------------- | ------------------------ + object | object | pointer to @ref object_t + array | array | pointer to @ref array_t + string | string | pointer to @ref string_t + boolean | boolean | @ref boolean_t + number | number_integer | @ref number_integer_t + number | number_unsigned | @ref number_unsigned_t + number | number_float | @ref number_float_t + binary | binary | pointer to @ref binary_t + null | null | *no value is stored* + + @note Variable-length types (objects, arrays, and strings) are stored as + pointers. The size of the union should not exceed 64 bits if the default + value types are used. + + @since version 1.0.0 + */ + union json_value + { + /// object (stored with pointer to save storage) + object_t* object; + /// array (stored with pointer to save storage) + array_t* array; + /// string (stored with pointer to save storage) + string_t* string; + /// binary (stored with pointer to save storage) + binary_t* binary; + /// boolean + boolean_t boolean; + /// number (integer) + number_integer_t number_integer; + /// number (unsigned integer) + number_unsigned_t number_unsigned; + /// number (floating-point) + number_float_t number_float; + + /// default constructor (for null values) + json_value() = default; + /// constructor for booleans + json_value(boolean_t v) noexcept : boolean(v) {} + /// constructor for numbers (integer) + json_value(number_integer_t v) noexcept : number_integer(v) {} + /// constructor for numbers (unsigned) + json_value(number_unsigned_t v) noexcept : number_unsigned(v) {} + /// constructor for numbers (floating-point) + json_value(number_float_t v) noexcept : number_float(v) {} + /// constructor for empty values of a given type + json_value(value_t t) + { + switch (t) + { + case value_t::object: + { + object = create(); + break; + } + + case value_t::array: + { + array = create(); + break; + } + + case value_t::string: + { + string = create(""); + break; + } + + case value_t::binary: + { + binary = create(); + break; + } + + case value_t::boolean: + { + boolean = boolean_t(false); + break; + } + + case value_t::number_integer: + { + number_integer = number_integer_t(0); + break; + } + + case value_t::number_unsigned: + { + number_unsigned = number_unsigned_t(0); + break; + } + + case value_t::number_float: + { + number_float = number_float_t(0.0); + break; + } + + case value_t::null: + { + object = nullptr; // silence warning, see #821 + break; + } + + case value_t::discarded: + default: + { + object = nullptr; // silence warning, see #821 + if (JSON_HEDLEY_UNLIKELY(t == value_t::null)) + { + JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.10.4", basic_json())); // LCOV_EXCL_LINE + } + break; + } + } + } + + /// constructor for strings + json_value(const string_t& value) + { + string = create(value); + } + + /// constructor for rvalue strings + json_value(string_t&& value) + { + string = create(std::move(value)); + } + + /// constructor for objects + json_value(const object_t& value) + { + object = create(value); + } + + /// constructor for rvalue objects + json_value(object_t&& value) + { + object = create(std::move(value)); + } + + /// constructor for arrays + json_value(const array_t& value) + { + array = create(value); + } + + /// constructor for rvalue arrays + json_value(array_t&& value) + { + array = create(std::move(value)); + } + + /// constructor for binary arrays + json_value(const typename binary_t::container_type& value) + { + binary = create(value); + } + + /// constructor for rvalue binary arrays + json_value(typename binary_t::container_type&& value) + { + binary = create(std::move(value)); + } + + /// constructor for binary arrays (internal type) + json_value(const binary_t& value) + { + binary = create(value); + } + + /// constructor for rvalue binary arrays (internal type) + json_value(binary_t&& value) + { + binary = create(std::move(value)); + } + + void destroy(value_t t) + { + if (t == value_t::array || t == value_t::object) + { + // flatten the current json_value to a heap-allocated stack + std::vector stack; + + // move the top-level items to stack + if (t == value_t::array) + { + stack.reserve(array->size()); + std::move(array->begin(), array->end(), std::back_inserter(stack)); + } + else + { + stack.reserve(object->size()); + for (auto&& it : *object) + { + stack.push_back(std::move(it.second)); + } + } + + while (!stack.empty()) + { + // move the last item to local variable to be processed + basic_json current_item(std::move(stack.back())); + stack.pop_back(); + + // if current_item is array/object, move + // its children to the stack to be processed later + if (current_item.is_array()) + { + std::move(current_item.m_value.array->begin(), current_item.m_value.array->end(), std::back_inserter(stack)); + + current_item.m_value.array->clear(); + } + else if (current_item.is_object()) + { + for (auto&& it : *current_item.m_value.object) + { + stack.push_back(std::move(it.second)); + } + + current_item.m_value.object->clear(); + } + + // it's now safe that current_item get destructed + // since it doesn't have any children + } + } + + switch (t) + { + case value_t::object: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, object); + std::allocator_traits::deallocate(alloc, object, 1); + break; + } + + case value_t::array: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, array); + std::allocator_traits::deallocate(alloc, array, 1); + break; + } + + case value_t::string: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, string); + std::allocator_traits::deallocate(alloc, string, 1); + break; + } + + case value_t::binary: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, binary); + std::allocator_traits::deallocate(alloc, binary, 1); + break; + } + + case value_t::null: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::discarded: + default: + { + break; + } + } + } + }; + + private: + /*! + @brief checks the class invariants + + This function asserts the class invariants. It needs to be called at the + end of every constructor to make sure that created objects respect the + invariant. Furthermore, it has to be called each time the type of a JSON + value is changed, because the invariant expresses a relationship between + @a m_type and @a m_value. + + Furthermore, the parent relation is checked for arrays and objects: If + @a check_parents true and the value is an array or object, then the + container's elements must have the current value as parent. + + @param[in] check_parents whether the parent relation should be checked. + The value is true by default and should only be set to false + during destruction of objects when the invariant does not + need to hold. + */ + void assert_invariant(bool check_parents = true) const noexcept + { + JSON_ASSERT(m_type != value_t::object || m_value.object != nullptr); + JSON_ASSERT(m_type != value_t::array || m_value.array != nullptr); + JSON_ASSERT(m_type != value_t::string || m_value.string != nullptr); + JSON_ASSERT(m_type != value_t::binary || m_value.binary != nullptr); + +#if JSON_DIAGNOSTICS + JSON_TRY + { + // cppcheck-suppress assertWithSideEffect + JSON_ASSERT(!check_parents || !is_structured() || std::all_of(begin(), end(), [this](const basic_json & j) + { + return j.m_parent == this; + })); + } + JSON_CATCH(...) {} // LCOV_EXCL_LINE +#endif + static_cast(check_parents); + } + + void set_parents() + { +#if JSON_DIAGNOSTICS + switch (m_type) + { + case value_t::array: + { + for (auto& element : *m_value.array) + { + element.m_parent = this; + } + break; + } + + case value_t::object: + { + for (auto& element : *m_value.object) + { + element.second.m_parent = this; + } + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + break; + } +#endif + } + + iterator set_parents(iterator it, typename iterator::difference_type count) + { +#if JSON_DIAGNOSTICS + for (typename iterator::difference_type i = 0; i < count; ++i) + { + (it + i)->m_parent = this; + } +#else + static_cast(count); +#endif + return it; + } + + reference set_parent(reference j, std::size_t old_capacity = std::size_t(-1)) + { +#if JSON_DIAGNOSTICS + if (old_capacity != std::size_t(-1)) + { + // see https://github.com/nlohmann/json/issues/2838 + JSON_ASSERT(type() == value_t::array); + if (JSON_HEDLEY_UNLIKELY(m_value.array->capacity() != old_capacity)) + { + // capacity has changed: update all parents + set_parents(); + return j; + } + } + + // ordered_json uses a vector internally, so pointers could have + // been invalidated; see https://github.com/nlohmann/json/issues/2962 +#ifdef JSON_HEDLEY_MSVC_VERSION +#pragma warning(push ) +#pragma warning(disable : 4127) // ignore warning to replace if with if constexpr +#endif + if (detail::is_ordered_map::value) + { + set_parents(); + return j; + } +#ifdef JSON_HEDLEY_MSVC_VERSION +#pragma warning( pop ) +#endif + + j.m_parent = this; +#else + static_cast(j); + static_cast(old_capacity); +#endif + return j; + } + + public: + ////////////////////////// + // JSON parser callback // + ////////////////////////// + + /*! + @brief parser event types + + The parser callback distinguishes the following events: + - `object_start`: the parser read `{` and started to process a JSON object + - `key`: the parser read a key of a value in an object + - `object_end`: the parser read `}` and finished processing a JSON object + - `array_start`: the parser read `[` and started to process a JSON array + - `array_end`: the parser read `]` and finished processing a JSON array + - `value`: the parser finished reading a JSON value + + @image html callback_events.png "Example when certain parse events are triggered" + + @sa see @ref parser_callback_t for more information and examples + */ + using parse_event_t = detail::parse_event_t; + + /*! + @brief per-element parser callback type + + With a parser callback function, the result of parsing a JSON text can be + influenced. When passed to @ref parse, it is called on certain events + (passed as @ref parse_event_t via parameter @a event) with a set recursion + depth @a depth and context JSON value @a parsed. The return value of the + callback function is a boolean indicating whether the element that emitted + the callback shall be kept or not. + + We distinguish six scenarios (determined by the event type) in which the + callback function can be called. The following table describes the values + of the parameters @a depth, @a event, and @a parsed. + + parameter @a event | description | parameter @a depth | parameter @a parsed + ------------------ | ----------- | ------------------ | ------------------- + parse_event_t::object_start | the parser read `{` and started to process a JSON object | depth of the parent of the JSON object | a JSON value with type discarded + parse_event_t::key | the parser read a key of a value in an object | depth of the currently parsed JSON object | a JSON string containing the key + parse_event_t::object_end | the parser read `}` and finished processing a JSON object | depth of the parent of the JSON object | the parsed JSON object + parse_event_t::array_start | the parser read `[` and started to process a JSON array | depth of the parent of the JSON array | a JSON value with type discarded + parse_event_t::array_end | the parser read `]` and finished processing a JSON array | depth of the parent of the JSON array | the parsed JSON array + parse_event_t::value | the parser finished reading a JSON value | depth of the value | the parsed JSON value + + @image html callback_events.png "Example when certain parse events are triggered" + + Discarding a value (i.e., returning `false`) has different effects + depending on the context in which function was called: + + - Discarded values in structured types are skipped. That is, the parser + will behave as if the discarded value was never read. + - In case a value outside a structured type is skipped, it is replaced + with `null`. This case happens if the top-level element is skipped. + + @param[in] depth the depth of the recursion during parsing + + @param[in] event an event of type parse_event_t indicating the context in + the callback function has been called + + @param[in,out] parsed the current intermediate parse result; note that + writing to this value has no effect for parse_event_t::key events + + @return Whether the JSON value which called the function during parsing + should be kept (`true`) or not (`false`). In the latter case, it is either + skipped completely or replaced by an empty discarded object. + + @sa see @ref parse for examples + + @since version 1.0.0 + */ + using parser_callback_t = detail::parser_callback_t; + + ////////////////// + // constructors // + ////////////////// + + /// @name constructors and destructors + /// Constructors of class @ref basic_json, copy/move constructor, copy + /// assignment, static functions creating objects, and the destructor. + /// @{ + + /*! + @brief create an empty value with a given type + + Create an empty JSON value with a given type. The value will be default + initialized with an empty value which depends on the type: + + Value type | initial value + ----------- | ------------- + null | `null` + boolean | `false` + string | `""` + number | `0` + object | `{}` + array | `[]` + binary | empty array + + @param[in] v the type of the value to create + + @complexity Constant. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The following code shows the constructor for different @ref + value_t values,basic_json__value_t} + + @sa see @ref clear() -- restores the postcondition of this constructor + + @since version 1.0.0 + */ + basic_json(const value_t v) + : m_type(v), m_value(v) + { + assert_invariant(); + } + + /*! + @brief create a null object + + Create a `null` JSON value. It either takes a null pointer as parameter + (explicitly creating `null`) or no parameter (implicitly creating `null`). + The passed null pointer itself is not read -- it is only used to choose + the right constructor. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this constructor never throws + exceptions. + + @liveexample{The following code shows the constructor with and without a + null pointer parameter.,basic_json__nullptr_t} + + @since version 1.0.0 + */ + basic_json(std::nullptr_t = nullptr) noexcept + : basic_json(value_t::null) + { + assert_invariant(); + } + + /*! + @brief create a JSON value + + This is a "catch all" constructor for all compatible JSON types; that is, + types for which a `to_json()` method exists. The constructor forwards the + parameter @a val to that method (to `json_serializer::to_json` method + with `U = uncvref_t`, to be exact). + + Template type @a CompatibleType includes, but is not limited to, the + following types: + - **arrays**: @ref array_t and all kinds of compatible containers such as + `std::vector`, `std::deque`, `std::list`, `std::forward_list`, + `std::array`, `std::valarray`, `std::set`, `std::unordered_set`, + `std::multiset`, and `std::unordered_multiset` with a `value_type` from + which a @ref basic_json value can be constructed. + - **objects**: @ref object_t and all kinds of compatible associative + containers such as `std::map`, `std::unordered_map`, `std::multimap`, + and `std::unordered_multimap` with a `key_type` compatible to + @ref string_t and a `value_type` from which a @ref basic_json value can + be constructed. + - **strings**: @ref string_t, string literals, and all compatible string + containers can be used. + - **numbers**: @ref number_integer_t, @ref number_unsigned_t, + @ref number_float_t, and all convertible number types such as `int`, + `size_t`, `int64_t`, `float` or `double` can be used. + - **boolean**: @ref boolean_t / `bool` can be used. + - **binary**: @ref binary_t / `std::vector` may be used, + unfortunately because string literals cannot be distinguished from binary + character arrays by the C++ type system, all types compatible with `const + char*` will be directed to the string constructor instead. This is both + for backwards compatibility, and due to the fact that a binary type is not + a standard JSON type. + + See the examples below. + + @tparam CompatibleType a type such that: + - @a CompatibleType is not derived from `std::istream`, + - @a CompatibleType is not @ref basic_json (to avoid hijacking copy/move + constructors), + - @a CompatibleType is not a different @ref basic_json type (i.e. with different template arguments) + - @a CompatibleType is not a @ref basic_json nested type (e.g., + @ref json_pointer, @ref iterator, etc ...) + - `json_serializer` has a `to_json(basic_json_t&, CompatibleType&&)` method + + @tparam U = `uncvref_t` + + @param[in] val the value to be forwarded to the respective constructor + + @complexity Usually linear in the size of the passed @a val, also + depending on the implementation of the called `to_json()` + method. + + @exceptionsafety Depends on the called constructor. For types directly + supported by the library (i.e., all types for which no `to_json()` function + was provided), strong guarantee holds: if an exception is thrown, there are + no changes to any JSON value. + + @liveexample{The following code shows the constructor with several + compatible types.,basic_json__CompatibleType} + + @since version 2.1.0 + */ + template < typename CompatibleType, + typename U = detail::uncvref_t, + detail::enable_if_t < + !detail::is_basic_json::value && detail::is_compatible_type::value, int > = 0 > + basic_json(CompatibleType && val) noexcept(noexcept( // NOLINT(bugprone-forwarding-reference-overload,bugprone-exception-escape) + JSONSerializer::to_json(std::declval(), + std::forward(val)))) + { + JSONSerializer::to_json(*this, std::forward(val)); + set_parents(); + assert_invariant(); + } + + /*! + @brief create a JSON value from an existing one + + This is a constructor for existing @ref basic_json types. + It does not hijack copy/move constructors, since the parameter has different + template arguments than the current ones. + + The constructor tries to convert the internal @ref m_value of the parameter. + + @tparam BasicJsonType a type such that: + - @a BasicJsonType is a @ref basic_json type. + - @a BasicJsonType has different template arguments than @ref basic_json_t. + + @param[in] val the @ref basic_json value to be converted. + + @complexity Usually linear in the size of the passed @a val, also + depending on the implementation of the called `to_json()` + method. + + @exceptionsafety Depends on the called constructor. For types directly + supported by the library (i.e., all types for which no `to_json()` function + was provided), strong guarantee holds: if an exception is thrown, there are + no changes to any JSON value. + + @since version 3.2.0 + */ + template < typename BasicJsonType, + detail::enable_if_t < + detail::is_basic_json::value&& !std::is_same::value, int > = 0 > + basic_json(const BasicJsonType& val) + { + using other_boolean_t = typename BasicJsonType::boolean_t; + using other_number_float_t = typename BasicJsonType::number_float_t; + using other_number_integer_t = typename BasicJsonType::number_integer_t; + using other_number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using other_string_t = typename BasicJsonType::string_t; + using other_object_t = typename BasicJsonType::object_t; + using other_array_t = typename BasicJsonType::array_t; + using other_binary_t = typename BasicJsonType::binary_t; + + switch (val.type()) + { + case value_t::boolean: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::number_float: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::number_integer: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::number_unsigned: + JSONSerializer::to_json(*this, val.template get()); + break; + case value_t::string: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::object: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::array: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::binary: + JSONSerializer::to_json(*this, val.template get_ref()); + break; + case value_t::null: + *this = nullptr; + break; + case value_t::discarded: + m_type = value_t::discarded; + break; + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + set_parents(); + assert_invariant(); + } + + /*! + @brief create a container (array or object) from an initializer list + + Creates a JSON value of type array or object from the passed initializer + list @a init. In case @a type_deduction is `true` (default), the type of + the JSON value to be created is deducted from the initializer list @a init + according to the following rules: + + 1. If the list is empty, an empty JSON object value `{}` is created. + 2. If the list consists of pairs whose first element is a string, a JSON + object value is created where the first elements of the pairs are + treated as keys and the second elements are as values. + 3. In all other cases, an array is created. + + The rules aim to create the best fit between a C++ initializer list and + JSON values. The rationale is as follows: + + 1. The empty initializer list is written as `{}` which is exactly an empty + JSON object. + 2. C++ has no way of describing mapped types other than to list a list of + pairs. As JSON requires that keys must be of type string, rule 2 is the + weakest constraint one can pose on initializer lists to interpret them + as an object. + 3. In all other cases, the initializer list could not be interpreted as + JSON object type, so interpreting it as JSON array type is safe. + + With the rules described above, the following JSON values cannot be + expressed by an initializer list: + + - the empty array (`[]`): use @ref array(initializer_list_t) + with an empty initializer list in this case + - arrays whose elements satisfy rule 2: use @ref + array(initializer_list_t) with the same initializer list + in this case + + @note When used without parentheses around an empty initializer list, @ref + basic_json() is called instead of this function, yielding the JSON null + value. + + @param[in] init initializer list with JSON values + + @param[in] type_deduction internal parameter; when set to `true`, the type + of the JSON value is deducted from the initializer list @a init; when set + to `false`, the type provided via @a manual_type is forced. This mode is + used by the functions @ref array(initializer_list_t) and + @ref object(initializer_list_t). + + @param[in] manual_type internal parameter; when @a type_deduction is set + to `false`, the created JSON value will use the provided type (only @ref + value_t::array and @ref value_t::object are valid); when @a type_deduction + is set to `true`, this parameter has no effect + + @throw type_error.301 if @a type_deduction is `false`, @a manual_type is + `value_t::object`, but @a init contains an element which is not a pair + whose first element is a string. In this case, the constructor could not + create an object. If @a type_deduction would have be `true`, an array + would have been created. See @ref object(initializer_list_t) + for an example. + + @complexity Linear in the size of the initializer list @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The example below shows how JSON values are created from + initializer lists.,basic_json__list_init_t} + + @sa see @ref array(initializer_list_t) -- create a JSON array + value from an initializer list + @sa see @ref object(initializer_list_t) -- create a JSON object + value from an initializer list + + @since version 1.0.0 + */ + basic_json(initializer_list_t init, + bool type_deduction = true, + value_t manual_type = value_t::array) + { + // check if each element is an array with two elements whose first + // element is a string + bool is_an_object = std::all_of(init.begin(), init.end(), + [](const detail::json_ref& element_ref) + { + return element_ref->is_array() && element_ref->size() == 2 && (*element_ref)[0].is_string(); + }); + + // adjust type if type deduction is not wanted + if (!type_deduction) + { + // if array is wanted, do not create an object though possible + if (manual_type == value_t::array) + { + is_an_object = false; + } + + // if object is wanted but impossible, throw an exception + if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object && !is_an_object)) + { + JSON_THROW(type_error::create(301, "cannot create object from initializer list", basic_json())); + } + } + + if (is_an_object) + { + // the initializer list is a list of pairs -> create object + m_type = value_t::object; + m_value = value_t::object; + + for (auto& element_ref : init) + { + auto element = element_ref.moved_or_copied(); + m_value.object->emplace( + std::move(*((*element.m_value.array)[0].m_value.string)), + std::move((*element.m_value.array)[1])); + } + } + else + { + // the initializer list describes an array -> create array + m_type = value_t::array; + m_value.array = create(init.begin(), init.end()); + } + + set_parents(); + assert_invariant(); + } + + /*! + @brief explicitly create a binary array (without subtype) + + Creates a JSON binary array value from a given binary container. Binary + values are part of various binary formats, such as CBOR, MessagePack, and + BSON. This constructor is used to create a value for serialization to those + formats. + + @note Note, this function exists because of the difficulty in correctly + specifying the correct template overload in the standard value ctor, as both + JSON arrays and JSON binary arrays are backed with some form of a + `std::vector`. Because JSON binary arrays are a non-standard extension it + was decided that it would be best to prevent automatic initialization of a + binary array type, for backwards compatibility and so it does not happen on + accident. + + @param[in] init container containing bytes to use as binary type + + @return JSON binary array value + + @complexity Linear in the size of @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @since version 3.8.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(const typename binary_t::container_type& init) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = init; + return res; + } + + /*! + @brief explicitly create a binary array (with subtype) + + Creates a JSON binary array value from a given binary container. Binary + values are part of various binary formats, such as CBOR, MessagePack, and + BSON. This constructor is used to create a value for serialization to those + formats. + + @note Note, this function exists because of the difficulty in correctly + specifying the correct template overload in the standard value ctor, as both + JSON arrays and JSON binary arrays are backed with some form of a + `std::vector`. Because JSON binary arrays are a non-standard extension it + was decided that it would be best to prevent automatic initialization of a + binary array type, for backwards compatibility and so it does not happen on + accident. + + @param[in] init container containing bytes to use as binary type + @param[in] subtype subtype to use in MessagePack and BSON + + @return JSON binary array value + + @complexity Linear in the size of @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @since version 3.8.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(const typename binary_t::container_type& init, typename binary_t::subtype_type subtype) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = binary_t(init, subtype); + return res; + } + + /// @copydoc binary(const typename binary_t::container_type&) + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(typename binary_t::container_type&& init) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = std::move(init); + return res; + } + + /// @copydoc binary(const typename binary_t::container_type&, typename binary_t::subtype_type) + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(typename binary_t::container_type&& init, typename binary_t::subtype_type subtype) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = binary_t(std::move(init), subtype); + return res; + } + + /*! + @brief explicitly create an array from an initializer list + + Creates a JSON array value from a given initializer list. That is, given a + list of values `a, b, c`, creates the JSON value `[a, b, c]`. If the + initializer list is empty, the empty array `[]` is created. + + @note This function is only needed to express two edge cases that cannot + be realized with the initializer list constructor (@ref + basic_json(initializer_list_t, bool, value_t)). These cases + are: + 1. creating an array whose elements are all pairs whose first element is a + string -- in this case, the initializer list constructor would create an + object, taking the first elements as keys + 2. creating an empty array -- passing the empty initializer list to the + initializer list constructor yields an empty object + + @param[in] init initializer list with JSON values to create an array from + (optional) + + @return JSON array value + + @complexity Linear in the size of @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The following code shows an example for the `array` + function.,array} + + @sa see @ref basic_json(initializer_list_t, bool, value_t) -- + create a JSON value from an initializer list + @sa see @ref object(initializer_list_t) -- create a JSON object + value from an initializer list + + @since version 1.0.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json array(initializer_list_t init = {}) + { + return basic_json(init, false, value_t::array); + } + + /*! + @brief explicitly create an object from an initializer list + + Creates a JSON object value from a given initializer list. The initializer + lists elements must be pairs, and their first elements must be strings. If + the initializer list is empty, the empty object `{}` is created. + + @note This function is only added for symmetry reasons. In contrast to the + related function @ref array(initializer_list_t), there are + no cases which can only be expressed by this function. That is, any + initializer list @a init can also be passed to the initializer list + constructor @ref basic_json(initializer_list_t, bool, value_t). + + @param[in] init initializer list to create an object from (optional) + + @return JSON object value + + @throw type_error.301 if @a init is not a list of pairs whose first + elements are strings. In this case, no object can be created. When such a + value is passed to @ref basic_json(initializer_list_t, bool, value_t), + an array would have been created from the passed initializer list @a init. + See example below. + + @complexity Linear in the size of @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The following code shows an example for the `object` + function.,object} + + @sa see @ref basic_json(initializer_list_t, bool, value_t) -- + create a JSON value from an initializer list + @sa see @ref array(initializer_list_t) -- create a JSON array + value from an initializer list + + @since version 1.0.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json object(initializer_list_t init = {}) + { + return basic_json(init, false, value_t::object); + } + + /*! + @brief construct an array with count copies of given value + + Constructs a JSON array value by creating @a cnt copies of a passed value. + In case @a cnt is `0`, an empty array is created. + + @param[in] cnt the number of JSON copies of @a val to create + @param[in] val the JSON value to copy + + @post `std::distance(begin(),end()) == cnt` holds. + + @complexity Linear in @a cnt. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The following code shows examples for the @ref + basic_json(size_type\, const basic_json&) + constructor.,basic_json__size_type_basic_json} + + @since version 1.0.0 + */ + basic_json(size_type cnt, const basic_json& val) + : m_type(value_t::array) + { + m_value.array = create(cnt, val); + set_parents(); + assert_invariant(); + } + + /*! + @brief construct a JSON container given an iterator range + + Constructs the JSON value with the contents of the range `[first, last)`. + The semantics depends on the different types a JSON value can have: + - In case of a null type, invalid_iterator.206 is thrown. + - In case of other primitive types (number, boolean, or string), @a first + must be `begin()` and @a last must be `end()`. In this case, the value is + copied. Otherwise, invalid_iterator.204 is thrown. + - In case of structured types (array, object), the constructor behaves as + similar versions for `std::vector` or `std::map`; that is, a JSON array + or object is constructed from the values in the range. + + @tparam InputIT an input iterator type (@ref iterator or @ref + const_iterator) + + @param[in] first begin of the range to copy from (included) + @param[in] last end of the range to copy from (excluded) + + @pre Iterators @a first and @a last must be initialized. **This + precondition is enforced with an assertion (see warning).** If + assertions are switched off, a violation of this precondition yields + undefined behavior. + + @pre Range `[first, last)` is valid. Usually, this precondition cannot be + checked efficiently. Only certain edge cases are detected; see the + description of the exceptions below. A violation of this precondition + yields undefined behavior. + + @warning A precondition is enforced with a runtime assertion that will + result in calling `std::abort` if this precondition is not met. + Assertions can be disabled by defining `NDEBUG` at compile time. + See https://en.cppreference.com/w/cpp/error/assert for more + information. + + @throw invalid_iterator.201 if iterators @a first and @a last are not + compatible (i.e., do not belong to the same JSON value). In this case, + the range `[first, last)` is undefined. + @throw invalid_iterator.204 if iterators @a first and @a last belong to a + primitive type (number, boolean, or string), but @a first does not point + to the first element any more. In this case, the range `[first, last)` is + undefined. See example code below. + @throw invalid_iterator.206 if iterators @a first and @a last belong to a + null value. In this case, the range `[first, last)` is undefined. + + @complexity Linear in distance between @a first and @a last. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @liveexample{The example below shows several ways to create JSON values by + specifying a subrange with iterators.,basic_json__InputIt_InputIt} + + @since version 1.0.0 + */ + template < class InputIT, typename std::enable_if < + std::is_same::value || + std::is_same::value, int >::type = 0 > + basic_json(InputIT first, InputIT last) + { + JSON_ASSERT(first.m_object != nullptr); + JSON_ASSERT(last.m_object != nullptr); + + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(201, "iterators are not compatible", basic_json())); + } + + // copy type from first iterator + m_type = first.m_object->m_type; + + // check if iterator range is complete for primitive values + switch (m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + { + if (JSON_HEDLEY_UNLIKELY(!first.m_it.primitive_iterator.is_begin() + || !last.m_it.primitive_iterator.is_end())) + { + JSON_THROW(invalid_iterator::create(204, "iterators out of range", *first.m_object)); + } + break; + } + + case value_t::null: + case value_t::object: + case value_t::array: + case value_t::binary: + case value_t::discarded: + default: + break; + } + + switch (m_type) + { + case value_t::number_integer: + { + m_value.number_integer = first.m_object->m_value.number_integer; + break; + } + + case value_t::number_unsigned: + { + m_value.number_unsigned = first.m_object->m_value.number_unsigned; + break; + } + + case value_t::number_float: + { + m_value.number_float = first.m_object->m_value.number_float; + break; + } + + case value_t::boolean: + { + m_value.boolean = first.m_object->m_value.boolean; + break; + } + + case value_t::string: + { + m_value = *first.m_object->m_value.string; + break; + } + + case value_t::object: + { + m_value.object = create(first.m_it.object_iterator, + last.m_it.object_iterator); + break; + } + + case value_t::array: + { + m_value.array = create(first.m_it.array_iterator, + last.m_it.array_iterator); + break; + } + + case value_t::binary: + { + m_value = *first.m_object->m_value.binary; + break; + } + + case value_t::null: + case value_t::discarded: + default: + JSON_THROW(invalid_iterator::create(206, "cannot construct with iterators from " + std::string(first.m_object->type_name()), *first.m_object)); + } + + set_parents(); + assert_invariant(); + } + + + /////////////////////////////////////// + // other constructors and destructor // + /////////////////////////////////////// + + template, + std::is_same>::value, int> = 0 > + basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {} + + /*! + @brief copy constructor + + Creates a copy of a given JSON value. + + @param[in] other the JSON value to copy + + @post `*this == other` + + @complexity Linear in the size of @a other. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is linear. + - As postcondition, it holds: `other == basic_json(other)`. + + @liveexample{The following code shows an example for the copy + constructor.,basic_json__basic_json} + + @since version 1.0.0 + */ + basic_json(const basic_json& other) + : m_type(other.m_type) + { + // check of passed value is valid + other.assert_invariant(); + + switch (m_type) + { + case value_t::object: + { + m_value = *other.m_value.object; + break; + } + + case value_t::array: + { + m_value = *other.m_value.array; + break; + } + + case value_t::string: + { + m_value = *other.m_value.string; + break; + } + + case value_t::boolean: + { + m_value = other.m_value.boolean; + break; + } + + case value_t::number_integer: + { + m_value = other.m_value.number_integer; + break; + } + + case value_t::number_unsigned: + { + m_value = other.m_value.number_unsigned; + break; + } + + case value_t::number_float: + { + m_value = other.m_value.number_float; + break; + } + + case value_t::binary: + { + m_value = *other.m_value.binary; + break; + } + + case value_t::null: + case value_t::discarded: + default: + break; + } + + set_parents(); + assert_invariant(); + } + + /*! + @brief move constructor + + Move constructor. Constructs a JSON value with the contents of the given + value @a other using move semantics. It "steals" the resources from @a + other and leaves it as JSON null value. + + @param[in,out] other value to move to this object + + @post `*this` has the same value as @a other before the call. + @post @a other is a JSON null value. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this constructor never throws + exceptions. + + @requirement This function helps `basic_json` satisfying the + [MoveConstructible](https://en.cppreference.com/w/cpp/named_req/MoveConstructible) + requirements. + + @liveexample{The code below shows the move constructor explicitly called + via std::move.,basic_json__moveconstructor} + + @since version 1.0.0 + */ + basic_json(basic_json&& other) noexcept + : m_type(std::move(other.m_type)), + m_value(std::move(other.m_value)) + { + // check that passed value is valid + other.assert_invariant(false); + + // invalidate payload + other.m_type = value_t::null; + other.m_value = {}; + + set_parents(); + assert_invariant(); + } + + /*! + @brief copy assignment + + Copy assignment operator. Copies a JSON value via the "copy and swap" + strategy: It is expressed in terms of the copy constructor, destructor, + and the `swap()` member function. + + @param[in] other value to copy from + + @complexity Linear. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is linear. + + @liveexample{The code below shows and example for the copy assignment. It + creates a copy of value `a` which is then swapped with `b`. Finally\, the + copy of `a` (which is the null value after the swap) is + destroyed.,basic_json__copyassignment} + + @since version 1.0.0 + */ + basic_json& operator=(basic_json other) noexcept ( + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value + ) + { + // check that passed value is valid + other.assert_invariant(); + + using std::swap; + swap(m_type, other.m_type); + swap(m_value, other.m_value); + + set_parents(); + assert_invariant(); + return *this; + } + + /*! + @brief destructor + + Destroys the JSON value and frees all allocated memory. + + @complexity Linear. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is linear. + - All stored elements are destroyed and all memory is freed. + + @since version 1.0.0 + */ + ~basic_json() noexcept + { + assert_invariant(false); + m_value.destroy(m_type); + } + + /// @} + + public: + /////////////////////// + // object inspection // + /////////////////////// + + /// @name object inspection + /// Functions to inspect the type of a JSON value. + /// @{ + + /*! + @brief serialization + + Serialization function for JSON values. The function tries to mimic + Python's `json.dumps()` function, and currently supports its @a indent + and @a ensure_ascii parameters. + + @param[in] indent If indent is nonnegative, then array elements and object + members will be pretty-printed with that indent level. An indent level of + `0` will only insert newlines. `-1` (the default) selects the most compact + representation. + @param[in] indent_char The character to use for indentation if @a indent is + greater than `0`. The default is ` ` (space). + @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters + in the output are escaped with `\uXXXX` sequences, and the result consists + of ASCII characters only. + @param[in] error_handler how to react on decoding errors; there are three + possible values: `strict` (throws and exception in case a decoding error + occurs; default), `replace` (replace invalid UTF-8 sequences with U+FFFD), + and `ignore` (ignore invalid UTF-8 sequences during serialization; all + bytes are copied to the output unchanged). + + @return string containing the serialization of the JSON value + + @throw type_error.316 if a string stored inside the JSON value is not + UTF-8 encoded and @a error_handler is set to strict + + @note Binary values are serialized as object containing two keys: + - "bytes": an array of bytes as integers + - "subtype": the subtype as integer or "null" if the binary has no subtype + + @complexity Linear. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @liveexample{The following example shows the effect of different @a indent\, + @a indent_char\, and @a ensure_ascii parameters to the result of the + serialization.,dump} + + @see https://docs.python.org/2/library/json.html#json.dump + + @since version 1.0.0; indentation character @a indent_char, option + @a ensure_ascii and exceptions added in version 3.0.0; error + handlers added in version 3.4.0; serialization of binary values added + in version 3.8.0. + */ + string_t dump(const int indent = -1, + const char indent_char = ' ', + const bool ensure_ascii = false, + const error_handler_t error_handler = error_handler_t::strict) const + { + string_t result; + serializer s(detail::output_adapter(result), indent_char, error_handler); + + if (indent >= 0) + { + s.dump(*this, true, ensure_ascii, static_cast(indent)); + } + else + { + s.dump(*this, false, ensure_ascii, 0); + } + + return result; + } + + /*! + @brief return the type of the JSON value (explicit) + + Return the type of the JSON value as a value from the @ref value_t + enumeration. + + @return the type of the JSON value + Value type | return value + ------------------------- | ------------------------- + null | value_t::null + boolean | value_t::boolean + string | value_t::string + number (integer) | value_t::number_integer + number (unsigned integer) | value_t::number_unsigned + number (floating-point) | value_t::number_float + object | value_t::object + array | value_t::array + binary | value_t::binary + discarded | value_t::discarded + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `type()` for all JSON + types.,type} + + @sa see @ref operator value_t() -- return the type of the JSON value (implicit) + @sa see @ref type_name() -- return the type as string + + @since version 1.0.0 + */ + constexpr value_t type() const noexcept + { + return m_type; + } + + /*! + @brief return whether type is primitive + + This function returns true if and only if the JSON type is primitive + (string, number, boolean, or null). + + @return `true` if type is primitive (string, number, boolean, or null), + `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_primitive()` for all JSON + types.,is_primitive} + + @sa see @ref is_structured() -- returns whether JSON value is structured + @sa see @ref is_null() -- returns whether JSON value is `null` + @sa see @ref is_string() -- returns whether JSON value is a string + @sa see @ref is_boolean() -- returns whether JSON value is a boolean + @sa see @ref is_number() -- returns whether JSON value is a number + @sa see @ref is_binary() -- returns whether JSON value is a binary array + + @since version 1.0.0 + */ + constexpr bool is_primitive() const noexcept + { + return is_null() || is_string() || is_boolean() || is_number() || is_binary(); + } + + /*! + @brief return whether type is structured + + This function returns true if and only if the JSON type is structured + (array or object). + + @return `true` if type is structured (array or object), `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_structured()` for all JSON + types.,is_structured} + + @sa see @ref is_primitive() -- returns whether value is primitive + @sa see @ref is_array() -- returns whether value is an array + @sa see @ref is_object() -- returns whether value is an object + + @since version 1.0.0 + */ + constexpr bool is_structured() const noexcept + { + return is_array() || is_object(); + } + + /*! + @brief return whether value is null + + This function returns true if and only if the JSON value is null. + + @return `true` if type is null, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_null()` for all JSON + types.,is_null} + + @since version 1.0.0 + */ + constexpr bool is_null() const noexcept + { + return m_type == value_t::null; + } + + /*! + @brief return whether value is a boolean + + This function returns true if and only if the JSON value is a boolean. + + @return `true` if type is boolean, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_boolean()` for all JSON + types.,is_boolean} + + @since version 1.0.0 + */ + constexpr bool is_boolean() const noexcept + { + return m_type == value_t::boolean; + } + + /*! + @brief return whether value is a number + + This function returns true if and only if the JSON value is a number. This + includes both integer (signed and unsigned) and floating-point values. + + @return `true` if type is number (regardless whether integer, unsigned + integer or floating-type), `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_number()` for all JSON + types.,is_number} + + @sa see @ref is_number_integer() -- check if value is an integer or unsigned + integer number + @sa see @ref is_number_unsigned() -- check if value is an unsigned integer + number + @sa see @ref is_number_float() -- check if value is a floating-point number + + @since version 1.0.0 + */ + constexpr bool is_number() const noexcept + { + return is_number_integer() || is_number_float(); + } + + /*! + @brief return whether value is an integer number + + This function returns true if and only if the JSON value is a signed or + unsigned integer number. This excludes floating-point values. + + @return `true` if type is an integer or unsigned integer number, `false` + otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_number_integer()` for all + JSON types.,is_number_integer} + + @sa see @ref is_number() -- check if value is a number + @sa see @ref is_number_unsigned() -- check if value is an unsigned integer + number + @sa see @ref is_number_float() -- check if value is a floating-point number + + @since version 1.0.0 + */ + constexpr bool is_number_integer() const noexcept + { + return m_type == value_t::number_integer || m_type == value_t::number_unsigned; + } + + /*! + @brief return whether value is an unsigned integer number + + This function returns true if and only if the JSON value is an unsigned + integer number. This excludes floating-point and signed integer values. + + @return `true` if type is an unsigned integer number, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_number_unsigned()` for all + JSON types.,is_number_unsigned} + + @sa see @ref is_number() -- check if value is a number + @sa see @ref is_number_integer() -- check if value is an integer or unsigned + integer number + @sa see @ref is_number_float() -- check if value is a floating-point number + + @since version 2.0.0 + */ + constexpr bool is_number_unsigned() const noexcept + { + return m_type == value_t::number_unsigned; + } + + /*! + @brief return whether value is a floating-point number + + This function returns true if and only if the JSON value is a + floating-point number. This excludes signed and unsigned integer values. + + @return `true` if type is a floating-point number, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_number_float()` for all + JSON types.,is_number_float} + + @sa see @ref is_number() -- check if value is number + @sa see @ref is_number_integer() -- check if value is an integer number + @sa see @ref is_number_unsigned() -- check if value is an unsigned integer + number + + @since version 1.0.0 + */ + constexpr bool is_number_float() const noexcept + { + return m_type == value_t::number_float; + } + + /*! + @brief return whether value is an object + + This function returns true if and only if the JSON value is an object. + + @return `true` if type is object, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_object()` for all JSON + types.,is_object} + + @since version 1.0.0 + */ + constexpr bool is_object() const noexcept + { + return m_type == value_t::object; + } + + /*! + @brief return whether value is an array + + This function returns true if and only if the JSON value is an array. + + @return `true` if type is array, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_array()` for all JSON + types.,is_array} + + @since version 1.0.0 + */ + constexpr bool is_array() const noexcept + { + return m_type == value_t::array; + } + + /*! + @brief return whether value is a string + + This function returns true if and only if the JSON value is a string. + + @return `true` if type is string, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_string()` for all JSON + types.,is_string} + + @since version 1.0.0 + */ + constexpr bool is_string() const noexcept + { + return m_type == value_t::string; + } + + /*! + @brief return whether value is a binary array + + This function returns true if and only if the JSON value is a binary array. + + @return `true` if type is binary array, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_binary()` for all JSON + types.,is_binary} + + @since version 3.8.0 + */ + constexpr bool is_binary() const noexcept + { + return m_type == value_t::binary; + } + + /*! + @brief return whether value is discarded + + This function returns true if and only if the JSON value was discarded + during parsing with a callback function (see @ref parser_callback_t). + + @note This function will always be `false` for JSON values after parsing. + That is, discarded values can only occur during parsing, but will be + removed when inside a structured value or replaced by null in other cases. + + @return `true` if type is discarded, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_discarded()` for all JSON + types.,is_discarded} + + @since version 1.0.0 + */ + constexpr bool is_discarded() const noexcept + { + return m_type == value_t::discarded; + } + + /*! + @brief return the type of the JSON value (implicit) + + Implicitly return the type of the JSON value as a value from the @ref + value_t enumeration. + + @return the type of the JSON value + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies the @ref value_t operator for + all JSON types.,operator__value_t} + + @sa see @ref type() -- return the type of the JSON value (explicit) + @sa see @ref type_name() -- return the type as string + + @since version 1.0.0 + */ + constexpr operator value_t() const noexcept + { + return m_type; + } + + /// @} + + private: + ////////////////// + // value access // + ////////////////// + + /// get a boolean (explicit) + boolean_t get_impl(boolean_t* /*unused*/) const + { + if (JSON_HEDLEY_LIKELY(is_boolean())) + { + return m_value.boolean; + } + + JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(type_name()), *this)); + } + + /// get a pointer to the value (object) + object_t* get_impl_ptr(object_t* /*unused*/) noexcept + { + return is_object() ? m_value.object : nullptr; + } + + /// get a pointer to the value (object) + constexpr const object_t* get_impl_ptr(const object_t* /*unused*/) const noexcept + { + return is_object() ? m_value.object : nullptr; + } + + /// get a pointer to the value (array) + array_t* get_impl_ptr(array_t* /*unused*/) noexcept + { + return is_array() ? m_value.array : nullptr; + } + + /// get a pointer to the value (array) + constexpr const array_t* get_impl_ptr(const array_t* /*unused*/) const noexcept + { + return is_array() ? m_value.array : nullptr; + } + + /// get a pointer to the value (string) + string_t* get_impl_ptr(string_t* /*unused*/) noexcept + { + return is_string() ? m_value.string : nullptr; + } + + /// get a pointer to the value (string) + constexpr const string_t* get_impl_ptr(const string_t* /*unused*/) const noexcept + { + return is_string() ? m_value.string : nullptr; + } + + /// get a pointer to the value (boolean) + boolean_t* get_impl_ptr(boolean_t* /*unused*/) noexcept + { + return is_boolean() ? &m_value.boolean : nullptr; + } + + /// get a pointer to the value (boolean) + constexpr const boolean_t* get_impl_ptr(const boolean_t* /*unused*/) const noexcept + { + return is_boolean() ? &m_value.boolean : nullptr; + } + + /// get a pointer to the value (integer number) + number_integer_t* get_impl_ptr(number_integer_t* /*unused*/) noexcept + { + return is_number_integer() ? &m_value.number_integer : nullptr; + } + + /// get a pointer to the value (integer number) + constexpr const number_integer_t* get_impl_ptr(const number_integer_t* /*unused*/) const noexcept + { + return is_number_integer() ? &m_value.number_integer : nullptr; + } + + /// get a pointer to the value (unsigned number) + number_unsigned_t* get_impl_ptr(number_unsigned_t* /*unused*/) noexcept + { + return is_number_unsigned() ? &m_value.number_unsigned : nullptr; + } + + /// get a pointer to the value (unsigned number) + constexpr const number_unsigned_t* get_impl_ptr(const number_unsigned_t* /*unused*/) const noexcept + { + return is_number_unsigned() ? &m_value.number_unsigned : nullptr; + } + + /// get a pointer to the value (floating-point number) + number_float_t* get_impl_ptr(number_float_t* /*unused*/) noexcept + { + return is_number_float() ? &m_value.number_float : nullptr; + } + + /// get a pointer to the value (floating-point number) + constexpr const number_float_t* get_impl_ptr(const number_float_t* /*unused*/) const noexcept + { + return is_number_float() ? &m_value.number_float : nullptr; + } + + /// get a pointer to the value (binary) + binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept + { + return is_binary() ? m_value.binary : nullptr; + } + + /// get a pointer to the value (binary) + constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept + { + return is_binary() ? m_value.binary : nullptr; + } + + /*! + @brief helper function to implement get_ref() + + This function helps to implement get_ref() without code duplication for + const and non-const overloads + + @tparam ThisType will be deduced as `basic_json` or `const basic_json` + + @throw type_error.303 if ReferenceType does not match underlying value + type of the current JSON + */ + template + static ReferenceType get_ref_impl(ThisType& obj) + { + // delegate the call to get_ptr<>() + auto* ptr = obj.template get_ptr::type>(); + + if (JSON_HEDLEY_LIKELY(ptr != nullptr)) + { + return *ptr; + } + + JSON_THROW(type_error::create(303, "incompatible ReferenceType for get_ref, actual type is " + std::string(obj.type_name()), obj)); + } + + public: + /// @name value access + /// Direct access to the stored value of a JSON value. + /// @{ + + /*! + @brief get a pointer value (implicit) + + Implicit pointer access to the internally stored JSON value. No copies are + made. + + @warning Writing data to the pointee of the result yields an undefined + state. + + @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref + object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, + @ref number_unsigned_t, or @ref number_float_t. Enforced by a static + assertion. + + @return pointer to the internally stored JSON value if the requested + pointer type @a PointerType fits to the JSON value; `nullptr` otherwise + + @complexity Constant. + + @liveexample{The example below shows how pointers to internal values of a + JSON value can be requested. Note that no type conversions are made and a + `nullptr` is returned if the value and the requested pointer type does not + match.,get_ptr} + + @since version 1.0.0 + */ + template::value, int>::type = 0> + auto get_ptr() noexcept -> decltype(std::declval().get_impl_ptr(std::declval())) + { + // delegate the call to get_impl_ptr<>() + return get_impl_ptr(static_cast(nullptr)); + } + + /*! + @brief get a pointer value (implicit) + @copydoc get_ptr() + */ + template < typename PointerType, typename std::enable_if < + std::is_pointer::value&& + std::is_const::type>::value, int >::type = 0 > + constexpr auto get_ptr() const noexcept -> decltype(std::declval().get_impl_ptr(std::declval())) + { + // delegate the call to get_impl_ptr<>() const + return get_impl_ptr(static_cast(nullptr)); + } + + private: + /*! + @brief get a value (explicit) + + Explicit type conversion between the JSON value and a compatible value + which is [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + and [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). + The value is converted by calling the @ref json_serializer + `from_json()` method. + + The function is equivalent to executing + @code {.cpp} + ValueType ret; + JSONSerializer::from_json(*this, ret); + return ret; + @endcode + + This overloads is chosen if: + - @a ValueType is not @ref basic_json, + - @ref json_serializer has a `from_json()` method of the form + `void from_json(const basic_json&, ValueType&)`, and + - @ref json_serializer does not have a `from_json()` method of + the form `ValueType from_json(const basic_json&)` + + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @a ValueType + + @throw what @ref json_serializer `from_json()` method throws + + @liveexample{The example below shows several conversions from JSON values + to other types. There a few things to note: (1) Floating-point numbers can + be converted to integers\, (2) A JSON array can be converted to a standard + `std::vector`\, (3) A JSON object can be converted to C++ + associative containers such as `std::unordered_map`.,get__ValueType_const} + + @since version 2.1.0 + */ + template < typename ValueType, + detail::enable_if_t < + detail::is_default_constructible::value&& + detail::has_from_json::value, + int > = 0 > + ValueType get_impl(detail::priority_tag<0> /*unused*/) const noexcept(noexcept( + JSONSerializer::from_json(std::declval(), std::declval()))) + { + auto ret = ValueType(); + JSONSerializer::from_json(*this, ret); + return ret; + } + + /*! + @brief get a value (explicit); special case + + Explicit type conversion between the JSON value and a compatible value + which is **not** [CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) + and **not** [DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). + The value is converted by calling the @ref json_serializer + `from_json()` method. + + The function is equivalent to executing + @code {.cpp} + return JSONSerializer::from_json(*this); + @endcode + + This overloads is chosen if: + - @a ValueType is not @ref basic_json and + - @ref json_serializer has a `from_json()` method of the form + `ValueType from_json(const basic_json&)` + + @note If @ref json_serializer has both overloads of + `from_json()`, this one is chosen. + + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @a ValueType + + @throw what @ref json_serializer `from_json()` method throws + + @since version 2.1.0 + */ + template < typename ValueType, + detail::enable_if_t < + detail::has_non_default_from_json::value, + int > = 0 > + ValueType get_impl(detail::priority_tag<1> /*unused*/) const noexcept(noexcept( + JSONSerializer::from_json(std::declval()))) + { + return JSONSerializer::from_json(*this); + } + + /*! + @brief get special-case overload + + This overloads converts the current @ref basic_json in a different + @ref basic_json type + + @tparam BasicJsonType == @ref basic_json + + @return a copy of *this, converted into @a BasicJsonType + + @complexity Depending on the implementation of the called `from_json()` + method. + + @since version 3.2.0 + */ + template < typename BasicJsonType, + detail::enable_if_t < + detail::is_basic_json::value, + int > = 0 > + BasicJsonType get_impl(detail::priority_tag<2> /*unused*/) const + { + return *this; + } + + /*! + @brief get special-case overload + + This overloads avoids a lot of template boilerplate, it can be seen as the + identity method + + @tparam BasicJsonType == @ref basic_json + + @return a copy of *this + + @complexity Constant. + + @since version 2.1.0 + */ + template::value, + int> = 0> + basic_json get_impl(detail::priority_tag<3> /*unused*/) const + { + return *this; + } + + /*! + @brief get a pointer value (explicit) + @copydoc get() + */ + template::value, + int> = 0> + constexpr auto get_impl(detail::priority_tag<4> /*unused*/) const noexcept + -> decltype(std::declval().template get_ptr()) + { + // delegate the call to get_ptr + return get_ptr(); + } + + public: + /*! + @brief get a (pointer) value (explicit) + + Performs explicit type conversion between the JSON value and a compatible value if required. + + - If the requested type is a pointer to the internally stored JSON value that pointer is returned. + No copies are made. + + - If the requested type is the current @ref basic_json, or a different @ref basic_json convertible + from the current @ref basic_json. + + - Otherwise the value is converted by calling the @ref json_serializer `from_json()` + method. + + @tparam ValueTypeCV the provided value type + @tparam ValueType the returned value type + + @return copy of the JSON value, converted to @tparam ValueType if necessary + + @throw what @ref json_serializer `from_json()` method throws if conversion is required + + @since version 2.1.0 + */ + template < typename ValueTypeCV, typename ValueType = detail::uncvref_t> +#if defined(JSON_HAS_CPP_14) + constexpr +#endif + auto get() const noexcept( + noexcept(std::declval().template get_impl(detail::priority_tag<4> {}))) + -> decltype(std::declval().template get_impl(detail::priority_tag<4> {})) + { + // we cannot static_assert on ValueTypeCV being non-const, because + // there is support for get(), which is why we + // still need the uncvref + static_assert(!std::is_reference::value, + "get() cannot be used with reference types, you might want to use get_ref()"); + return get_impl(detail::priority_tag<4> {}); + } + + /*! + @brief get a pointer value (explicit) + + Explicit pointer access to the internally stored JSON value. No copies are + made. + + @warning The pointer becomes invalid if the underlying JSON object + changes. + + @tparam PointerType pointer type; must be a pointer to @ref array_t, @ref + object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, + @ref number_unsigned_t, or @ref number_float_t. + + @return pointer to the internally stored JSON value if the requested + pointer type @a PointerType fits to the JSON value; `nullptr` otherwise + + @complexity Constant. + + @liveexample{The example below shows how pointers to internal values of a + JSON value can be requested. Note that no type conversions are made and a + `nullptr` is returned if the value and the requested pointer type does not + match.,get__PointerType} + + @sa see @ref get_ptr() for explicit pointer-member access + + @since version 1.0.0 + */ + template::value, int>::type = 0> + auto get() noexcept -> decltype(std::declval().template get_ptr()) + { + // delegate the call to get_ptr + return get_ptr(); + } + + /*! + @brief get a value (explicit) + + Explicit type conversion between the JSON value and a compatible value. + The value is filled into the input parameter by calling the @ref json_serializer + `from_json()` method. + + The function is equivalent to executing + @code {.cpp} + ValueType v; + JSONSerializer::from_json(*this, v); + @endcode + + This overloads is chosen if: + - @a ValueType is not @ref basic_json, + - @ref json_serializer has a `from_json()` method of the form + `void from_json(const basic_json&, ValueType&)`, and + + @tparam ValueType the input parameter type. + + @return the input parameter, allowing chaining calls. + + @throw what @ref json_serializer `from_json()` method throws + + @liveexample{The example below shows several conversions from JSON values + to other types. There a few things to note: (1) Floating-point numbers can + be converted to integers\, (2) A JSON array can be converted to a standard + `std::vector`\, (3) A JSON object can be converted to C++ + associative containers such as `std::unordered_map`.,get_to} + + @since version 3.3.0 + */ + template < typename ValueType, + detail::enable_if_t < + !detail::is_basic_json::value&& + detail::has_from_json::value, + int > = 0 > + ValueType & get_to(ValueType& v) const noexcept(noexcept( + JSONSerializer::from_json(std::declval(), v))) + { + JSONSerializer::from_json(*this, v); + return v; + } + + // specialization to allow to call get_to with a basic_json value + // see https://github.com/nlohmann/json/issues/2175 + template::value, + int> = 0> + ValueType & get_to(ValueType& v) const + { + v = *this; + return v; + } + + template < + typename T, std::size_t N, + typename Array = T (&)[N], // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + detail::enable_if_t < + detail::has_from_json::value, int > = 0 > + Array get_to(T (&v)[N]) const // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays) + noexcept(noexcept(JSONSerializer::from_json( + std::declval(), v))) + { + JSONSerializer::from_json(*this, v); + return v; + } + + /*! + @brief get a reference value (implicit) + + Implicit reference access to the internally stored JSON value. No copies + are made. + + @warning Writing data to the referee of the result yields an undefined + state. + + @tparam ReferenceType reference type; must be a reference to @ref array_t, + @ref object_t, @ref string_t, @ref boolean_t, @ref number_integer_t, or + @ref number_float_t. Enforced by static assertion. + + @return reference to the internally stored JSON value if the requested + reference type @a ReferenceType fits to the JSON value; throws + type_error.303 otherwise + + @throw type_error.303 in case passed type @a ReferenceType is incompatible + with the stored JSON value; see example below + + @complexity Constant. + + @liveexample{The example shows several calls to `get_ref()`.,get_ref} + + @since version 1.1.0 + */ + template::value, int>::type = 0> + ReferenceType get_ref() + { + // delegate call to get_ref_impl + return get_ref_impl(*this); + } + + /*! + @brief get a reference value (implicit) + @copydoc get_ref() + */ + template < typename ReferenceType, typename std::enable_if < + std::is_reference::value&& + std::is_const::type>::value, int >::type = 0 > + ReferenceType get_ref() const + { + // delegate call to get_ref_impl + return get_ref_impl(*this); + } + + /*! + @brief get a value (implicit) + + Implicit type conversion between the JSON value and a compatible value. + The call is realized by calling @ref get() const. + + @tparam ValueType non-pointer type compatible to the JSON value, for + instance `int` for JSON integer numbers, `bool` for JSON booleans, or + `std::vector` types for JSON arrays. The character type of @ref string_t + as well as an initializer list of this type is excluded to avoid + ambiguities as these types implicitly convert to `std::string`. + + @return copy of the JSON value, converted to type @a ValueType + + @throw type_error.302 in case passed type @a ValueType is incompatible + to the JSON value type (e.g., the JSON value is of type boolean, but a + string is requested); see example below + + @complexity Linear in the size of the JSON value. + + @liveexample{The example below shows several conversions from JSON values + to other types. There a few things to note: (1) Floating-point numbers can + be converted to integers\, (2) A JSON array can be converted to a standard + `std::vector`\, (3) A JSON object can be converted to C++ + associative containers such as `std::unordered_map`.,operator__ValueType} + + @since version 1.0.0 + */ + template < typename ValueType, typename std::enable_if < + detail::conjunction < + detail::negation>, + detail::negation>>, + detail::negation>, + detail::negation>, + detail::negation>>, + +#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER >= 1910 && _MSC_VER <= 1914)) + detail::negation>, +#endif + detail::is_detected_lazy + >::value, int >::type = 0 > + JSON_EXPLICIT operator ValueType() const + { + // delegate the call to get<>() const + return get(); + } + + /*! + @return reference to the binary value + + @throw type_error.302 if the value is not binary + + @sa see @ref is_binary() to check if the value is binary + + @since version 3.8.0 + */ + binary_t& get_binary() + { + if (!is_binary()) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()), *this)); + } + + return *get_ptr(); + } + + /// @copydoc get_binary() + const binary_t& get_binary() const + { + if (!is_binary()) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()), *this)); + } + + return *get_ptr(); + } + + /// @} + + + //////////////////// + // element access // + //////////////////// + + /// @name element access + /// Access to the JSON value. + /// @{ + + /*! + @brief access specified array element with bounds checking + + Returns a reference to the element at specified location @a idx, with + bounds checking. + + @param[in] idx index of the element to access + + @return reference to the element at index @a idx + + @throw type_error.304 if the JSON value is not an array; in this case, + calling `at` with an index makes no sense. See example below. + @throw out_of_range.401 if the index @a idx is out of range of the array; + that is, `idx >= size()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @since version 1.0.0 + + @liveexample{The example below shows how array elements can be read and + written using `at()`. It also demonstrates the different exceptions that + can be thrown.,at__size_type} + */ + reference at(size_type idx) + { + // at only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + JSON_TRY + { + return set_parent(m_value.array->at(idx)); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range", *this)); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()), *this)); + } + } + + /*! + @brief access specified array element with bounds checking + + Returns a const reference to the element at specified location @a idx, + with bounds checking. + + @param[in] idx index of the element to access + + @return const reference to the element at index @a idx + + @throw type_error.304 if the JSON value is not an array; in this case, + calling `at` with an index makes no sense. See example below. + @throw out_of_range.401 if the index @a idx is out of range of the array; + that is, `idx >= size()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @since version 1.0.0 + + @liveexample{The example below shows how array elements can be read using + `at()`. It also demonstrates the different exceptions that can be thrown., + at__size_type_const} + */ + const_reference at(size_type idx) const + { + // at only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + JSON_TRY + { + return m_value.array->at(idx); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range", *this)); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()), *this)); + } + } + + /*! + @brief access specified object element with bounds checking + + Returns a reference to the element at with specified key @a key, with + bounds checking. + + @param[in] key key of the element to access + + @return reference to the element at key @a key + + @throw type_error.304 if the JSON value is not an object; in this case, + calling `at` with a key makes no sense. See example below. + @throw out_of_range.403 if the key @a key is is not stored in the object; + that is, `find(key) == end()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Logarithmic in the size of the container. + + @sa see @ref operator[](const typename object_t::key_type&) for unchecked + access by reference + @sa see @ref value() for access by value with a default value + + @since version 1.0.0 + + @liveexample{The example below shows how object elements can be read and + written using `at()`. It also demonstrates the different exceptions that + can be thrown.,at__object_t_key_type} + */ + reference at(const typename object_t::key_type& key) + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_TRY + { + return set_parent(m_value.object->at(key)); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(403, "key '" + key + "' not found", *this)); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()), *this)); + } + } + + /*! + @brief access specified object element with bounds checking + + Returns a const reference to the element at with specified key @a key, + with bounds checking. + + @param[in] key key of the element to access + + @return const reference to the element at key @a key + + @throw type_error.304 if the JSON value is not an object; in this case, + calling `at` with a key makes no sense. See example below. + @throw out_of_range.403 if the key @a key is is not stored in the object; + that is, `find(key) == end()`. See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Logarithmic in the size of the container. + + @sa see @ref operator[](const typename object_t::key_type&) for unchecked + access by reference + @sa see @ref value() for access by value with a default value + + @since version 1.0.0 + + @liveexample{The example below shows how object elements can be read using + `at()`. It also demonstrates the different exceptions that can be thrown., + at__object_t_key_type_const} + */ + const_reference at(const typename object_t::key_type& key) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_TRY + { + return m_value.object->at(key); + } + JSON_CATCH (std::out_of_range&) + { + // create better exception explanation + JSON_THROW(out_of_range::create(403, "key '" + key + "' not found", *this)); + } + } + else + { + JSON_THROW(type_error::create(304, "cannot use at() with " + std::string(type_name()), *this)); + } + } + + /*! + @brief access specified array element + + Returns a reference to the element at specified location @a idx. + + @note If @a idx is beyond the range of the array (i.e., `idx >= size()`), + then the array is silently filled up with `null` values to make `idx` a + valid reference to the last stored element. + + @param[in] idx index of the element to access + + @return reference to the element at index @a idx + + @throw type_error.305 if the JSON value is not an array or null; in that + cases, using the [] operator with an index makes no sense. + + @complexity Constant if @a idx is in the range of the array. Otherwise + linear in `idx - size()`. + + @liveexample{The example below shows how array elements can be read and + written using `[]` operator. Note the addition of `null` + values.,operatorarray__size_type} + + @since version 1.0.0 + */ + reference operator[](size_type idx) + { + // implicitly convert null value to an empty array + if (is_null()) + { + m_type = value_t::array; + m_value.array = create(); + assert_invariant(); + } + + // operator[] only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // fill up array with null values if given idx is outside range + if (idx >= m_value.array->size()) + { +#if JSON_DIAGNOSTICS + // remember array size & capacity before resizing + const auto old_size = m_value.array->size(); + const auto old_capacity = m_value.array->capacity(); +#endif + m_value.array->resize(idx + 1); + +#if JSON_DIAGNOSTICS + if (JSON_HEDLEY_UNLIKELY(m_value.array->capacity() != old_capacity)) + { + // capacity has changed: update all parents + set_parents(); + } + else + { + // set parent for values added above + set_parents(begin() + static_cast(old_size), static_cast(idx + 1 - old_size)); + } +#endif + assert_invariant(); + } + + return m_value.array->operator[](idx); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a numeric argument with " + std::string(type_name()), *this)); + } + + /*! + @brief access specified array element + + Returns a const reference to the element at specified location @a idx. + + @param[in] idx index of the element to access + + @return const reference to the element at index @a idx + + @throw type_error.305 if the JSON value is not an array; in that case, + using the [] operator with an index makes no sense. + + @complexity Constant. + + @liveexample{The example below shows how array elements can be read using + the `[]` operator.,operatorarray__size_type_const} + + @since version 1.0.0 + */ + const_reference operator[](size_type idx) const + { + // const operator[] only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + return m_value.array->operator[](idx); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a numeric argument with " + std::string(type_name()), *this)); + } + + /*! + @brief access specified object element + + Returns a reference to the element at with specified key @a key. + + @note If @a key is not found in the object, then it is silently added to + the object and filled with a `null` value to make `key` a valid reference. + In case the value was `null` before, it is converted to an object. + + @param[in] key key of the element to access + + @return reference to the element at key @a key + + @throw type_error.305 if the JSON value is not an object or null; in that + cases, using the [] operator with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be read and + written using the `[]` operator.,operatorarray__key_type} + + @sa see @ref at(const typename object_t::key_type&) for access by reference + with range checking + @sa see @ref value() for access by value with a default value + + @since version 1.0.0 + */ + reference operator[](const typename object_t::key_type& key) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_type = value_t::object; + m_value.object = create(); + assert_invariant(); + } + + // operator[] only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + return set_parent(m_value.object->operator[](key)); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()), *this)); + } + + /*! + @brief read-only access specified object element + + Returns a const reference to the element at with specified key @a key. No + bounds checking is performed. + + @warning If the element with key @a key does not exist, the behavior is + undefined. + + @param[in] key key of the element to access + + @return const reference to the element at key @a key + + @pre The element with key @a key must exist. **This precondition is + enforced with an assertion.** + + @throw type_error.305 if the JSON value is not an object; in that case, + using the [] operator with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be read using + the `[]` operator.,operatorarray__key_type_const} + + @sa see @ref at(const typename object_t::key_type&) for access by reference + with range checking + @sa see @ref value() for access by value with a default value + + @since version 1.0.0 + */ + const_reference operator[](const typename object_t::key_type& key) const + { + // const operator[] only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_ASSERT(m_value.object->find(key) != m_value.object->end()); + return m_value.object->find(key)->second; + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()), *this)); + } + + /*! + @brief access specified object element + + Returns a reference to the element at with specified key @a key. + + @note If @a key is not found in the object, then it is silently added to + the object and filled with a `null` value to make `key` a valid reference. + In case the value was `null` before, it is converted to an object. + + @param[in] key key of the element to access + + @return reference to the element at key @a key + + @throw type_error.305 if the JSON value is not an object or null; in that + cases, using the [] operator with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be read and + written using the `[]` operator.,operatorarray__key_type} + + @sa see @ref at(const typename object_t::key_type&) for access by reference + with range checking + @sa see @ref value() for access by value with a default value + + @since version 1.1.0 + */ + template + JSON_HEDLEY_NON_NULL(2) + reference operator[](T* key) + { + // implicitly convert null to object + if (is_null()) + { + m_type = value_t::object; + m_value = value_t::object; + assert_invariant(); + } + + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + return set_parent(m_value.object->operator[](key)); + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()), *this)); + } + + /*! + @brief read-only access specified object element + + Returns a const reference to the element at with specified key @a key. No + bounds checking is performed. + + @warning If the element with key @a key does not exist, the behavior is + undefined. + + @param[in] key key of the element to access + + @return const reference to the element at key @a key + + @pre The element with key @a key must exist. **This precondition is + enforced with an assertion.** + + @throw type_error.305 if the JSON value is not an object; in that case, + using the [] operator with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be read using + the `[]` operator.,operatorarray__key_type_const} + + @sa see @ref at(const typename object_t::key_type&) for access by reference + with range checking + @sa see @ref value() for access by value with a default value + + @since version 1.1.0 + */ + template + JSON_HEDLEY_NON_NULL(2) + const_reference operator[](T* key) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + JSON_ASSERT(m_value.object->find(key) != m_value.object->end()); + return m_value.object->find(key)->second; + } + + JSON_THROW(type_error::create(305, "cannot use operator[] with a string argument with " + std::string(type_name()), *this)); + } + + /*! + @brief access specified object element with default value + + Returns either a copy of an object's element at the specified key @a key + or a given default value if no element with key @a key exists. + + The function is basically equivalent to executing + @code {.cpp} + try { + return at(key); + } catch(out_of_range) { + return default_value; + } + @endcode + + @note Unlike @ref at(const typename object_t::key_type&), this function + does not throw if the given key @a key was not found. + + @note Unlike @ref operator[](const typename object_t::key_type& key), this + function does not implicitly add an element to the position defined by @a + key. This function is furthermore also applicable to const objects. + + @param[in] key key of the element to access + @param[in] default_value the value to return if @a key is not found + + @tparam ValueType type compatible to JSON values, for instance `int` for + JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for + JSON arrays. Note the type of the expected value at @a key and the default + value @a default_value must be compatible. + + @return copy of the element at key @a key or @a default_value if @a key + is not found + + @throw type_error.302 if @a default_value does not match the type of the + value at @a key + @throw type_error.306 if the JSON value is not an object; in that case, + using `value()` with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be queried + with a default value.,basic_json__value} + + @sa see @ref at(const typename object_t::key_type&) for access by reference + with range checking + @sa see @ref operator[](const typename object_t::key_type&) for unchecked + access by reference + + @since version 1.0.0 + */ + // using std::is_convertible in a std::enable_if will fail when using explicit conversions + template < class ValueType, typename std::enable_if < + detail::is_getable::value + && !std::is_same::value, int >::type = 0 > + ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if key is found, return value and given default value otherwise + const auto it = find(key); + if (it != end()) + { + return it->template get(); + } + + return default_value; + } + + JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name()), *this)); + } + + /*! + @brief overload for a default value of type const char* + @copydoc basic_json::value(const typename object_t::key_type&, const ValueType&) const + */ + string_t value(const typename object_t::key_type& key, const char* default_value) const + { + return value(key, string_t(default_value)); + } + + /*! + @brief access specified object element via JSON Pointer with default value + + Returns either a copy of an object's element at the specified key @a key + or a given default value if no element with key @a key exists. + + The function is basically equivalent to executing + @code {.cpp} + try { + return at(ptr); + } catch(out_of_range) { + return default_value; + } + @endcode + + @note Unlike @ref at(const json_pointer&), this function does not throw + if the given key @a key was not found. + + @param[in] ptr a JSON pointer to the element to access + @param[in] default_value the value to return if @a ptr found no value + + @tparam ValueType type compatible to JSON values, for instance `int` for + JSON integer numbers, `bool` for JSON booleans, or `std::vector` types for + JSON arrays. Note the type of the expected value at @a key and the default + value @a default_value must be compatible. + + @return copy of the element at key @a key or @a default_value if @a key + is not found + + @throw type_error.302 if @a default_value does not match the type of the + value at @a ptr + @throw type_error.306 if the JSON value is not an object; in that case, + using `value()` with a key makes no sense. + + @complexity Logarithmic in the size of the container. + + @liveexample{The example below shows how object elements can be queried + with a default value.,basic_json__value_ptr} + + @sa see @ref operator[](const json_pointer&) for unchecked access by reference + + @since version 2.0.2 + */ + template::value, int>::type = 0> + ValueType value(const json_pointer& ptr, const ValueType& default_value) const + { + // at only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + // if pointer resolves a value, return it or use default value + JSON_TRY + { + return ptr.get_checked(this).template get(); + } + JSON_INTERNAL_CATCH (out_of_range&) + { + return default_value; + } + } + + JSON_THROW(type_error::create(306, "cannot use value() with " + std::string(type_name()), *this)); + } + + /*! + @brief overload for a default value of type const char* + @copydoc basic_json::value(const json_pointer&, ValueType) const + */ + JSON_HEDLEY_NON_NULL(3) + string_t value(const json_pointer& ptr, const char* default_value) const + { + return value(ptr, string_t(default_value)); + } + + /*! + @brief access the first element + + Returns a reference to the first element in the container. For a JSON + container `c`, the expression `c.front()` is equivalent to `*c.begin()`. + + @return In case of a structured type (array or object), a reference to the + first element is returned. In case of number, string, boolean, or binary + values, a reference to the value is returned. + + @complexity Constant. + + @pre The JSON value must not be `null` (would throw `std::out_of_range`) + or an empty array or object (undefined behavior, **guarded by + assertions**). + @post The JSON value remains unchanged. + + @throw invalid_iterator.214 when called on `null` value + + @liveexample{The following code shows an example for `front()`.,front} + + @sa see @ref back() -- access the last element + + @since version 1.0.0 + */ + reference front() + { + return *begin(); + } + + /*! + @copydoc basic_json::front() + */ + const_reference front() const + { + return *cbegin(); + } + + /*! + @brief access the last element + + Returns a reference to the last element in the container. For a JSON + container `c`, the expression `c.back()` is equivalent to + @code {.cpp} + auto tmp = c.end(); + --tmp; + return *tmp; + @endcode + + @return In case of a structured type (array or object), a reference to the + last element is returned. In case of number, string, boolean, or binary + values, a reference to the value is returned. + + @complexity Constant. + + @pre The JSON value must not be `null` (would throw `std::out_of_range`) + or an empty array or object (undefined behavior, **guarded by + assertions**). + @post The JSON value remains unchanged. + + @throw invalid_iterator.214 when called on a `null` value. See example + below. + + @liveexample{The following code shows an example for `back()`.,back} + + @sa see @ref front() -- access the first element + + @since version 1.0.0 + */ + reference back() + { + auto tmp = end(); + --tmp; + return *tmp; + } + + /*! + @copydoc basic_json::back() + */ + const_reference back() const + { + auto tmp = cend(); + --tmp; + return *tmp; + } + + /*! + @brief remove element given an iterator + + Removes the element specified by iterator @a pos. The iterator @a pos must + be valid and dereferenceable. Thus the `end()` iterator (which is valid, + but is not dereferenceable) cannot be used as a value for @a pos. + + If called on a primitive type other than `null`, the resulting JSON value + will be `null`. + + @param[in] pos iterator to the element to remove + @return Iterator following the last removed element. If the iterator @a + pos refers to the last element, the `end()` iterator is returned. + + @tparam IteratorType an @ref iterator or @ref const_iterator + + @post Invalidates iterators and references at or after the point of the + erase, including the `end()` iterator. + + @throw type_error.307 if called on a `null` value; example: `"cannot use + erase() with null"` + @throw invalid_iterator.202 if called on an iterator which does not belong + to the current JSON value; example: `"iterator does not fit current + value"` + @throw invalid_iterator.205 if called on a primitive type with invalid + iterator (i.e., any iterator which is not `begin()`); example: `"iterator + out of range"` + + @complexity The complexity depends on the type: + - objects: amortized constant + - arrays: linear in distance between @a pos and the end of the container + - strings and binary: linear in the length of the member + - other types: constant + + @liveexample{The example shows the result of `erase()` for different JSON + types.,erase__IteratorType} + + @sa see @ref erase(IteratorType, IteratorType) -- removes the elements in + the given range + @sa see @ref erase(const typename object_t::key_type&) -- removes the element + from an object at the given key + @sa see @ref erase(const size_type) -- removes the element from an array at + the given index + + @since version 1.0.0 + */ + template < class IteratorType, typename std::enable_if < + std::is_same::value || + std::is_same::value, int >::type + = 0 > + IteratorType erase(IteratorType pos) + { + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(this != pos.m_object)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", *this)); + } + + IteratorType result = end(); + + switch (m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + case value_t::binary: + { + if (JSON_HEDLEY_UNLIKELY(!pos.m_it.primitive_iterator.is_begin())) + { + JSON_THROW(invalid_iterator::create(205, "iterator out of range", *this)); + } + + if (is_string()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.string); + std::allocator_traits::deallocate(alloc, m_value.string, 1); + m_value.string = nullptr; + } + else if (is_binary()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.binary); + std::allocator_traits::deallocate(alloc, m_value.binary, 1); + m_value.binary = nullptr; + } + + m_type = value_t::null; + assert_invariant(); + break; + } + + case value_t::object: + { + result.m_it.object_iterator = m_value.object->erase(pos.m_it.object_iterator); + break; + } + + case value_t::array: + { + result.m_it.array_iterator = m_value.array->erase(pos.m_it.array_iterator); + break; + } + + case value_t::null: + case value_t::discarded: + default: + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()), *this)); + } + + return result; + } + + /*! + @brief remove elements given an iterator range + + Removes the element specified by the range `[first; last)`. The iterator + @a first does not need to be dereferenceable if `first == last`: erasing + an empty range is a no-op. + + If called on a primitive type other than `null`, the resulting JSON value + will be `null`. + + @param[in] first iterator to the beginning of the range to remove + @param[in] last iterator past the end of the range to remove + @return Iterator following the last removed element. If the iterator @a + second refers to the last element, the `end()` iterator is returned. + + @tparam IteratorType an @ref iterator or @ref const_iterator + + @post Invalidates iterators and references at or after the point of the + erase, including the `end()` iterator. + + @throw type_error.307 if called on a `null` value; example: `"cannot use + erase() with null"` + @throw invalid_iterator.203 if called on iterators which does not belong + to the current JSON value; example: `"iterators do not fit current value"` + @throw invalid_iterator.204 if called on a primitive type with invalid + iterators (i.e., if `first != begin()` and `last != end()`); example: + `"iterators out of range"` + + @complexity The complexity depends on the type: + - objects: `log(size()) + std::distance(first, last)` + - arrays: linear in the distance between @a first and @a last, plus linear + in the distance between @a last and end of the container + - strings and binary: linear in the length of the member + - other types: constant + + @liveexample{The example shows the result of `erase()` for different JSON + types.,erase__IteratorType_IteratorType} + + @sa see @ref erase(IteratorType) -- removes the element at a given position + @sa see @ref erase(const typename object_t::key_type&) -- removes the element + from an object at the given key + @sa see @ref erase(const size_type) -- removes the element from an array at + the given index + + @since version 1.0.0 + */ + template < class IteratorType, typename std::enable_if < + std::is_same::value || + std::is_same::value, int >::type + = 0 > + IteratorType erase(IteratorType first, IteratorType last) + { + // make sure iterator fits the current value + if (JSON_HEDLEY_UNLIKELY(this != first.m_object || this != last.m_object)) + { + JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value", *this)); + } + + IteratorType result = end(); + + switch (m_type) + { + case value_t::boolean: + case value_t::number_float: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::string: + case value_t::binary: + { + if (JSON_HEDLEY_LIKELY(!first.m_it.primitive_iterator.is_begin() + || !last.m_it.primitive_iterator.is_end())) + { + JSON_THROW(invalid_iterator::create(204, "iterators out of range", *this)); + } + + if (is_string()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.string); + std::allocator_traits::deallocate(alloc, m_value.string, 1); + m_value.string = nullptr; + } + else if (is_binary()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.binary); + std::allocator_traits::deallocate(alloc, m_value.binary, 1); + m_value.binary = nullptr; + } + + m_type = value_t::null; + assert_invariant(); + break; + } + + case value_t::object: + { + result.m_it.object_iterator = m_value.object->erase(first.m_it.object_iterator, + last.m_it.object_iterator); + break; + } + + case value_t::array: + { + result.m_it.array_iterator = m_value.array->erase(first.m_it.array_iterator, + last.m_it.array_iterator); + break; + } + + case value_t::null: + case value_t::discarded: + default: + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()), *this)); + } + + return result; + } + + /*! + @brief remove element from a JSON object given a key + + Removes elements from a JSON object with the key value @a key. + + @param[in] key value of the elements to remove + + @return Number of elements removed. If @a ObjectType is the default + `std::map` type, the return value will always be `0` (@a key was not + found) or `1` (@a key was found). + + @post References and iterators to the erased elements are invalidated. + Other references and iterators are not affected. + + @throw type_error.307 when called on a type other than JSON object; + example: `"cannot use erase() with null"` + + @complexity `log(size()) + count(key)` + + @liveexample{The example shows the effect of `erase()`.,erase__key_type} + + @sa see @ref erase(IteratorType) -- removes the element at a given position + @sa see @ref erase(IteratorType, IteratorType) -- removes the elements in + the given range + @sa see @ref erase(const size_type) -- removes the element from an array at + the given index + + @since version 1.0.0 + */ + size_type erase(const typename object_t::key_type& key) + { + // this erase only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + return m_value.object->erase(key); + } + + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()), *this)); + } + + /*! + @brief remove element from a JSON array given an index + + Removes element from a JSON array at the index @a idx. + + @param[in] idx index of the element to remove + + @throw type_error.307 when called on a type other than JSON object; + example: `"cannot use erase() with null"` + @throw out_of_range.401 when `idx >= size()`; example: `"array index 17 + is out of range"` + + @complexity Linear in distance between @a idx and the end of the container. + + @liveexample{The example shows the effect of `erase()`.,erase__size_type} + + @sa see @ref erase(IteratorType) -- removes the element at a given position + @sa see @ref erase(IteratorType, IteratorType) -- removes the elements in + the given range + @sa see @ref erase(const typename object_t::key_type&) -- removes the element + from an object at the given key + + @since version 1.0.0 + */ + void erase(const size_type idx) + { + // this erase only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + if (JSON_HEDLEY_UNLIKELY(idx >= size())) + { + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range", *this)); + } + + m_value.array->erase(m_value.array->begin() + static_cast(idx)); + } + else + { + JSON_THROW(type_error::create(307, "cannot use erase() with " + std::string(type_name()), *this)); + } + } + + /// @} + + + //////////// + // lookup // + //////////// + + /// @name lookup + /// @{ + + /*! + @brief find an element in a JSON object + + Finds an element in a JSON object with key equivalent to @a key. If the + element is not found or the JSON value is not an object, end() is + returned. + + @note This method always returns @ref end() when executed on a JSON type + that is not an object. + + @param[in] key key value of the element to search for. + + @return Iterator to an element with key equivalent to @a key. If no such + element is found or the JSON value is not an object, past-the-end (see + @ref end()) iterator is returned. + + @complexity Logarithmic in the size of the JSON object. + + @liveexample{The example shows how `find()` is used.,find__key_type} + + @sa see @ref contains(KeyT&&) const -- checks whether a key exists + + @since version 1.0.0 + */ + template + iterator find(KeyT&& key) + { + auto result = end(); + + if (is_object()) + { + result.m_it.object_iterator = m_value.object->find(std::forward(key)); + } + + return result; + } + + /*! + @brief find an element in a JSON object + @copydoc find(KeyT&&) + */ + template + const_iterator find(KeyT&& key) const + { + auto result = cend(); + + if (is_object()) + { + result.m_it.object_iterator = m_value.object->find(std::forward(key)); + } + + return result; + } + + /*! + @brief returns the number of occurrences of a key in a JSON object + + Returns the number of elements with key @a key. If ObjectType is the + default `std::map` type, the return value will always be `0` (@a key was + not found) or `1` (@a key was found). + + @note This method always returns `0` when executed on a JSON type that is + not an object. + + @param[in] key key value of the element to count + + @return Number of elements with key @a key. If the JSON value is not an + object, the return value will be `0`. + + @complexity Logarithmic in the size of the JSON object. + + @liveexample{The example shows how `count()` is used.,count} + + @since version 1.0.0 + */ + template + size_type count(KeyT&& key) const + { + // return 0 for all nonobject types + return is_object() ? m_value.object->count(std::forward(key)) : 0; + } + + /*! + @brief check the existence of an element in a JSON object + + Check whether an element exists in a JSON object with key equivalent to + @a key. If the element is not found or the JSON value is not an object, + false is returned. + + @note This method always returns false when executed on a JSON type + that is not an object. + + @param[in] key key value to check its existence. + + @return true if an element with specified @a key exists. If no such + element with such key is found or the JSON value is not an object, + false is returned. + + @complexity Logarithmic in the size of the JSON object. + + @liveexample{The following code shows an example for `contains()`.,contains} + + @sa see @ref find(KeyT&&) -- returns an iterator to an object element + @sa see @ref contains(const json_pointer&) const -- checks the existence for a JSON pointer + + @since version 3.6.0 + */ + template < typename KeyT, typename std::enable_if < + !std::is_same::type, json_pointer>::value, int >::type = 0 > + bool contains(KeyT && key) const + { + return is_object() && m_value.object->find(std::forward(key)) != m_value.object->end(); + } + + /*! + @brief check the existence of an element in a JSON object given a JSON pointer + + Check whether the given JSON pointer @a ptr can be resolved in the current + JSON value. + + @note This method can be executed on any JSON value type. + + @param[in] ptr JSON pointer to check its existence. + + @return true if the JSON pointer can be resolved to a stored value, false + otherwise. + + @post If `j.contains(ptr)` returns true, it is safe to call `j[ptr]`. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + + @complexity Logarithmic in the size of the JSON object. + + @liveexample{The following code shows an example for `contains()`.,contains_json_pointer} + + @sa see @ref contains(KeyT &&) const -- checks the existence of a key + + @since version 3.7.0 + */ + bool contains(const json_pointer& ptr) const + { + return ptr.contains(this); + } + + /// @} + + + /////////////// + // iterators // + /////////////// + + /// @name iterators + /// @{ + + /*! + @brief returns an iterator to the first element + + Returns an iterator to the first element. + + @image html range-begin-end.svg "Illustration from cppreference.com" + + @return iterator to the first element + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + + @liveexample{The following code shows an example for `begin()`.,begin} + + @sa see @ref cbegin() -- returns a const iterator to the beginning + @sa see @ref end() -- returns an iterator to the end + @sa see @ref cend() -- returns a const iterator to the end + + @since version 1.0.0 + */ + iterator begin() noexcept + { + iterator result(this); + result.set_begin(); + return result; + } + + /*! + @copydoc basic_json::cbegin() + */ + const_iterator begin() const noexcept + { + return cbegin(); + } + + /*! + @brief returns a const iterator to the first element + + Returns a const iterator to the first element. + + @image html range-begin-end.svg "Illustration from cppreference.com" + + @return const iterator to the first element + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + - Has the semantics of `const_cast(*this).begin()`. + + @liveexample{The following code shows an example for `cbegin()`.,cbegin} + + @sa see @ref begin() -- returns an iterator to the beginning + @sa see @ref end() -- returns an iterator to the end + @sa see @ref cend() -- returns a const iterator to the end + + @since version 1.0.0 + */ + const_iterator cbegin() const noexcept + { + const_iterator result(this); + result.set_begin(); + return result; + } + + /*! + @brief returns an iterator to one past the last element + + Returns an iterator to one past the last element. + + @image html range-begin-end.svg "Illustration from cppreference.com" + + @return iterator one past the last element + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + + @liveexample{The following code shows an example for `end()`.,end} + + @sa see @ref cend() -- returns a const iterator to the end + @sa see @ref begin() -- returns an iterator to the beginning + @sa see @ref cbegin() -- returns a const iterator to the beginning + + @since version 1.0.0 + */ + iterator end() noexcept + { + iterator result(this); + result.set_end(); + return result; + } + + /*! + @copydoc basic_json::cend() + */ + const_iterator end() const noexcept + { + return cend(); + } + + /*! + @brief returns a const iterator to one past the last element + + Returns a const iterator to one past the last element. + + @image html range-begin-end.svg "Illustration from cppreference.com" + + @return const iterator one past the last element + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + - Has the semantics of `const_cast(*this).end()`. + + @liveexample{The following code shows an example for `cend()`.,cend} + + @sa see @ref end() -- returns an iterator to the end + @sa see @ref begin() -- returns an iterator to the beginning + @sa see @ref cbegin() -- returns a const iterator to the beginning + + @since version 1.0.0 + */ + const_iterator cend() const noexcept + { + const_iterator result(this); + result.set_end(); + return result; + } + + /*! + @brief returns an iterator to the reverse-beginning + + Returns an iterator to the reverse-beginning; that is, the last element. + + @image html range-rbegin-rend.svg "Illustration from cppreference.com" + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) + requirements: + - The complexity is constant. + - Has the semantics of `reverse_iterator(end())`. + + @liveexample{The following code shows an example for `rbegin()`.,rbegin} + + @sa see @ref crbegin() -- returns a const reverse iterator to the beginning + @sa see @ref rend() -- returns a reverse iterator to the end + @sa see @ref crend() -- returns a const reverse iterator to the end + + @since version 1.0.0 + */ + reverse_iterator rbegin() noexcept + { + return reverse_iterator(end()); + } + + /*! + @copydoc basic_json::crbegin() + */ + const_reverse_iterator rbegin() const noexcept + { + return crbegin(); + } + + /*! + @brief returns an iterator to the reverse-end + + Returns an iterator to the reverse-end; that is, one before the first + element. + + @image html range-rbegin-rend.svg "Illustration from cppreference.com" + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) + requirements: + - The complexity is constant. + - Has the semantics of `reverse_iterator(begin())`. + + @liveexample{The following code shows an example for `rend()`.,rend} + + @sa see @ref crend() -- returns a const reverse iterator to the end + @sa see @ref rbegin() -- returns a reverse iterator to the beginning + @sa see @ref crbegin() -- returns a const reverse iterator to the beginning + + @since version 1.0.0 + */ + reverse_iterator rend() noexcept + { + return reverse_iterator(begin()); + } + + /*! + @copydoc basic_json::crend() + */ + const_reverse_iterator rend() const noexcept + { + return crend(); + } + + /*! + @brief returns a const reverse iterator to the last element + + Returns a const iterator to the reverse-beginning; that is, the last + element. + + @image html range-rbegin-rend.svg "Illustration from cppreference.com" + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) + requirements: + - The complexity is constant. + - Has the semantics of `const_cast(*this).rbegin()`. + + @liveexample{The following code shows an example for `crbegin()`.,crbegin} + + @sa see @ref rbegin() -- returns a reverse iterator to the beginning + @sa see @ref rend() -- returns a reverse iterator to the end + @sa see @ref crend() -- returns a const reverse iterator to the end + + @since version 1.0.0 + */ + const_reverse_iterator crbegin() const noexcept + { + return const_reverse_iterator(cend()); + } + + /*! + @brief returns a const reverse iterator to one before the first + + Returns a const reverse iterator to the reverse-end; that is, one before + the first element. + + @image html range-rbegin-rend.svg "Illustration from cppreference.com" + + @complexity Constant. + + @requirement This function helps `basic_json` satisfying the + [ReversibleContainer](https://en.cppreference.com/w/cpp/named_req/ReversibleContainer) + requirements: + - The complexity is constant. + - Has the semantics of `const_cast(*this).rend()`. + + @liveexample{The following code shows an example for `crend()`.,crend} + + @sa see @ref rend() -- returns a reverse iterator to the end + @sa see @ref rbegin() -- returns a reverse iterator to the beginning + @sa see @ref crbegin() -- returns a const reverse iterator to the beginning + + @since version 1.0.0 + */ + const_reverse_iterator crend() const noexcept + { + return const_reverse_iterator(cbegin()); + } + + public: + /*! + @brief wrapper to access iterator member functions in range-based for + + This function allows to access @ref iterator::key() and @ref + iterator::value() during range-based for loops. In these loops, a + reference to the JSON values is returned, so there is no access to the + underlying iterator. + + For loop without iterator_wrapper: + + @code{cpp} + for (auto it = j_object.begin(); it != j_object.end(); ++it) + { + std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; + } + @endcode + + Range-based for loop without iterator proxy: + + @code{cpp} + for (auto it : j_object) + { + // "it" is of type json::reference and has no key() member + std::cout << "value: " << it << '\n'; + } + @endcode + + Range-based for loop with iterator proxy: + + @code{cpp} + for (auto it : json::iterator_wrapper(j_object)) + { + std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; + } + @endcode + + @note When iterating over an array, `key()` will return the index of the + element as string (see example). + + @param[in] ref reference to a JSON value + @return iteration proxy object wrapping @a ref with an interface to use in + range-based for loops + + @liveexample{The following code shows how the wrapper is used,iterator_wrapper} + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @note The name of this function is not yet final and may change in the + future. + + @deprecated This stream operator is deprecated and will be removed in + future 4.0.0 of the library. Please use @ref items() instead; + that is, replace `json::iterator_wrapper(j)` with `j.items()`. + */ + JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) + static iteration_proxy iterator_wrapper(reference ref) noexcept + { + return ref.items(); + } + + /*! + @copydoc iterator_wrapper(reference) + */ + JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) + static iteration_proxy iterator_wrapper(const_reference ref) noexcept + { + return ref.items(); + } + + /*! + @brief helper to access iterator member functions in range-based for + + This function allows to access @ref iterator::key() and @ref + iterator::value() during range-based for loops. In these loops, a + reference to the JSON values is returned, so there is no access to the + underlying iterator. + + For loop without `items()` function: + + @code{cpp} + for (auto it = j_object.begin(); it != j_object.end(); ++it) + { + std::cout << "key: " << it.key() << ", value:" << it.value() << '\n'; + } + @endcode + + Range-based for loop without `items()` function: + + @code{cpp} + for (auto it : j_object) + { + // "it" is of type json::reference and has no key() member + std::cout << "value: " << it << '\n'; + } + @endcode + + Range-based for loop with `items()` function: + + @code{cpp} + for (auto& el : j_object.items()) + { + std::cout << "key: " << el.key() << ", value:" << el.value() << '\n'; + } + @endcode + + The `items()` function also allows to use + [structured bindings](https://en.cppreference.com/w/cpp/language/structured_binding) + (C++17): + + @code{cpp} + for (auto& [key, val] : j_object.items()) + { + std::cout << "key: " << key << ", value:" << val << '\n'; + } + @endcode + + @note When iterating over an array, `key()` will return the index of the + element as string (see example). For primitive types (e.g., numbers), + `key()` returns an empty string. + + @warning Using `items()` on temporary objects is dangerous. Make sure the + object's lifetime exeeds the iteration. See + for more + information. + + @return iteration proxy object wrapping @a ref with an interface to use in + range-based for loops + + @liveexample{The following code shows how the function is used.,items} + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @since version 3.1.0, structured bindings support since 3.5.0. + */ + iteration_proxy items() noexcept + { + return iteration_proxy(*this); + } + + /*! + @copydoc items() + */ + iteration_proxy items() const noexcept + { + return iteration_proxy(*this); + } + + /// @} + + + ////////////// + // capacity // + ////////////// + + /// @name capacity + /// @{ + + /*! + @brief checks whether the container is empty. + + Checks if a JSON value has no elements (i.e. whether its @ref size is `0`). + + @return The return value depends on the different types and is + defined as follows: + Value type | return value + ----------- | ------------- + null | `true` + boolean | `false` + string | `false` + number | `false` + binary | `false` + object | result of function `object_t::empty()` + array | result of function `array_t::empty()` + + @liveexample{The following code uses `empty()` to check if a JSON + object contains any elements.,empty} + + @complexity Constant, as long as @ref array_t and @ref object_t satisfy + the Container concept; that is, their `empty()` functions have constant + complexity. + + @iterators No changes. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @note This function does not return whether a string stored as JSON value + is empty - it returns whether the JSON container itself is empty which is + false in the case of a string. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + - Has the semantics of `begin() == end()`. + + @sa see @ref size() -- returns the number of elements + + @since version 1.0.0 + */ + bool empty() const noexcept + { + switch (m_type) + { + case value_t::null: + { + // null values are empty + return true; + } + + case value_t::array: + { + // delegate call to array_t::empty() + return m_value.array->empty(); + } + + case value_t::object: + { + // delegate call to object_t::empty() + return m_value.object->empty(); + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // all other types are nonempty + return false; + } + } + } + + /*! + @brief returns the number of elements + + Returns the number of elements in a JSON value. + + @return The return value depends on the different types and is + defined as follows: + Value type | return value + ----------- | ------------- + null | `0` + boolean | `1` + string | `1` + number | `1` + binary | `1` + object | result of function object_t::size() + array | result of function array_t::size() + + @liveexample{The following code calls `size()` on the different value + types.,size} + + @complexity Constant, as long as @ref array_t and @ref object_t satisfy + the Container concept; that is, their size() functions have constant + complexity. + + @iterators No changes. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @note This function does not return the length of a string stored as JSON + value - it returns the number of elements in the JSON value which is 1 in + the case of a string. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + - Has the semantics of `std::distance(begin(), end())`. + + @sa see @ref empty() -- checks whether the container is empty + @sa see @ref max_size() -- returns the maximal number of elements + + @since version 1.0.0 + */ + size_type size() const noexcept + { + switch (m_type) + { + case value_t::null: + { + // null values are empty + return 0; + } + + case value_t::array: + { + // delegate call to array_t::size() + return m_value.array->size(); + } + + case value_t::object: + { + // delegate call to object_t::size() + return m_value.object->size(); + } + + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // all other types have size 1 + return 1; + } + } + } + + /*! + @brief returns the maximum possible number of elements + + Returns the maximum number of elements a JSON value is able to hold due to + system or library implementation limitations, i.e. `std::distance(begin(), + end())` for the JSON value. + + @return The return value depends on the different types and is + defined as follows: + Value type | return value + ----------- | ------------- + null | `0` (same as `size()`) + boolean | `1` (same as `size()`) + string | `1` (same as `size()`) + number | `1` (same as `size()`) + binary | `1` (same as `size()`) + object | result of function `object_t::max_size()` + array | result of function `array_t::max_size()` + + @liveexample{The following code calls `max_size()` on the different value + types. Note the output is implementation specific.,max_size} + + @complexity Constant, as long as @ref array_t and @ref object_t satisfy + the Container concept; that is, their `max_size()` functions have constant + complexity. + + @iterators No changes. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @requirement This function helps `basic_json` satisfying the + [Container](https://en.cppreference.com/w/cpp/named_req/Container) + requirements: + - The complexity is constant. + - Has the semantics of returning `b.size()` where `b` is the largest + possible JSON value. + + @sa see @ref size() -- returns the number of elements + + @since version 1.0.0 + */ + size_type max_size() const noexcept + { + switch (m_type) + { + case value_t::array: + { + // delegate call to array_t::max_size() + return m_value.array->max_size(); + } + + case value_t::object: + { + // delegate call to object_t::max_size() + return m_value.object->max_size(); + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // all other types have max_size() == size() + return size(); + } + } + } + + /// @} + + + /////////////// + // modifiers // + /////////////// + + /// @name modifiers + /// @{ + + /*! + @brief clears the contents + + Clears the content of a JSON value and resets it to the default value as + if @ref basic_json(value_t) would have been called with the current value + type from @ref type(): + + Value type | initial value + ----------- | ------------- + null | `null` + boolean | `false` + string | `""` + number | `0` + binary | An empty byte vector + object | `{}` + array | `[]` + + @post Has the same effect as calling + @code {.cpp} + *this = basic_json(type()); + @endcode + + @liveexample{The example below shows the effect of `clear()` to different + JSON types.,clear} + + @complexity Linear in the size of the JSON value. + + @iterators All iterators, pointers and references related to this container + are invalidated. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @sa see @ref basic_json(value_t) -- constructor that creates an object with the + same value than calling `clear()` + + @since version 1.0.0 + */ + void clear() noexcept + { + switch (m_type) + { + case value_t::number_integer: + { + m_value.number_integer = 0; + break; + } + + case value_t::number_unsigned: + { + m_value.number_unsigned = 0; + break; + } + + case value_t::number_float: + { + m_value.number_float = 0.0; + break; + } + + case value_t::boolean: + { + m_value.boolean = false; + break; + } + + case value_t::string: + { + m_value.string->clear(); + break; + } + + case value_t::binary: + { + m_value.binary->clear(); + break; + } + + case value_t::array: + { + m_value.array->clear(); + break; + } + + case value_t::object: + { + m_value.object->clear(); + break; + } + + case value_t::null: + case value_t::discarded: + default: + break; + } + } + + /*! + @brief add an object to an array + + Appends the given element @a val to the end of the JSON value. If the + function is called on a JSON null value, an empty array is created before + appending @a val. + + @param[in] val the value to add to the JSON array + + @throw type_error.308 when called on a type other than JSON array or + null; example: `"cannot use push_back() with number"` + + @complexity Amortized constant. + + @liveexample{The example shows how `push_back()` and `+=` can be used to + add elements to a JSON array. Note how the `null` value was silently + converted to a JSON array.,push_back} + + @since version 1.0.0 + */ + void push_back(basic_json&& val) + { + // push_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()), *this)); + } + + // transform null object into an array + if (is_null()) + { + m_type = value_t::array; + m_value = value_t::array; + assert_invariant(); + } + + // add element to array (move semantics) + const auto old_capacity = m_value.array->capacity(); + m_value.array->push_back(std::move(val)); + set_parent(m_value.array->back(), old_capacity); + // if val is moved from, basic_json move constructor marks it null so we do not call the destructor + } + + /*! + @brief add an object to an array + @copydoc push_back(basic_json&&) + */ + reference operator+=(basic_json&& val) + { + push_back(std::move(val)); + return *this; + } + + /*! + @brief add an object to an array + @copydoc push_back(basic_json&&) + */ + void push_back(const basic_json& val) + { + // push_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()), *this)); + } + + // transform null object into an array + if (is_null()) + { + m_type = value_t::array; + m_value = value_t::array; + assert_invariant(); + } + + // add element to array + const auto old_capacity = m_value.array->capacity(); + m_value.array->push_back(val); + set_parent(m_value.array->back(), old_capacity); + } + + /*! + @brief add an object to an array + @copydoc push_back(basic_json&&) + */ + reference operator+=(const basic_json& val) + { + push_back(val); + return *this; + } + + /*! + @brief add an object to an object + + Inserts the given element @a val to the JSON object. If the function is + called on a JSON null value, an empty object is created before inserting + @a val. + + @param[in] val the value to add to the JSON object + + @throw type_error.308 when called on a type other than JSON object or + null; example: `"cannot use push_back() with number"` + + @complexity Logarithmic in the size of the container, O(log(`size()`)). + + @liveexample{The example shows how `push_back()` and `+=` can be used to + add elements to a JSON object. Note how the `null` value was silently + converted to a JSON object.,push_back__object_t__value} + + @since version 1.0.0 + */ + void push_back(const typename object_t::value_type& val) + { + // push_back only works for null objects or objects + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) + { + JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()), *this)); + } + + // transform null object into an object + if (is_null()) + { + m_type = value_t::object; + m_value = value_t::object; + assert_invariant(); + } + + // add element to object + auto res = m_value.object->insert(val); + set_parent(res.first->second); + } + + /*! + @brief add an object to an object + @copydoc push_back(const typename object_t::value_type&) + */ + reference operator+=(const typename object_t::value_type& val) + { + push_back(val); + return *this; + } + + /*! + @brief add an object to an object + + This function allows to use `push_back` with an initializer list. In case + + 1. the current value is an object, + 2. the initializer list @a init contains only two elements, and + 3. the first element of @a init is a string, + + @a init is converted into an object element and added using + @ref push_back(const typename object_t::value_type&). Otherwise, @a init + is converted to a JSON value and added using @ref push_back(basic_json&&). + + @param[in] init an initializer list + + @complexity Linear in the size of the initializer list @a init. + + @note This function is required to resolve an ambiguous overload error, + because pairs like `{"key", "value"}` can be both interpreted as + `object_t::value_type` or `std::initializer_list`, see + https://github.com/nlohmann/json/issues/235 for more information. + + @liveexample{The example shows how initializer lists are treated as + objects when possible.,push_back__initializer_list} + */ + void push_back(initializer_list_t init) + { + if (is_object() && init.size() == 2 && (*init.begin())->is_string()) + { + basic_json&& key = init.begin()->moved_or_copied(); + push_back(typename object_t::value_type( + std::move(key.get_ref()), (init.begin() + 1)->moved_or_copied())); + } + else + { + push_back(basic_json(init)); + } + } + + /*! + @brief add an object to an object + @copydoc push_back(initializer_list_t) + */ + reference operator+=(initializer_list_t init) + { + push_back(init); + return *this; + } + + /*! + @brief add an object to an array + + Creates a JSON value from the passed parameters @a args to the end of the + JSON value. If the function is called on a JSON null value, an empty array + is created before appending the value created from @a args. + + @param[in] args arguments to forward to a constructor of @ref basic_json + @tparam Args compatible types to create a @ref basic_json object + + @return reference to the inserted element + + @throw type_error.311 when called on a type other than JSON array or + null; example: `"cannot use emplace_back() with number"` + + @complexity Amortized constant. + + @liveexample{The example shows how `push_back()` can be used to add + elements to a JSON array. Note how the `null` value was silently converted + to a JSON array.,emplace_back} + + @since version 2.0.8, returns reference since 3.7.0 + */ + template + reference emplace_back(Args&& ... args) + { + // emplace_back only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_array()))) + { + JSON_THROW(type_error::create(311, "cannot use emplace_back() with " + std::string(type_name()), *this)); + } + + // transform null object into an array + if (is_null()) + { + m_type = value_t::array; + m_value = value_t::array; + assert_invariant(); + } + + // add element to array (perfect forwarding) + const auto old_capacity = m_value.array->capacity(); + m_value.array->emplace_back(std::forward(args)...); + return set_parent(m_value.array->back(), old_capacity); + } + + /*! + @brief add an object to an object if key does not exist + + Inserts a new element into a JSON object constructed in-place with the + given @a args if there is no element with the key in the container. If the + function is called on a JSON null value, an empty object is created before + appending the value created from @a args. + + @param[in] args arguments to forward to a constructor of @ref basic_json + @tparam Args compatible types to create a @ref basic_json object + + @return a pair consisting of an iterator to the inserted element, or the + already-existing element if no insertion happened, and a bool + denoting whether the insertion took place. + + @throw type_error.311 when called on a type other than JSON object or + null; example: `"cannot use emplace() with number"` + + @complexity Logarithmic in the size of the container, O(log(`size()`)). + + @liveexample{The example shows how `emplace()` can be used to add elements + to a JSON object. Note how the `null` value was silently converted to a + JSON object. Further note how no value is added if there was already one + value stored with the same key.,emplace} + + @since version 2.0.8 + */ + template + std::pair emplace(Args&& ... args) + { + // emplace only works for null objects or arrays + if (JSON_HEDLEY_UNLIKELY(!(is_null() || is_object()))) + { + JSON_THROW(type_error::create(311, "cannot use emplace() with " + std::string(type_name()), *this)); + } + + // transform null object into an object + if (is_null()) + { + m_type = value_t::object; + m_value = value_t::object; + assert_invariant(); + } + + // add element to array (perfect forwarding) + auto res = m_value.object->emplace(std::forward(args)...); + set_parent(res.first->second); + + // create result iterator and set iterator to the result of emplace + auto it = begin(); + it.m_it.object_iterator = res.first; + + // return pair of iterator and boolean + return {it, res.second}; + } + + /// Helper for insertion of an iterator + /// @note: This uses std::distance to support GCC 4.8, + /// see https://github.com/nlohmann/json/pull/1257 + template + iterator insert_iterator(const_iterator pos, Args&& ... args) + { + iterator result(this); + JSON_ASSERT(m_value.array != nullptr); + + auto insert_pos = std::distance(m_value.array->begin(), pos.m_it.array_iterator); + m_value.array->insert(pos.m_it.array_iterator, std::forward(args)...); + result.m_it.array_iterator = m_value.array->begin() + insert_pos; + + // This could have been written as: + // result.m_it.array_iterator = m_value.array->insert(pos.m_it.array_iterator, cnt, val); + // but the return value of insert is missing in GCC 4.8, so it is written this way instead. + + set_parents(); + return result; + } + + /*! + @brief inserts element + + Inserts element @a val before iterator @a pos. + + @param[in] pos iterator before which the content will be inserted; may be + the end() iterator + @param[in] val element to insert + @return iterator pointing to the inserted @a val. + + @throw type_error.309 if called on JSON values other than arrays; + example: `"cannot use insert() with string"` + @throw invalid_iterator.202 if @a pos is not an iterator of *this; + example: `"iterator does not fit current value"` + + @complexity Constant plus linear in the distance between @a pos and end of + the container. + + @liveexample{The example shows how `insert()` is used.,insert} + + @since version 1.0.0 + */ + iterator insert(const_iterator pos, const basic_json& val) + { + // insert only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", *this)); + } + + // insert to array and return iterator + return insert_iterator(pos, val); + } + + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()), *this)); + } + + /*! + @brief inserts element + @copydoc insert(const_iterator, const basic_json&) + */ + iterator insert(const_iterator pos, basic_json&& val) + { + return insert(pos, val); + } + + /*! + @brief inserts elements + + Inserts @a cnt copies of @a val before iterator @a pos. + + @param[in] pos iterator before which the content will be inserted; may be + the end() iterator + @param[in] cnt number of copies of @a val to insert + @param[in] val element to insert + @return iterator pointing to the first element inserted, or @a pos if + `cnt==0` + + @throw type_error.309 if called on JSON values other than arrays; example: + `"cannot use insert() with string"` + @throw invalid_iterator.202 if @a pos is not an iterator of *this; + example: `"iterator does not fit current value"` + + @complexity Linear in @a cnt plus linear in the distance between @a pos + and end of the container. + + @liveexample{The example shows how `insert()` is used.,insert__count} + + @since version 1.0.0 + */ + iterator insert(const_iterator pos, size_type cnt, const basic_json& val) + { + // insert only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", *this)); + } + + // insert to array and return iterator + return insert_iterator(pos, cnt, val); + } + + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()), *this)); + } + + /*! + @brief inserts elements + + Inserts elements from range `[first, last)` before iterator @a pos. + + @param[in] pos iterator before which the content will be inserted; may be + the end() iterator + @param[in] first begin of the range of elements to insert + @param[in] last end of the range of elements to insert + + @throw type_error.309 if called on JSON values other than arrays; example: + `"cannot use insert() with string"` + @throw invalid_iterator.202 if @a pos is not an iterator of *this; + example: `"iterator does not fit current value"` + @throw invalid_iterator.210 if @a first and @a last do not belong to the + same JSON value; example: `"iterators do not fit"` + @throw invalid_iterator.211 if @a first or @a last are iterators into + container for which insert is called; example: `"passed iterators may not + belong to container"` + + @return iterator pointing to the first element inserted, or @a pos if + `first==last` + + @complexity Linear in `std::distance(first, last)` plus linear in the + distance between @a pos and end of the container. + + @liveexample{The example shows how `insert()` is used.,insert__range} + + @since version 1.0.0 + */ + iterator insert(const_iterator pos, const_iterator first, const_iterator last) + { + // insert only works for arrays + if (JSON_HEDLEY_UNLIKELY(!is_array())) + { + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()), *this)); + } + + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", *this)); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit", *this)); + } + + if (JSON_HEDLEY_UNLIKELY(first.m_object == this)) + { + JSON_THROW(invalid_iterator::create(211, "passed iterators may not belong to container", *this)); + } + + // insert to array and return iterator + return insert_iterator(pos, first.m_it.array_iterator, last.m_it.array_iterator); + } + + /*! + @brief inserts elements + + Inserts elements from initializer list @a ilist before iterator @a pos. + + @param[in] pos iterator before which the content will be inserted; may be + the end() iterator + @param[in] ilist initializer list to insert the values from + + @throw type_error.309 if called on JSON values other than arrays; example: + `"cannot use insert() with string"` + @throw invalid_iterator.202 if @a pos is not an iterator of *this; + example: `"iterator does not fit current value"` + + @return iterator pointing to the first element inserted, or @a pos if + `ilist` is empty + + @complexity Linear in `ilist.size()` plus linear in the distance between + @a pos and end of the container. + + @liveexample{The example shows how `insert()` is used.,insert__ilist} + + @since version 1.0.0 + */ + iterator insert(const_iterator pos, initializer_list_t ilist) + { + // insert only works for arrays + if (JSON_HEDLEY_UNLIKELY(!is_array())) + { + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()), *this)); + } + + // check if iterator pos fits to this JSON value + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) + { + JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value", *this)); + } + + // insert to array and return iterator + return insert_iterator(pos, ilist.begin(), ilist.end()); + } + + /*! + @brief inserts elements + + Inserts elements from range `[first, last)`. + + @param[in] first begin of the range of elements to insert + @param[in] last end of the range of elements to insert + + @throw type_error.309 if called on JSON values other than objects; example: + `"cannot use insert() with string"` + @throw invalid_iterator.202 if iterator @a first or @a last does does not + point to an object; example: `"iterators first and last must point to + objects"` + @throw invalid_iterator.210 if @a first and @a last do not belong to the + same JSON value; example: `"iterators do not fit"` + + @complexity Logarithmic: `O(N*log(size() + N))`, where `N` is the number + of elements to insert. + + @liveexample{The example shows how `insert()` is used.,insert__range_object} + + @since version 3.0.0 + */ + void insert(const_iterator first, const_iterator last) + { + // insert only works for objects + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()), *this)); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit", *this)); + } + + // passed iterators must belong to objects + if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object())) + { + JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects", *this)); + } + + m_value.object->insert(first.m_it.object_iterator, last.m_it.object_iterator); + } + + /*! + @brief updates a JSON object from another object, overwriting existing keys + + Inserts all values from JSON object @a j and overwrites existing keys. + + @param[in] j JSON object to read values from + + @throw type_error.312 if called on JSON values other than objects; example: + `"cannot use update() with string"` + + @complexity O(N*log(size() + N)), where N is the number of elements to + insert. + + @liveexample{The example shows how `update()` is used.,update} + + @sa https://docs.python.org/3.6/library/stdtypes.html#dict.update + + @since version 3.0.0 + */ + void update(const_reference j) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_type = value_t::object; + m_value.object = create(); + assert_invariant(); + } + + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()), *this)); + } + if (JSON_HEDLEY_UNLIKELY(!j.is_object())) + { + JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(j.type_name()), *this)); + } + + for (auto it = j.cbegin(); it != j.cend(); ++it) + { + m_value.object->operator[](it.key()) = it.value(); +#if JSON_DIAGNOSTICS + m_value.object->operator[](it.key()).m_parent = this; +#endif + } + } + + /*! + @brief updates a JSON object from another object, overwriting existing keys + + Inserts all values from from range `[first, last)` and overwrites existing + keys. + + @param[in] first begin of the range of elements to insert + @param[in] last end of the range of elements to insert + + @throw type_error.312 if called on JSON values other than objects; example: + `"cannot use update() with string"` + @throw invalid_iterator.202 if iterator @a first or @a last does does not + point to an object; example: `"iterators first and last must point to + objects"` + @throw invalid_iterator.210 if @a first and @a last do not belong to the + same JSON value; example: `"iterators do not fit"` + + @complexity O(N*log(size() + N)), where N is the number of elements to + insert. + + @liveexample{The example shows how `update()` is used__range.,update} + + @sa https://docs.python.org/3.6/library/stdtypes.html#dict.update + + @since version 3.0.0 + */ + void update(const_iterator first, const_iterator last) + { + // implicitly convert null value to an empty object + if (is_null()) + { + m_type = value_t::object; + m_value.object = create(); + assert_invariant(); + } + + if (JSON_HEDLEY_UNLIKELY(!is_object())) + { + JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()), *this)); + } + + // check if range iterators belong to the same JSON object + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) + { + JSON_THROW(invalid_iterator::create(210, "iterators do not fit", *this)); + } + + // passed iterators must belong to objects + if (JSON_HEDLEY_UNLIKELY(!first.m_object->is_object() + || !last.m_object->is_object())) + { + JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects", *this)); + } + + for (auto it = first; it != last; ++it) + { + m_value.object->operator[](it.key()) = it.value(); +#if JSON_DIAGNOSTICS + m_value.object->operator[](it.key()).m_parent = this; +#endif + } + } + + /*! + @brief exchanges the values + + Exchanges the contents of the JSON value with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other JSON value to exchange the contents with + + @complexity Constant. + + @liveexample{The example below shows how JSON values can be swapped with + `swap()`.,swap__reference} + + @since version 1.0.0 + */ + void swap(reference other) noexcept ( + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value + ) + { + std::swap(m_type, other.m_type); + std::swap(m_value, other.m_value); + + set_parents(); + other.set_parents(); + assert_invariant(); + } + + /*! + @brief exchanges the values + + Exchanges the contents of the JSON value from @a left with those of @a right. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. implemented as a friend function callable via ADL. + + @param[in,out] left JSON value to exchange the contents with + @param[in,out] right JSON value to exchange the contents with + + @complexity Constant. + + @liveexample{The example below shows how JSON values can be swapped with + `swap()`.,swap__reference} + + @since version 1.0.0 + */ + friend void swap(reference left, reference right) noexcept ( + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value&& + std::is_nothrow_move_constructible::value&& + std::is_nothrow_move_assignable::value + ) + { + left.swap(right); + } + + /*! + @brief exchanges the values + + Exchanges the contents of a JSON array with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other array to exchange the contents with + + @throw type_error.310 when JSON value is not an array; example: `"cannot + use swap() with string"` + + @complexity Constant. + + @liveexample{The example below shows how arrays can be swapped with + `swap()`.,swap__array_t} + + @since version 1.0.0 + */ + void swap(array_t& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for arrays + if (JSON_HEDLEY_LIKELY(is_array())) + { + std::swap(*(m_value.array), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()), *this)); + } + } + + /*! + @brief exchanges the values + + Exchanges the contents of a JSON object with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other object to exchange the contents with + + @throw type_error.310 when JSON value is not an object; example: + `"cannot use swap() with string"` + + @complexity Constant. + + @liveexample{The example below shows how objects can be swapped with + `swap()`.,swap__object_t} + + @since version 1.0.0 + */ + void swap(object_t& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for objects + if (JSON_HEDLEY_LIKELY(is_object())) + { + std::swap(*(m_value.object), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()), *this)); + } + } + + /*! + @brief exchanges the values + + Exchanges the contents of a JSON string with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other string to exchange the contents with + + @throw type_error.310 when JSON value is not a string; example: `"cannot + use swap() with boolean"` + + @complexity Constant. + + @liveexample{The example below shows how strings can be swapped with + `swap()`.,swap__string_t} + + @since version 1.0.0 + */ + void swap(string_t& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_string())) + { + std::swap(*(m_value.string), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()), *this)); + } + } + + /*! + @brief exchanges the values + + Exchanges the contents of a JSON string with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other binary to exchange the contents with + + @throw type_error.310 when JSON value is not a string; example: `"cannot + use swap() with boolean"` + + @complexity Constant. + + @liveexample{The example below shows how strings can be swapped with + `swap()`.,swap__binary_t} + + @since version 3.8.0 + */ + void swap(binary_t& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_binary())) + { + std::swap(*(m_value.binary), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()), *this)); + } + } + + /// @copydoc swap(binary_t&) + void swap(typename binary_t::container_type& other) // NOLINT(bugprone-exception-escape) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_binary())) + { + std::swap(*(m_value.binary), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()), *this)); + } + } + + /// @} + + public: + ////////////////////////////////////////// + // lexicographical comparison operators // + ////////////////////////////////////////// + + /// @name lexicographical comparison operators + /// @{ + + /*! + @brief comparison: equal + + Compares two JSON values for equality according to the following rules: + - Two JSON values are equal if (1) they are from the same type and (2) + their stored values are the same according to their respective + `operator==`. + - Integer and floating-point numbers are automatically converted before + comparison. Note that two NaN values are always treated as unequal. + - Two JSON null values are equal. + + @note Floating-point inside JSON values numbers are compared with + `json::number_float_t::operator==` which is `double::operator==` by + default. To compare floating-point while respecting an epsilon, an alternative + [comparison function](https://github.com/mariokonrad/marnav/blob/master/include/marnav/math/floatingpoint.hpp#L34-#L39) + could be used, for instance + @code {.cpp} + template::value, T>::type> + inline bool is_same(T a, T b, T epsilon = std::numeric_limits::epsilon()) noexcept + { + return std::abs(a - b) <= epsilon; + } + @endcode + Or you can self-defined operator equal function like this: + @code {.cpp} + bool my_equal(const_reference lhs, const_reference rhs) { + const auto lhs_type lhs.type(); + const auto rhs_type rhs.type(); + if (lhs_type == rhs_type) { + switch(lhs_type) + // self_defined case + case value_t::number_float: + return std::abs(lhs - rhs) <= std::numeric_limits::epsilon(); + // other cases remain the same with the original + ... + } + ... + } + @endcode + + @note NaN values never compare equal to themselves or to other NaN values. + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether the values @a lhs and @a rhs are equal + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @complexity Linear. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__equal} + + @since version 1.0.0 + */ + friend bool operator==(const_reference lhs, const_reference rhs) noexcept + { +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + const auto lhs_type = lhs.type(); + const auto rhs_type = rhs.type(); + + if (lhs_type == rhs_type) + { + switch (lhs_type) + { + case value_t::array: + return *lhs.m_value.array == *rhs.m_value.array; + + case value_t::object: + return *lhs.m_value.object == *rhs.m_value.object; + + case value_t::null: + return true; + + case value_t::string: + return *lhs.m_value.string == *rhs.m_value.string; + + case value_t::boolean: + return lhs.m_value.boolean == rhs.m_value.boolean; + + case value_t::number_integer: + return lhs.m_value.number_integer == rhs.m_value.number_integer; + + case value_t::number_unsigned: + return lhs.m_value.number_unsigned == rhs.m_value.number_unsigned; + + case value_t::number_float: + return lhs.m_value.number_float == rhs.m_value.number_float; + + case value_t::binary: + return *lhs.m_value.binary == *rhs.m_value.binary; + + case value_t::discarded: + default: + return false; + } + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_integer) == rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) + { + return lhs.m_value.number_float == static_cast(rhs.m_value.number_integer); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_unsigned) == rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_float == static_cast(rhs.m_value.number_unsigned); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) + { + return static_cast(lhs.m_value.number_unsigned) == rhs.m_value.number_integer; + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_integer == static_cast(rhs.m_value.number_unsigned); + } + + return false; +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + } + + /*! + @brief comparison: equal + @copydoc operator==(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator==(const_reference lhs, ScalarType rhs) noexcept + { + return lhs == basic_json(rhs); + } + + /*! + @brief comparison: equal + @copydoc operator==(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator==(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) == rhs; + } + + /*! + @brief comparison: not equal + + Compares two JSON values for inequality by calculating `not (lhs == rhs)`. + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether the values @a lhs and @a rhs are not equal + + @complexity Linear. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__notequal} + + @since version 1.0.0 + */ + friend bool operator!=(const_reference lhs, const_reference rhs) noexcept + { + return !(lhs == rhs); + } + + /*! + @brief comparison: not equal + @copydoc operator!=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator!=(const_reference lhs, ScalarType rhs) noexcept + { + return lhs != basic_json(rhs); + } + + /*! + @brief comparison: not equal + @copydoc operator!=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator!=(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) != rhs; + } + + /*! + @brief comparison: less than + + Compares whether one JSON value @a lhs is less than another JSON value @a + rhs according to the following rules: + - If @a lhs and @a rhs have the same type, the values are compared using + the default `<` operator. + - Integer and floating-point numbers are automatically converted before + comparison + - In case @a lhs and @a rhs have different types, the values are ignored + and the order of the types is considered, see + @ref operator<(const value_t, const value_t). + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether @a lhs is less than @a rhs + + @complexity Linear. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__less} + + @since version 1.0.0 + */ + friend bool operator<(const_reference lhs, const_reference rhs) noexcept + { + const auto lhs_type = lhs.type(); + const auto rhs_type = rhs.type(); + + if (lhs_type == rhs_type) + { + switch (lhs_type) + { + case value_t::array: + // note parentheses are necessary, see + // https://github.com/nlohmann/json/issues/1530 + return (*lhs.m_value.array) < (*rhs.m_value.array); + + case value_t::object: + return (*lhs.m_value.object) < (*rhs.m_value.object); + + case value_t::null: + return false; + + case value_t::string: + return (*lhs.m_value.string) < (*rhs.m_value.string); + + case value_t::boolean: + return (lhs.m_value.boolean) < (rhs.m_value.boolean); + + case value_t::number_integer: + return (lhs.m_value.number_integer) < (rhs.m_value.number_integer); + + case value_t::number_unsigned: + return (lhs.m_value.number_unsigned) < (rhs.m_value.number_unsigned); + + case value_t::number_float: + return (lhs.m_value.number_float) < (rhs.m_value.number_float); + + case value_t::binary: + return (*lhs.m_value.binary) < (*rhs.m_value.binary); + + case value_t::discarded: + default: + return false; + } + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_integer) < rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_integer) + { + return lhs.m_value.number_float < static_cast(rhs.m_value.number_integer); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_float) + { + return static_cast(lhs.m_value.number_unsigned) < rhs.m_value.number_float; + } + else if (lhs_type == value_t::number_float && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_float < static_cast(rhs.m_value.number_unsigned); + } + else if (lhs_type == value_t::number_integer && rhs_type == value_t::number_unsigned) + { + return lhs.m_value.number_integer < static_cast(rhs.m_value.number_unsigned); + } + else if (lhs_type == value_t::number_unsigned && rhs_type == value_t::number_integer) + { + return static_cast(lhs.m_value.number_unsigned) < rhs.m_value.number_integer; + } + + // We only reach this line if we cannot compare values. In that case, + // we compare types. Note we have to call the operator explicitly, + // because MSVC has problems otherwise. + return operator<(lhs_type, rhs_type); + } + + /*! + @brief comparison: less than + @copydoc operator<(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator<(const_reference lhs, ScalarType rhs) noexcept + { + return lhs < basic_json(rhs); + } + + /*! + @brief comparison: less than + @copydoc operator<(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator<(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) < rhs; + } + + /*! + @brief comparison: less than or equal + + Compares whether one JSON value @a lhs is less than or equal to another + JSON value by calculating `not (rhs < lhs)`. + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether @a lhs is less than or equal to @a rhs + + @complexity Linear. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__greater} + + @since version 1.0.0 + */ + friend bool operator<=(const_reference lhs, const_reference rhs) noexcept + { + return !(rhs < lhs); + } + + /*! + @brief comparison: less than or equal + @copydoc operator<=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator<=(const_reference lhs, ScalarType rhs) noexcept + { + return lhs <= basic_json(rhs); + } + + /*! + @brief comparison: less than or equal + @copydoc operator<=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator<=(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) <= rhs; + } + + /*! + @brief comparison: greater than + + Compares whether one JSON value @a lhs is greater than another + JSON value by calculating `not (lhs <= rhs)`. + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether @a lhs is greater than to @a rhs + + @complexity Linear. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__lessequal} + + @since version 1.0.0 + */ + friend bool operator>(const_reference lhs, const_reference rhs) noexcept + { + return !(lhs <= rhs); + } + + /*! + @brief comparison: greater than + @copydoc operator>(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator>(const_reference lhs, ScalarType rhs) noexcept + { + return lhs > basic_json(rhs); + } + + /*! + @brief comparison: greater than + @copydoc operator>(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator>(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) > rhs; + } + + /*! + @brief comparison: greater than or equal + + Compares whether one JSON value @a lhs is greater than or equal to another + JSON value by calculating `not (lhs < rhs)`. + + @param[in] lhs first JSON value to consider + @param[in] rhs second JSON value to consider + @return whether @a lhs is greater than or equal to @a rhs + + @complexity Linear. + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @liveexample{The example demonstrates comparing several JSON + types.,operator__greaterequal} + + @since version 1.0.0 + */ + friend bool operator>=(const_reference lhs, const_reference rhs) noexcept + { + return !(lhs < rhs); + } + + /*! + @brief comparison: greater than or equal + @copydoc operator>=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator>=(const_reference lhs, ScalarType rhs) noexcept + { + return lhs >= basic_json(rhs); + } + + /*! + @brief comparison: greater than or equal + @copydoc operator>=(const_reference, const_reference) + */ + template::value, int>::type = 0> + friend bool operator>=(ScalarType lhs, const_reference rhs) noexcept + { + return basic_json(lhs) >= rhs; + } + + /// @} + + /////////////////// + // serialization // + /////////////////// + + /// @name serialization + /// @{ +#ifndef JSON_NO_IO + /*! + @brief serialize to stream + + Serialize the given JSON value @a j to the output stream @a o. The JSON + value will be serialized using the @ref dump member function. + + - The indentation of the output can be controlled with the member variable + `width` of the output stream @a o. For instance, using the manipulator + `std::setw(4)` on @a o sets the indentation level to `4` and the + serialization result is the same as calling `dump(4)`. + + - The indentation character can be controlled with the member variable + `fill` of the output stream @a o. For instance, the manipulator + `std::setfill('\\t')` sets indentation to use a tab character rather than + the default space character. + + @param[in,out] o stream to serialize to + @param[in] j JSON value to serialize + + @return the stream @a o + + @throw type_error.316 if a string stored inside the JSON value is not + UTF-8 encoded + + @complexity Linear. + + @liveexample{The example below shows the serialization with different + parameters to `width` to adjust the indentation level.,operator_serialize} + + @since version 1.0.0; indentation character added in version 3.0.0 + */ + friend std::ostream& operator<<(std::ostream& o, const basic_json& j) + { + // read width member and use it as indentation parameter if nonzero + const bool pretty_print = o.width() > 0; + const auto indentation = pretty_print ? o.width() : 0; + + // reset width to 0 for subsequent calls to this stream + o.width(0); + + // do the actual serialization + serializer s(detail::output_adapter(o), o.fill()); + s.dump(j, pretty_print, false, static_cast(indentation)); + return o; + } + + /*! + @brief serialize to stream + @deprecated This stream operator is deprecated and will be removed in + future 4.0.0 of the library. Please use + @ref operator<<(std::ostream&, const basic_json&) + instead; that is, replace calls like `j >> o;` with `o << j;`. + @since version 1.0.0; deprecated since version 3.0.0 + */ + JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator<<(std::ostream&, const basic_json&)) + friend std::ostream& operator>>(const basic_json& j, std::ostream& o) + { + return o << j; + } +#endif // JSON_NO_IO + /// @} + + + ///////////////////// + // deserialization // + ///////////////////// + + /// @name deserialization + /// @{ + + /*! + @brief deserialize from a compatible input + + @tparam InputType A compatible input, for instance + - an std::istream object + - a FILE pointer + - a C-style array of characters + - a pointer to a null-terminated string of single byte characters + - an object obj for which begin(obj) and end(obj) produces a valid pair of + iterators. + + @param[in] i input to read from + @param[in] cb a parser callback function of type @ref parser_callback_t + which is used to control the deserialization by filtering unwanted values + (optional) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + @param[in] ignore_comments whether comments should be ignored and treated + like whitespace (true) or yield a parse error (true); (optional, false by + default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.101 if a parse error occurs; example: `""unexpected end + of input; expected string literal""` + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + + @complexity Linear in the length of the input. The parser is a predictive + LL(1) parser. The complexity can be higher if the parser callback function + @a cb or reading from the input @a i has a super-linear complexity. + + @note A UTF-8 byte order mark is silently ignored. + + @liveexample{The example below demonstrates the `parse()` function reading + from an array.,parse__array__parser_callback_t} + + @liveexample{The example below demonstrates the `parse()` function with + and without callback function.,parse__string__parser_callback_t} + + @liveexample{The example below demonstrates the `parse()` function with + and without callback function.,parse__istream__parser_callback_t} + + @liveexample{The example below demonstrates the `parse()` function reading + from a contiguous container.,parse__contiguouscontainer__parser_callback_t} + + @since version 2.0.3 (contiguous containers); version 3.9.0 allowed to + ignore comments. + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json parse(InputType&& i, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(detail::input_adapter(std::forward(i)), cb, allow_exceptions, ignore_comments).parse(true, result); + return result; + } + + /*! + @brief deserialize from a pair of character iterators + + The value_type of the iterator must be a integral type with size of 1, 2 or + 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32. + + @param[in] first iterator to start of character range + @param[in] last iterator to end of character range + @param[in] cb a parser callback function of type @ref parser_callback_t + which is used to control the deserialization by filtering unwanted values + (optional) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + @param[in] ignore_comments whether comments should be ignored and treated + like whitespace (true) or yield a parse error (true); (optional, false by + default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.101 if a parse error occurs; example: `""unexpected end + of input; expected string literal""` + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json parse(IteratorType first, + IteratorType last, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions, ignore_comments).parse(true, result); + return result; + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len)) + static basic_json parse(detail::span_input_adapter&& i, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true, + const bool ignore_comments = false) + { + basic_json result; + parser(i.get(), cb, allow_exceptions, ignore_comments).parse(true, result); + return result; + } + + /*! + @brief check if the input is valid JSON + + Unlike the @ref parse(InputType&&, const parser_callback_t,const bool) + function, this function neither throws an exception in case of invalid JSON + input (i.e., a parse error) nor creates diagnostic information. + + @tparam InputType A compatible input, for instance + - an std::istream object + - a FILE pointer + - a C-style array of characters + - a pointer to a null-terminated string of single byte characters + - an object obj for which begin(obj) and end(obj) produces a valid pair of + iterators. + + @param[in] i input to read from + @param[in] ignore_comments whether comments should be ignored and treated + like whitespace (true) or yield a parse error (true); (optional, false by + default) + + @return Whether the input read from @a i is valid JSON. + + @complexity Linear in the length of the input. The parser is a predictive + LL(1) parser. + + @note A UTF-8 byte order mark is silently ignored. + + @liveexample{The example below demonstrates the `accept()` function reading + from a string.,accept__string} + */ + template + static bool accept(InputType&& i, + const bool ignore_comments = false) + { + return parser(detail::input_adapter(std::forward(i)), nullptr, false, ignore_comments).accept(true); + } + + template + static bool accept(IteratorType first, IteratorType last, + const bool ignore_comments = false) + { + return parser(detail::input_adapter(std::move(first), std::move(last)), nullptr, false, ignore_comments).accept(true); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len)) + static bool accept(detail::span_input_adapter&& i, + const bool ignore_comments = false) + { + return parser(i.get(), nullptr, false, ignore_comments).accept(true); + } + + /*! + @brief generate SAX events + + The SAX event lister must follow the interface of @ref json_sax. + + This function reads from a compatible input. Examples are: + - an std::istream object + - a FILE pointer + - a C-style array of characters + - a pointer to a null-terminated string of single byte characters + - an object obj for which begin(obj) and end(obj) produces a valid pair of + iterators. + + @param[in] i input to read from + @param[in,out] sax SAX event listener + @param[in] format the format to parse (JSON, CBOR, MessagePack, or UBJSON) + @param[in] strict whether the input has to be consumed completely + @param[in] ignore_comments whether comments should be ignored and treated + like whitespace (true) or yield a parse error (true); (optional, false by + default); only applies to the JSON file format. + + @return return value of the last processed SAX event + + @throw parse_error.101 if a parse error occurs; example: `""unexpected end + of input; expected string literal""` + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + + @complexity Linear in the length of the input. The parser is a predictive + LL(1) parser. The complexity can be higher if the SAX consumer @a sax has + a super-linear complexity. + + @note A UTF-8 byte order mark is silently ignored. + + @liveexample{The example below demonstrates the `sax_parse()` function + reading from string and processing the events with a user-defined SAX + event consumer.,sax_parse} + + @since version 3.2.0 + */ + template + JSON_HEDLEY_NON_NULL(2) + static bool sax_parse(InputType&& i, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = detail::input_adapter(std::forward(i)); + return format == input_format_t::json + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); + } + + template + JSON_HEDLEY_NON_NULL(3) + static bool sax_parse(IteratorType first, IteratorType last, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = detail::input_adapter(std::move(first), std::move(last)); + return format == input_format_t::json + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); + } + + template + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...)) + JSON_HEDLEY_NON_NULL(2) + static bool sax_parse(detail::span_input_adapter&& i, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true, + const bool ignore_comments = false) + { + auto ia = i.get(); + return format == input_format_t::json + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + ? parser(std::move(ia), nullptr, true, ignore_comments).sax_parse(sax, strict) + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); + } +#ifndef JSON_NO_IO + /*! + @brief deserialize from stream + @deprecated This stream operator is deprecated and will be removed in + version 4.0.0 of the library. Please use + @ref operator>>(std::istream&, basic_json&) + instead; that is, replace calls like `j << i;` with `i >> j;`. + @since version 1.0.0; deprecated since version 3.0.0 + */ + JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator>>(std::istream&, basic_json&)) + friend std::istream& operator<<(basic_json& j, std::istream& i) + { + return operator>>(i, j); + } + + /*! + @brief deserialize from stream + + Deserializes an input stream to a JSON value. + + @param[in,out] i input stream to read a serialized JSON value from + @param[in,out] j JSON value to write the deserialized input to + + @throw parse_error.101 in case of an unexpected token + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + + @complexity Linear in the length of the input. The parser is a predictive + LL(1) parser. + + @note A UTF-8 byte order mark is silently ignored. + + @liveexample{The example below shows how a JSON value is constructed by + reading a serialization from a stream.,operator_deserialize} + + @sa parse(std::istream&, const parser_callback_t) for a variant with a + parser callback function to filter values while parsing + + @since version 1.0.0 + */ + friend std::istream& operator>>(std::istream& i, basic_json& j) + { + parser(detail::input_adapter(i)).parse(false, j); + return i; + } +#endif // JSON_NO_IO + /// @} + + /////////////////////////// + // convenience functions // + /////////////////////////// + + /*! + @brief return the type as string + + Returns the type name as string to be used in error messages - usually to + indicate that a function was called on a wrong JSON type. + + @return a string representation of a the @a m_type member: + Value type | return value + ----------- | ------------- + null | `"null"` + boolean | `"boolean"` + string | `"string"` + number | `"number"` (for all number types) + object | `"object"` + array | `"array"` + binary | `"binary"` + discarded | `"discarded"` + + @exceptionsafety No-throw guarantee: this function never throws exceptions. + + @complexity Constant. + + @liveexample{The following code exemplifies `type_name()` for all JSON + types.,type_name} + + @sa see @ref type() -- return the type of the JSON value + @sa see @ref operator value_t() -- return the type of the JSON value (implicit) + + @since version 1.0.0, public since 2.1.0, `const char*` and `noexcept` + since 3.0.0 + */ + JSON_HEDLEY_RETURNS_NON_NULL + const char* type_name() const noexcept + { + { + switch (m_type) + { + case value_t::null: + return "null"; + case value_t::object: + return "object"; + case value_t::array: + return "array"; + case value_t::string: + return "string"; + case value_t::boolean: + return "boolean"; + case value_t::binary: + return "binary"; + case value_t::discarded: + return "discarded"; + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + default: + return "number"; + } + } + } + + + JSON_PRIVATE_UNLESS_TESTED: + ////////////////////// + // member variables // + ////////////////////// + + /// the type of the current element + value_t m_type = value_t::null; + + /// the value of the current element + json_value m_value = {}; + +#if JSON_DIAGNOSTICS + /// a pointer to a parent value (for debugging purposes) + basic_json* m_parent = nullptr; +#endif + + ////////////////////////////////////////// + // binary serialization/deserialization // + ////////////////////////////////////////// + + /// @name binary serialization/deserialization support + /// @{ + + public: + /*! + @brief create a CBOR serialization of a given JSON value + + Serializes a given JSON value @a j to a byte vector using the CBOR (Concise + Binary Object Representation) serialization format. CBOR is a binary + serialization format which aims to be more compact than JSON itself, yet + more efficient to parse. + + The library uses the following mapping from JSON values types to + CBOR types according to the CBOR specification (RFC 7049): + + JSON value type | value/range | CBOR type | first byte + --------------- | ------------------------------------------ | ---------------------------------- | --------------- + null | `null` | Null | 0xF6 + boolean | `true` | True | 0xF5 + boolean | `false` | False | 0xF4 + number_integer | -9223372036854775808..-2147483649 | Negative integer (8 bytes follow) | 0x3B + number_integer | -2147483648..-32769 | Negative integer (4 bytes follow) | 0x3A + number_integer | -32768..-129 | Negative integer (2 bytes follow) | 0x39 + number_integer | -128..-25 | Negative integer (1 byte follow) | 0x38 + number_integer | -24..-1 | Negative integer | 0x20..0x37 + number_integer | 0..23 | Integer | 0x00..0x17 + number_integer | 24..255 | Unsigned integer (1 byte follow) | 0x18 + number_integer | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 + number_integer | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A + number_integer | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B + number_unsigned | 0..23 | Integer | 0x00..0x17 + number_unsigned | 24..255 | Unsigned integer (1 byte follow) | 0x18 + number_unsigned | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 + number_unsigned | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A + number_unsigned | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B + number_float | *any value representable by a float* | Single-Precision Float | 0xFA + number_float | *any value NOT representable by a float* | Double-Precision Float | 0xFB + string | *length*: 0..23 | UTF-8 string | 0x60..0x77 + string | *length*: 23..255 | UTF-8 string (1 byte follow) | 0x78 + string | *length*: 256..65535 | UTF-8 string (2 bytes follow) | 0x79 + string | *length*: 65536..4294967295 | UTF-8 string (4 bytes follow) | 0x7A + string | *length*: 4294967296..18446744073709551615 | UTF-8 string (8 bytes follow) | 0x7B + array | *size*: 0..23 | array | 0x80..0x97 + array | *size*: 23..255 | array (1 byte follow) | 0x98 + array | *size*: 256..65535 | array (2 bytes follow) | 0x99 + array | *size*: 65536..4294967295 | array (4 bytes follow) | 0x9A + array | *size*: 4294967296..18446744073709551615 | array (8 bytes follow) | 0x9B + object | *size*: 0..23 | map | 0xA0..0xB7 + object | *size*: 23..255 | map (1 byte follow) | 0xB8 + object | *size*: 256..65535 | map (2 bytes follow) | 0xB9 + object | *size*: 65536..4294967295 | map (4 bytes follow) | 0xBA + object | *size*: 4294967296..18446744073709551615 | map (8 bytes follow) | 0xBB + binary | *size*: 0..23 | byte string | 0x40..0x57 + binary | *size*: 23..255 | byte string (1 byte follow) | 0x58 + binary | *size*: 256..65535 | byte string (2 bytes follow) | 0x59 + binary | *size*: 65536..4294967295 | byte string (4 bytes follow) | 0x5A + binary | *size*: 4294967296..18446744073709551615 | byte string (8 bytes follow) | 0x5B + + Binary values with subtype are mapped to tagged values (0xD8..0xDB) + depending on the subtype, followed by a byte string, see "binary" cells + in the table above. + + @note The mapping is **complete** in the sense that any JSON value type + can be converted to a CBOR value. + + @note If NaN or Infinity are stored inside a JSON number, they are + serialized properly. This behavior differs from the @ref dump() + function which serializes NaN or Infinity to `null`. + + @note The following CBOR types are not used in the conversion: + - UTF-8 strings terminated by "break" (0x7F) + - arrays terminated by "break" (0x9F) + - maps terminated by "break" (0xBF) + - byte strings terminated by "break" (0x5F) + - date/time (0xC0..0xC1) + - bignum (0xC2..0xC3) + - decimal fraction (0xC4) + - bigfloat (0xC5) + - expected conversions (0xD5..0xD7) + - simple values (0xE0..0xF3, 0xF8) + - undefined (0xF7) + - half-precision floats (0xF9) + - break (0xFF) + + @param[in] j JSON value to serialize + @return CBOR serialization as byte vector + + @complexity Linear in the size of the JSON value @a j. + + @liveexample{The example shows the serialization of a JSON value to a byte + vector in CBOR format.,to_cbor} + + @sa http://cbor.io + @sa see @ref from_cbor(InputType&&, const bool, const bool, const cbor_tag_handler_t) for the + analogous deserialization + @sa see @ref to_msgpack(const basic_json&) for the related MessagePack format + @sa see @ref to_ubjson(const basic_json&, const bool, const bool) for the + related UBJSON format + + @since version 2.0.9; compact representation of floating-point numbers + since version 3.8.0 + */ + static std::vector to_cbor(const basic_json& j) + { + std::vector result; + to_cbor(j, result); + return result; + } + + static void to_cbor(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_cbor(j); + } + + static void to_cbor(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_cbor(j); + } + + /*! + @brief create a MessagePack serialization of a given JSON value + + Serializes a given JSON value @a j to a byte vector using the MessagePack + serialization format. MessagePack is a binary serialization format which + aims to be more compact than JSON itself, yet more efficient to parse. + + The library uses the following mapping from JSON values types to + MessagePack types according to the MessagePack specification: + + JSON value type | value/range | MessagePack type | first byte + --------------- | --------------------------------- | ---------------- | ---------- + null | `null` | nil | 0xC0 + boolean | `true` | true | 0xC3 + boolean | `false` | false | 0xC2 + number_integer | -9223372036854775808..-2147483649 | int64 | 0xD3 + number_integer | -2147483648..-32769 | int32 | 0xD2 + number_integer | -32768..-129 | int16 | 0xD1 + number_integer | -128..-33 | int8 | 0xD0 + number_integer | -32..-1 | negative fixint | 0xE0..0xFF + number_integer | 0..127 | positive fixint | 0x00..0x7F + number_integer | 128..255 | uint 8 | 0xCC + number_integer | 256..65535 | uint 16 | 0xCD + number_integer | 65536..4294967295 | uint 32 | 0xCE + number_integer | 4294967296..18446744073709551615 | uint 64 | 0xCF + number_unsigned | 0..127 | positive fixint | 0x00..0x7F + number_unsigned | 128..255 | uint 8 | 0xCC + number_unsigned | 256..65535 | uint 16 | 0xCD + number_unsigned | 65536..4294967295 | uint 32 | 0xCE + number_unsigned | 4294967296..18446744073709551615 | uint 64 | 0xCF + number_float | *any value representable by a float* | float 32 | 0xCA + number_float | *any value NOT representable by a float* | float 64 | 0xCB + string | *length*: 0..31 | fixstr | 0xA0..0xBF + string | *length*: 32..255 | str 8 | 0xD9 + string | *length*: 256..65535 | str 16 | 0xDA + string | *length*: 65536..4294967295 | str 32 | 0xDB + array | *size*: 0..15 | fixarray | 0x90..0x9F + array | *size*: 16..65535 | array 16 | 0xDC + array | *size*: 65536..4294967295 | array 32 | 0xDD + object | *size*: 0..15 | fix map | 0x80..0x8F + object | *size*: 16..65535 | map 16 | 0xDE + object | *size*: 65536..4294967295 | map 32 | 0xDF + binary | *size*: 0..255 | bin 8 | 0xC4 + binary | *size*: 256..65535 | bin 16 | 0xC5 + binary | *size*: 65536..4294967295 | bin 32 | 0xC6 + + @note The mapping is **complete** in the sense that any JSON value type + can be converted to a MessagePack value. + + @note The following values can **not** be converted to a MessagePack value: + - strings with more than 4294967295 bytes + - byte strings with more than 4294967295 bytes + - arrays with more than 4294967295 elements + - objects with more than 4294967295 elements + + @note Any MessagePack output created @ref to_msgpack can be successfully + parsed by @ref from_msgpack. + + @note If NaN or Infinity are stored inside a JSON number, they are + serialized properly. This behavior differs from the @ref dump() + function which serializes NaN or Infinity to `null`. + + @param[in] j JSON value to serialize + @return MessagePack serialization as byte vector + + @complexity Linear in the size of the JSON value @a j. + + @liveexample{The example shows the serialization of a JSON value to a byte + vector in MessagePack format.,to_msgpack} + + @sa http://msgpack.org + @sa see @ref from_msgpack for the analogous deserialization + @sa see @ref to_cbor(const basic_json& for the related CBOR format + @sa see @ref to_ubjson(const basic_json&, const bool, const bool) for the + related UBJSON format + + @since version 2.0.9 + */ + static std::vector to_msgpack(const basic_json& j) + { + std::vector result; + to_msgpack(j, result); + return result; + } + + static void to_msgpack(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_msgpack(j); + } + + static void to_msgpack(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_msgpack(j); + } + + /*! + @brief create a UBJSON serialization of a given JSON value + + Serializes a given JSON value @a j to a byte vector using the UBJSON + (Universal Binary JSON) serialization format. UBJSON aims to be more compact + than JSON itself, yet more efficient to parse. + + The library uses the following mapping from JSON values types to + UBJSON types according to the UBJSON specification: + + JSON value type | value/range | UBJSON type | marker + --------------- | --------------------------------- | ----------- | ------ + null | `null` | null | `Z` + boolean | `true` | true | `T` + boolean | `false` | false | `F` + number_integer | -9223372036854775808..-2147483649 | int64 | `L` + number_integer | -2147483648..-32769 | int32 | `l` + number_integer | -32768..-129 | int16 | `I` + number_integer | -128..127 | int8 | `i` + number_integer | 128..255 | uint8 | `U` + number_integer | 256..32767 | int16 | `I` + number_integer | 32768..2147483647 | int32 | `l` + number_integer | 2147483648..9223372036854775807 | int64 | `L` + number_unsigned | 0..127 | int8 | `i` + number_unsigned | 128..255 | uint8 | `U` + number_unsigned | 256..32767 | int16 | `I` + number_unsigned | 32768..2147483647 | int32 | `l` + number_unsigned | 2147483648..9223372036854775807 | int64 | `L` + number_unsigned | 2147483649..18446744073709551615 | high-precision | `H` + number_float | *any value* | float64 | `D` + string | *with shortest length indicator* | string | `S` + array | *see notes on optimized format* | array | `[` + object | *see notes on optimized format* | map | `{` + + @note The mapping is **complete** in the sense that any JSON value type + can be converted to a UBJSON value. + + @note The following values can **not** be converted to a UBJSON value: + - strings with more than 9223372036854775807 bytes (theoretical) + + @note The following markers are not used in the conversion: + - `Z`: no-op values are not created. + - `C`: single-byte strings are serialized with `S` markers. + + @note Any UBJSON output created @ref to_ubjson can be successfully parsed + by @ref from_ubjson. + + @note If NaN or Infinity are stored inside a JSON number, they are + serialized properly. This behavior differs from the @ref dump() + function which serializes NaN or Infinity to `null`. + + @note The optimized formats for containers are supported: Parameter + @a use_size adds size information to the beginning of a container and + removes the closing marker. Parameter @a use_type further checks + whether all elements of a container have the same type and adds the + type marker to the beginning of the container. The @a use_type + parameter must only be used together with @a use_size = true. Note + that @a use_size = true alone may result in larger representations - + the benefit of this parameter is that the receiving side is + immediately informed on the number of elements of the container. + + @note If the JSON data contains the binary type, the value stored is a list + of integers, as suggested by the UBJSON documentation. In particular, + this means that serialization and the deserialization of a JSON + containing binary values into UBJSON and back will result in a + different JSON object. + + @param[in] j JSON value to serialize + @param[in] use_size whether to add size annotations to container types + @param[in] use_type whether to add type annotations to container types + (must be combined with @a use_size = true) + @return UBJSON serialization as byte vector + + @complexity Linear in the size of the JSON value @a j. + + @liveexample{The example shows the serialization of a JSON value to a byte + vector in UBJSON format.,to_ubjson} + + @sa http://ubjson.org + @sa see @ref from_ubjson(InputType&&, const bool, const bool) for the + analogous deserialization + @sa see @ref to_cbor(const basic_json& for the related CBOR format + @sa see @ref to_msgpack(const basic_json&) for the related MessagePack format + + @since version 3.1.0 + */ + static std::vector to_ubjson(const basic_json& j, + const bool use_size = false, + const bool use_type = false) + { + std::vector result; + to_ubjson(j, result, use_size, use_type); + return result; + } + + static void to_ubjson(const basic_json& j, detail::output_adapter o, + const bool use_size = false, const bool use_type = false) + { + binary_writer(o).write_ubjson(j, use_size, use_type); + } + + static void to_ubjson(const basic_json& j, detail::output_adapter o, + const bool use_size = false, const bool use_type = false) + { + binary_writer(o).write_ubjson(j, use_size, use_type); + } + + + /*! + @brief Serializes the given JSON object `j` to BSON and returns a vector + containing the corresponding BSON-representation. + + BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are + stored as a single entity (a so-called document). + + The library uses the following mapping from JSON values types to BSON types: + + JSON value type | value/range | BSON type | marker + --------------- | --------------------------------- | ----------- | ------ + null | `null` | null | 0x0A + boolean | `true`, `false` | boolean | 0x08 + number_integer | -9223372036854775808..-2147483649 | int64 | 0x12 + number_integer | -2147483648..2147483647 | int32 | 0x10 + number_integer | 2147483648..9223372036854775807 | int64 | 0x12 + number_unsigned | 0..2147483647 | int32 | 0x10 + number_unsigned | 2147483648..9223372036854775807 | int64 | 0x12 + number_unsigned | 9223372036854775808..18446744073709551615| -- | -- + number_float | *any value* | double | 0x01 + string | *any value* | string | 0x02 + array | *any value* | document | 0x04 + object | *any value* | document | 0x03 + binary | *any value* | binary | 0x05 + + @warning The mapping is **incomplete**, since only JSON-objects (and things + contained therein) can be serialized to BSON. + Also, integers larger than 9223372036854775807 cannot be serialized to BSON, + and the keys may not contain U+0000, since they are serialized a + zero-terminated c-strings. + + @throw out_of_range.407 if `j.is_number_unsigned() && j.get() > 9223372036854775807` + @throw out_of_range.409 if a key in `j` contains a NULL (U+0000) + @throw type_error.317 if `!j.is_object()` + + @pre The input `j` is required to be an object: `j.is_object() == true`. + + @note Any BSON output created via @ref to_bson can be successfully parsed + by @ref from_bson. + + @param[in] j JSON value to serialize + @return BSON serialization as byte vector + + @complexity Linear in the size of the JSON value @a j. + + @liveexample{The example shows the serialization of a JSON value to a byte + vector in BSON format.,to_bson} + + @sa http://bsonspec.org/spec.html + @sa see @ref from_bson(detail::input_adapter&&, const bool strict) for the + analogous deserialization + @sa see @ref to_ubjson(const basic_json&, const bool, const bool) for the + related UBJSON format + @sa see @ref to_cbor(const basic_json&) for the related CBOR format + @sa see @ref to_msgpack(const basic_json&) for the related MessagePack format + */ + static std::vector to_bson(const basic_json& j) + { + std::vector result; + to_bson(j, result); + return result; + } + + /*! + @brief Serializes the given JSON object `j` to BSON and forwards the + corresponding BSON-representation to the given output_adapter `o`. + @param j The JSON object to convert to BSON. + @param o The output adapter that receives the binary BSON representation. + @pre The input `j` shall be an object: `j.is_object() == true` + @sa see @ref to_bson(const basic_json&) + */ + static void to_bson(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_bson(j); + } + + /*! + @copydoc to_bson(const basic_json&, detail::output_adapter) + */ + static void to_bson(const basic_json& j, detail::output_adapter o) + { + binary_writer(o).write_bson(j); + } + + + /*! + @brief create a JSON value from an input in CBOR format + + Deserializes a given input @a i to a JSON value using the CBOR (Concise + Binary Object Representation) serialization format. + + The library maps CBOR types to JSON value types as follows: + + CBOR type | JSON value type | first byte + ---------------------- | --------------- | ---------- + Integer | number_unsigned | 0x00..0x17 + Unsigned integer | number_unsigned | 0x18 + Unsigned integer | number_unsigned | 0x19 + Unsigned integer | number_unsigned | 0x1A + Unsigned integer | number_unsigned | 0x1B + Negative integer | number_integer | 0x20..0x37 + Negative integer | number_integer | 0x38 + Negative integer | number_integer | 0x39 + Negative integer | number_integer | 0x3A + Negative integer | number_integer | 0x3B + Byte string | binary | 0x40..0x57 + Byte string | binary | 0x58 + Byte string | binary | 0x59 + Byte string | binary | 0x5A + Byte string | binary | 0x5B + UTF-8 string | string | 0x60..0x77 + UTF-8 string | string | 0x78 + UTF-8 string | string | 0x79 + UTF-8 string | string | 0x7A + UTF-8 string | string | 0x7B + UTF-8 string | string | 0x7F + array | array | 0x80..0x97 + array | array | 0x98 + array | array | 0x99 + array | array | 0x9A + array | array | 0x9B + array | array | 0x9F + map | object | 0xA0..0xB7 + map | object | 0xB8 + map | object | 0xB9 + map | object | 0xBA + map | object | 0xBB + map | object | 0xBF + False | `false` | 0xF4 + True | `true` | 0xF5 + Null | `null` | 0xF6 + Half-Precision Float | number_float | 0xF9 + Single-Precision Float | number_float | 0xFA + Double-Precision Float | number_float | 0xFB + + @warning The mapping is **incomplete** in the sense that not all CBOR + types can be converted to a JSON value. The following CBOR types + are not supported and will yield parse errors (parse_error.112): + - date/time (0xC0..0xC1) + - bignum (0xC2..0xC3) + - decimal fraction (0xC4) + - bigfloat (0xC5) + - expected conversions (0xD5..0xD7) + - simple values (0xE0..0xF3, 0xF8) + - undefined (0xF7) + + @warning CBOR allows map keys of any type, whereas JSON only allows + strings as keys in object values. Therefore, CBOR maps with keys + other than UTF-8 strings are rejected (parse_error.113). + + @note Any CBOR output created @ref to_cbor can be successfully parsed by + @ref from_cbor. + + @param[in] i an input in CBOR format convertible to an input adapter + @param[in] strict whether to expect the input to be consumed until EOF + (true by default) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + @param[in] tag_handler how to treat CBOR tags (optional, error by default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.110 if the given input ends prematurely or the end of + file was not reached when @a strict was set to true + @throw parse_error.112 if unsupported features from CBOR were + used in the given input @a v or if the input is not valid CBOR + @throw parse_error.113 if a string was expected as map key, but not found + + @complexity Linear in the size of the input @a i. + + @liveexample{The example shows the deserialization of a byte vector in CBOR + format to a JSON value.,from_cbor} + + @sa http://cbor.io + @sa see @ref to_cbor(const basic_json&) for the analogous serialization + @sa see @ref from_msgpack(InputType&&, const bool, const bool) for the + related MessagePack format + @sa see @ref from_ubjson(InputType&&, const bool, const bool) for the + related UBJSON format + + @since version 2.0.9; parameter @a start_index since 2.1.1; changed to + consume input adapters, removed start_index parameter, and added + @a strict parameter since 3.0.0; added @a allow_exceptions parameter + since 3.2.0; added @a tag_handler parameter since 3.9.0. + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_cbor(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); + return res ? result : basic_json(value_t::discarded); + } + + /*! + @copydoc from_cbor(InputType&&, const bool, const bool, const cbor_tag_handler_t) + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_cbor(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) + static basic_json from_cbor(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + return from_cbor(ptr, ptr + len, strict, allow_exceptions, tag_handler); + } + + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) + static basic_json from_cbor(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true, + const cbor_tag_handler_t tag_handler = cbor_tag_handler_t::error) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict, tag_handler); + return res ? result : basic_json(value_t::discarded); + } + + /*! + @brief create a JSON value from an input in MessagePack format + + Deserializes a given input @a i to a JSON value using the MessagePack + serialization format. + + The library maps MessagePack types to JSON value types as follows: + + MessagePack type | JSON value type | first byte + ---------------- | --------------- | ---------- + positive fixint | number_unsigned | 0x00..0x7F + fixmap | object | 0x80..0x8F + fixarray | array | 0x90..0x9F + fixstr | string | 0xA0..0xBF + nil | `null` | 0xC0 + false | `false` | 0xC2 + true | `true` | 0xC3 + float 32 | number_float | 0xCA + float 64 | number_float | 0xCB + uint 8 | number_unsigned | 0xCC + uint 16 | number_unsigned | 0xCD + uint 32 | number_unsigned | 0xCE + uint 64 | number_unsigned | 0xCF + int 8 | number_integer | 0xD0 + int 16 | number_integer | 0xD1 + int 32 | number_integer | 0xD2 + int 64 | number_integer | 0xD3 + str 8 | string | 0xD9 + str 16 | string | 0xDA + str 32 | string | 0xDB + array 16 | array | 0xDC + array 32 | array | 0xDD + map 16 | object | 0xDE + map 32 | object | 0xDF + bin 8 | binary | 0xC4 + bin 16 | binary | 0xC5 + bin 32 | binary | 0xC6 + ext 8 | binary | 0xC7 + ext 16 | binary | 0xC8 + ext 32 | binary | 0xC9 + fixext 1 | binary | 0xD4 + fixext 2 | binary | 0xD5 + fixext 4 | binary | 0xD6 + fixext 8 | binary | 0xD7 + fixext 16 | binary | 0xD8 + negative fixint | number_integer | 0xE0-0xFF + + @note Any MessagePack output created @ref to_msgpack can be successfully + parsed by @ref from_msgpack. + + @param[in] i an input in MessagePack format convertible to an input + adapter + @param[in] strict whether to expect the input to be consumed until EOF + (true by default) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.110 if the given input ends prematurely or the end of + file was not reached when @a strict was set to true + @throw parse_error.112 if unsupported features from MessagePack were + used in the given input @a i or if the input is not valid MessagePack + @throw parse_error.113 if a string was expected as map key, but not found + + @complexity Linear in the size of the input @a i. + + @liveexample{The example shows the deserialization of a byte vector in + MessagePack format to a JSON value.,from_msgpack} + + @sa http://msgpack.org + @sa see @ref to_msgpack(const basic_json&) for the analogous serialization + @sa see @ref from_cbor(InputType&&, const bool, const bool, const cbor_tag_handler_t) for the + related CBOR format + @sa see @ref from_ubjson(InputType&&, const bool, const bool) for + the related UBJSON format + @sa see @ref from_bson(InputType&&, const bool, const bool) for + the related BSON format + + @since version 2.0.9; parameter @a start_index since 2.1.1; changed to + consume input adapters, removed start_index parameter, and added + @a strict parameter since 3.0.0; added @a allow_exceptions parameter + since 3.2.0 + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_msgpack(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /*! + @copydoc from_msgpack(InputType&&, const bool, const bool) + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_msgpack(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) + static basic_json from_msgpack(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_msgpack(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) + static basic_json from_msgpack(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + + /*! + @brief create a JSON value from an input in UBJSON format + + Deserializes a given input @a i to a JSON value using the UBJSON (Universal + Binary JSON) serialization format. + + The library maps UBJSON types to JSON value types as follows: + + UBJSON type | JSON value type | marker + ----------- | --------------------------------------- | ------ + no-op | *no value, next value is read* | `N` + null | `null` | `Z` + false | `false` | `F` + true | `true` | `T` + float32 | number_float | `d` + float64 | number_float | `D` + uint8 | number_unsigned | `U` + int8 | number_integer | `i` + int16 | number_integer | `I` + int32 | number_integer | `l` + int64 | number_integer | `L` + high-precision number | number_integer, number_unsigned, or number_float - depends on number string | 'H' + string | string | `S` + char | string | `C` + array | array (optimized values are supported) | `[` + object | object (optimized values are supported) | `{` + + @note The mapping is **complete** in the sense that any UBJSON value can + be converted to a JSON value. + + @param[in] i an input in UBJSON format convertible to an input adapter + @param[in] strict whether to expect the input to be consumed until EOF + (true by default) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.110 if the given input ends prematurely or the end of + file was not reached when @a strict was set to true + @throw parse_error.112 if a parse error occurs + @throw parse_error.113 if a string could not be parsed successfully + + @complexity Linear in the size of the input @a i. + + @liveexample{The example shows the deserialization of a byte vector in + UBJSON format to a JSON value.,from_ubjson} + + @sa http://ubjson.org + @sa see @ref to_ubjson(const basic_json&, const bool, const bool) for the + analogous serialization + @sa see @ref from_cbor(InputType&&, const bool, const bool, const cbor_tag_handler_t) for the + related CBOR format + @sa see @ref from_msgpack(InputType&&, const bool, const bool) for + the related MessagePack format + @sa see @ref from_bson(InputType&&, const bool, const bool) for + the related BSON format + + @since version 3.1.0; added @a allow_exceptions parameter since 3.2.0 + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_ubjson(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /*! + @copydoc from_ubjson(InputType&&, const bool, const bool) + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_ubjson(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) + static basic_json from_ubjson(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_ubjson(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) + static basic_json from_ubjson(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + + /*! + @brief Create a JSON value from an input in BSON format + + Deserializes a given input @a i to a JSON value using the BSON (Binary JSON) + serialization format. + + The library maps BSON record types to JSON value types as follows: + + BSON type | BSON marker byte | JSON value type + --------------- | ---------------- | --------------------------- + double | 0x01 | number_float + string | 0x02 | string + document | 0x03 | object + array | 0x04 | array + binary | 0x05 | binary + undefined | 0x06 | still unsupported + ObjectId | 0x07 | still unsupported + boolean | 0x08 | boolean + UTC Date-Time | 0x09 | still unsupported + null | 0x0A | null + Regular Expr. | 0x0B | still unsupported + DB Pointer | 0x0C | still unsupported + JavaScript Code | 0x0D | still unsupported + Symbol | 0x0E | still unsupported + JavaScript Code | 0x0F | still unsupported + int32 | 0x10 | number_integer + Timestamp | 0x11 | still unsupported + 128-bit decimal float | 0x13 | still unsupported + Max Key | 0x7F | still unsupported + Min Key | 0xFF | still unsupported + + @warning The mapping is **incomplete**. The unsupported mappings + are indicated in the table above. + + @param[in] i an input in BSON format convertible to an input adapter + @param[in] strict whether to expect the input to be consumed until EOF + (true by default) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.114 if an unsupported BSON record type is encountered + + @complexity Linear in the size of the input @a i. + + @liveexample{The example shows the deserialization of a byte vector in + BSON format to a JSON value.,from_bson} + + @sa http://bsonspec.org/spec.html + @sa see @ref to_bson(const basic_json&) for the analogous serialization + @sa see @ref from_cbor(InputType&&, const bool, const bool, const cbor_tag_handler_t) for the + related CBOR format + @sa see @ref from_msgpack(InputType&&, const bool, const bool) for + the related MessagePack format + @sa see @ref from_ubjson(InputType&&, const bool, const bool) for the + related UBJSON format + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bson(InputType&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + /*! + @copydoc from_bson(InputType&&, const bool, const bool) + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bson(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) + static basic_json from_bson(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_bson(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) + static basic_json from_bson(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + // NOLINTNEXTLINE(hicpp-move-const-arg,performance-move-const-arg) + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + /// @} + + ////////////////////////// + // JSON Pointer support // + ////////////////////////// + + /// @name JSON Pointer functions + /// @{ + + /*! + @brief access specified element via JSON Pointer + + Uses a JSON pointer to retrieve a reference to the respective JSON value. + No bound checking is performed. Similar to @ref operator[](const typename + object_t::key_type&), `null` values are created in arrays and objects if + necessary. + + In particular: + - If the JSON pointer points to an object key that does not exist, it + is created an filled with a `null` value before a reference to it + is returned. + - If the JSON pointer points to an array index that does not exist, it + is created an filled with a `null` value before a reference to it + is returned. All indices between the current maximum and the given + index are also filled with `null`. + - The special value `-` is treated as a synonym for the index past the + end. + + @param[in] ptr a JSON pointer + + @return reference to the element pointed to by @a ptr + + @complexity Constant. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.404 if the JSON pointer can not be resolved + + @liveexample{The behavior is shown in the example.,operatorjson_pointer} + + @since version 2.0.0 + */ + reference operator[](const json_pointer& ptr) + { + return ptr.get_unchecked(this); + } + + /*! + @brief access specified element via JSON Pointer + + Uses a JSON pointer to retrieve a reference to the respective JSON value. + No bound checking is performed. The function does not change the JSON + value; no `null` values are created. In particular, the special value + `-` yields an exception. + + @param[in] ptr JSON pointer to the desired element + + @return const reference to the element pointed to by @a ptr + + @complexity Constant. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + @throw out_of_range.402 if the array index '-' is used + @throw out_of_range.404 if the JSON pointer can not be resolved + + @liveexample{The behavior is shown in the example.,operatorjson_pointer_const} + + @since version 2.0.0 + */ + const_reference operator[](const json_pointer& ptr) const + { + return ptr.get_unchecked(this); + } + + /*! + @brief access specified element via JSON Pointer + + Returns a reference to the element at with specified JSON pointer @a ptr, + with bounds checking. + + @param[in] ptr JSON pointer to the desired element + + @return reference to the element pointed to by @a ptr + + @throw parse_error.106 if an array index in the passed JSON pointer @a ptr + begins with '0'. See example below. + + @throw parse_error.109 if an array index in the passed JSON pointer @a ptr + is not a number. See example below. + + @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr + is out of range. See example below. + + @throw out_of_range.402 if the array index '-' is used in the passed JSON + pointer @a ptr. As `at` provides checked access (and no elements are + implicitly inserted), the index '-' is always invalid. See example below. + + @throw out_of_range.403 if the JSON pointer describes a key of an object + which cannot be found. See example below. + + @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. + See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @since version 2.0.0 + + @liveexample{The behavior is shown in the example.,at_json_pointer} + */ + reference at(const json_pointer& ptr) + { + return ptr.get_checked(this); + } + + /*! + @brief access specified element via JSON Pointer + + Returns a const reference to the element at with specified JSON pointer @a + ptr, with bounds checking. + + @param[in] ptr JSON pointer to the desired element + + @return reference to the element pointed to by @a ptr + + @throw parse_error.106 if an array index in the passed JSON pointer @a ptr + begins with '0'. See example below. + + @throw parse_error.109 if an array index in the passed JSON pointer @a ptr + is not a number. See example below. + + @throw out_of_range.401 if an array index in the passed JSON pointer @a ptr + is out of range. See example below. + + @throw out_of_range.402 if the array index '-' is used in the passed JSON + pointer @a ptr. As `at` provides checked access (and no elements are + implicitly inserted), the index '-' is always invalid. See example below. + + @throw out_of_range.403 if the JSON pointer describes a key of an object + which cannot be found. See example below. + + @throw out_of_range.404 if the JSON pointer @a ptr can not be resolved. + See example below. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes in the JSON value. + + @complexity Constant. + + @since version 2.0.0 + + @liveexample{The behavior is shown in the example.,at_json_pointer_const} + */ + const_reference at(const json_pointer& ptr) const + { + return ptr.get_checked(this); + } + + /*! + @brief return flattened JSON value + + The function creates a JSON object whose keys are JSON pointers (see [RFC + 6901](https://tools.ietf.org/html/rfc6901)) and whose values are all + primitive. The original JSON value can be restored using the @ref + unflatten() function. + + @return an object that maps JSON pointers to primitive values + + @note Empty objects and arrays are flattened to `null` and will not be + reconstructed correctly by the @ref unflatten() function. + + @complexity Linear in the size the JSON value. + + @liveexample{The following code shows how a JSON object is flattened to an + object whose keys consist of JSON pointers.,flatten} + + @sa see @ref unflatten() for the reverse function + + @since version 2.0.0 + */ + basic_json flatten() const + { + basic_json result(value_t::object); + json_pointer::flatten("", *this, result); + return result; + } + + /*! + @brief unflatten a previously flattened JSON value + + The function restores the arbitrary nesting of a JSON value that has been + flattened before using the @ref flatten() function. The JSON value must + meet certain constraints: + 1. The value must be an object. + 2. The keys must be JSON pointers (see + [RFC 6901](https://tools.ietf.org/html/rfc6901)) + 3. The mapped values must be primitive JSON types. + + @return the original JSON from a flattened version + + @note Empty objects and arrays are flattened by @ref flatten() to `null` + values and can not unflattened to their original type. Apart from + this example, for a JSON value `j`, the following is always true: + `j == j.flatten().unflatten()`. + + @complexity Linear in the size the JSON value. + + @throw type_error.314 if value is not an object + @throw type_error.315 if object values are not primitive + + @liveexample{The following code shows how a flattened JSON object is + unflattened into the original nested JSON object.,unflatten} + + @sa see @ref flatten() for the reverse function + + @since version 2.0.0 + */ + basic_json unflatten() const + { + return json_pointer::unflatten(*this); + } + + /// @} + + ////////////////////////// + // JSON Patch functions // + ////////////////////////// + + /// @name JSON Patch functions + /// @{ + + /*! + @brief applies a JSON patch + + [JSON Patch](http://jsonpatch.com) defines a JSON document structure for + expressing a sequence of operations to apply to a JSON) document. With + this function, a JSON Patch is applied to the current JSON value by + executing all operations from the patch. + + @param[in] json_patch JSON patch document + @return patched document + + @note The application of a patch is atomic: Either all operations succeed + and the patched document is returned or an exception is thrown. In + any case, the original value is not changed: the patch is applied + to a copy of the value. + + @throw parse_error.104 if the JSON patch does not consist of an array of + objects + + @throw parse_error.105 if the JSON patch is malformed (e.g., mandatory + attributes are missing); example: `"operation add must have member path"` + + @throw out_of_range.401 if an array index is out of range. + + @throw out_of_range.403 if a JSON pointer inside the patch could not be + resolved successfully in the current JSON value; example: `"key baz not + found"` + + @throw out_of_range.405 if JSON pointer has no parent ("add", "remove", + "move") + + @throw other_error.501 if "test" operation was unsuccessful + + @complexity Linear in the size of the JSON value and the length of the + JSON patch. As usually only a fraction of the JSON value is affected by + the patch, the complexity can usually be neglected. + + @liveexample{The following code shows how a JSON patch is applied to a + value.,patch} + + @sa see @ref diff -- create a JSON patch by comparing two JSON values + + @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) + @sa [RFC 6901 (JSON Pointer)](https://tools.ietf.org/html/rfc6901) + + @since version 2.0.0 + */ + basic_json patch(const basic_json& json_patch) const + { + // make a working copy to apply the patch to + basic_json result = *this; + + // the valid JSON Patch operations + enum class patch_operations {add, remove, replace, move, copy, test, invalid}; + + const auto get_op = [](const std::string & op) + { + if (op == "add") + { + return patch_operations::add; + } + if (op == "remove") + { + return patch_operations::remove; + } + if (op == "replace") + { + return patch_operations::replace; + } + if (op == "move") + { + return patch_operations::move; + } + if (op == "copy") + { + return patch_operations::copy; + } + if (op == "test") + { + return patch_operations::test; + } + + return patch_operations::invalid; + }; + + // wrapper for "add" operation; add value at ptr + const auto operation_add = [&result](json_pointer & ptr, basic_json val) + { + // adding to the root of the target document means replacing it + if (ptr.empty()) + { + result = val; + return; + } + + // make sure the top element of the pointer exists + json_pointer top_pointer = ptr.top(); + if (top_pointer != ptr) + { + result.at(top_pointer); + } + + // get reference to parent of JSON pointer ptr + const auto last_path = ptr.back(); + ptr.pop_back(); + basic_json& parent = result[ptr]; + + switch (parent.m_type) + { + case value_t::null: + case value_t::object: + { + // use operator[] to add value + parent[last_path] = val; + break; + } + + case value_t::array: + { + if (last_path == "-") + { + // special case: append to back + parent.push_back(val); + } + else + { + const auto idx = json_pointer::array_index(last_path); + if (JSON_HEDLEY_UNLIKELY(idx > parent.size())) + { + // avoid undefined behavior + JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range", parent)); + } + + // default case: insert add offset + parent.insert(parent.begin() + static_cast(idx), val); + } + break; + } + + // if there exists a parent it cannot be primitive + case value_t::string: // LCOV_EXCL_LINE + case value_t::boolean: // LCOV_EXCL_LINE + case value_t::number_integer: // LCOV_EXCL_LINE + case value_t::number_unsigned: // LCOV_EXCL_LINE + case value_t::number_float: // LCOV_EXCL_LINE + case value_t::binary: // LCOV_EXCL_LINE + case value_t::discarded: // LCOV_EXCL_LINE + default: // LCOV_EXCL_LINE + JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE + } + }; + + // wrapper for "remove" operation; remove value at ptr + const auto operation_remove = [this, &result](json_pointer & ptr) + { + // get reference to parent of JSON pointer ptr + const auto last_path = ptr.back(); + ptr.pop_back(); + basic_json& parent = result.at(ptr); + + // remove child + if (parent.is_object()) + { + // perform range check + auto it = parent.find(last_path); + if (JSON_HEDLEY_LIKELY(it != parent.end())) + { + parent.erase(it); + } + else + { + JSON_THROW(out_of_range::create(403, "key '" + last_path + "' not found", *this)); + } + } + else if (parent.is_array()) + { + // note erase performs range check + parent.erase(json_pointer::array_index(last_path)); + } + }; + + // type check: top level value must be an array + if (JSON_HEDLEY_UNLIKELY(!json_patch.is_array())) + { + JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects", json_patch)); + } + + // iterate and apply the operations + for (const auto& val : json_patch) + { + // wrapper to get a value for an operation + const auto get_value = [&val](const std::string & op, + const std::string & member, + bool string_type) -> basic_json & + { + // find value + auto it = val.m_value.object->find(member); + + // context-sensitive error message + const auto error_msg = (op == "op") ? "operation" : "operation '" + op + "'"; + + // check if desired value is present + if (JSON_HEDLEY_UNLIKELY(it == val.m_value.object->end())) + { + // NOLINTNEXTLINE(performance-inefficient-string-concatenation) + JSON_THROW(parse_error::create(105, 0, error_msg + " must have member '" + member + "'", val)); + } + + // check if result is of type string + if (JSON_HEDLEY_UNLIKELY(string_type && !it->second.is_string())) + { + // NOLINTNEXTLINE(performance-inefficient-string-concatenation) + JSON_THROW(parse_error::create(105, 0, error_msg + " must have string member '" + member + "'", val)); + } + + // no error: return value + return it->second; + }; + + // type check: every element of the array must be an object + if (JSON_HEDLEY_UNLIKELY(!val.is_object())) + { + JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects", val)); + } + + // collect mandatory members + const auto op = get_value("op", "op", true).template get(); + const auto path = get_value(op, "path", true).template get(); + json_pointer ptr(path); + + switch (get_op(op)) + { + case patch_operations::add: + { + operation_add(ptr, get_value("add", "value", false)); + break; + } + + case patch_operations::remove: + { + operation_remove(ptr); + break; + } + + case patch_operations::replace: + { + // the "path" location must exist - use at() + result.at(ptr) = get_value("replace", "value", false); + break; + } + + case patch_operations::move: + { + const auto from_path = get_value("move", "from", true).template get(); + json_pointer from_ptr(from_path); + + // the "from" location must exist - use at() + basic_json v = result.at(from_ptr); + + // The move operation is functionally identical to a + // "remove" operation on the "from" location, followed + // immediately by an "add" operation at the target + // location with the value that was just removed. + operation_remove(from_ptr); + operation_add(ptr, v); + break; + } + + case patch_operations::copy: + { + const auto from_path = get_value("copy", "from", true).template get(); + const json_pointer from_ptr(from_path); + + // the "from" location must exist - use at() + basic_json v = result.at(from_ptr); + + // The copy is functionally identical to an "add" + // operation at the target location using the value + // specified in the "from" member. + operation_add(ptr, v); + break; + } + + case patch_operations::test: + { + bool success = false; + JSON_TRY + { + // check if "value" matches the one at "path" + // the "path" location must exist - use at() + success = (result.at(ptr) == get_value("test", "value", false)); + } + JSON_INTERNAL_CATCH (out_of_range&) + { + // ignore out of range errors: success remains false + } + + // throw an exception if test fails + if (JSON_HEDLEY_UNLIKELY(!success)) + { + JSON_THROW(other_error::create(501, "unsuccessful: " + val.dump(), val)); + } + + break; + } + + case patch_operations::invalid: + default: + { + // op must be "add", "remove", "replace", "move", "copy", or + // "test" + JSON_THROW(parse_error::create(105, 0, "operation value '" + op + "' is invalid", val)); + } + } + } + + return result; + } + + /*! + @brief creates a diff as a JSON patch + + Creates a [JSON Patch](http://jsonpatch.com) so that value @a source can + be changed into the value @a target by calling @ref patch function. + + @invariant For two JSON values @a source and @a target, the following code + yields always `true`: + @code {.cpp} + source.patch(diff(source, target)) == target; + @endcode + + @note Currently, only `remove`, `add`, and `replace` operations are + generated. + + @param[in] source JSON value to compare from + @param[in] target JSON value to compare against + @param[in] path helper value to create JSON pointers + + @return a JSON patch to convert the @a source to @a target + + @complexity Linear in the lengths of @a source and @a target. + + @liveexample{The following code shows how a JSON patch is created as a + diff for two JSON values.,diff} + + @sa see @ref patch -- apply a JSON patch + @sa see @ref merge_patch -- apply a JSON Merge Patch + + @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) + + @since version 2.0.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json diff(const basic_json& source, const basic_json& target, + const std::string& path = "") + { + // the patch + basic_json result(value_t::array); + + // if the values are the same, return empty patch + if (source == target) + { + return result; + } + + if (source.type() != target.type()) + { + // different types: replace value + result.push_back( + { + {"op", "replace"}, {"path", path}, {"value", target} + }); + return result; + } + + switch (source.type()) + { + case value_t::array: + { + // first pass: traverse common elements + std::size_t i = 0; + while (i < source.size() && i < target.size()) + { + // recursive call to compare array values at index i + auto temp_diff = diff(source[i], target[i], path + "/" + std::to_string(i)); + result.insert(result.end(), temp_diff.begin(), temp_diff.end()); + ++i; + } + + // i now reached the end of at least one array + // in a second pass, traverse the remaining elements + + // remove my remaining elements + const auto end_index = static_cast(result.size()); + while (i < source.size()) + { + // add operations in reverse order to avoid invalid + // indices + result.insert(result.begin() + end_index, object( + { + {"op", "remove"}, + {"path", path + "/" + std::to_string(i)} + })); + ++i; + } + + // add other remaining elements + while (i < target.size()) + { + result.push_back( + { + {"op", "add"}, + {"path", path + "/-"}, + {"value", target[i]} + }); + ++i; + } + + break; + } + + case value_t::object: + { + // first pass: traverse this object's elements + for (auto it = source.cbegin(); it != source.cend(); ++it) + { + // escape the key name to be used in a JSON patch + const auto path_key = path + "/" + detail::escape(it.key()); + + if (target.find(it.key()) != target.end()) + { + // recursive call to compare object values at key it + auto temp_diff = diff(it.value(), target[it.key()], path_key); + result.insert(result.end(), temp_diff.begin(), temp_diff.end()); + } + else + { + // found a key that is not in o -> remove it + result.push_back(object( + { + {"op", "remove"}, {"path", path_key} + })); + } + } + + // second pass: traverse other object's elements + for (auto it = target.cbegin(); it != target.cend(); ++it) + { + if (source.find(it.key()) == source.end()) + { + // found a key that is not in this -> add it + const auto path_key = path + "/" + detail::escape(it.key()); + result.push_back( + { + {"op", "add"}, {"path", path_key}, + {"value", it.value()} + }); + } + } + + break; + } + + case value_t::null: + case value_t::string: + case value_t::boolean: + case value_t::number_integer: + case value_t::number_unsigned: + case value_t::number_float: + case value_t::binary: + case value_t::discarded: + default: + { + // both primitive type: replace value + result.push_back( + { + {"op", "replace"}, {"path", path}, {"value", target} + }); + break; + } + } + + return result; + } + + /// @} + + //////////////////////////////// + // JSON Merge Patch functions // + //////////////////////////////// + + /// @name JSON Merge Patch functions + /// @{ + + /*! + @brief applies a JSON Merge Patch + + The merge patch format is primarily intended for use with the HTTP PATCH + method as a means of describing a set of modifications to a target + resource's content. This function applies a merge patch to the current + JSON value. + + The function implements the following algorithm from Section 2 of + [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396): + + ``` + define MergePatch(Target, Patch): + if Patch is an Object: + if Target is not an Object: + Target = {} // Ignore the contents and set it to an empty Object + for each Name/Value pair in Patch: + if Value is null: + if Name exists in Target: + remove the Name/Value pair from Target + else: + Target[Name] = MergePatch(Target[Name], Value) + return Target + else: + return Patch + ``` + + Thereby, `Target` is the current object; that is, the patch is applied to + the current value. + + @param[in] apply_patch the patch to apply + + @complexity Linear in the lengths of @a patch. + + @liveexample{The following code shows how a JSON Merge Patch is applied to + a JSON document.,merge_patch} + + @sa see @ref patch -- apply a JSON patch + @sa [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396) + + @since version 3.0.0 + */ + void merge_patch(const basic_json& apply_patch) + { + if (apply_patch.is_object()) + { + if (!is_object()) + { + *this = object(); + } + for (auto it = apply_patch.begin(); it != apply_patch.end(); ++it) + { + if (it.value().is_null()) + { + erase(it.key()); + } + else + { + operator[](it.key()).merge_patch(it.value()); + } + } + } + else + { + *this = apply_patch; + } + } + + /// @} +}; + +/*! +@brief user-defined to_string function for JSON values + +This function implements a user-defined to_string for JSON objects. + +@param[in] j a JSON object +@return a std::string object +*/ + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +std::string to_string(const NLOHMANN_BASIC_JSON_TPL& j) +{ + return j.dump(); +} +} // namespace nlohmann + +/////////////////////// +// nonmember support // +/////////////////////// + +// specialization of std::swap, and std::hash +namespace std +{ + +/// hash value for JSON objects +template<> +struct hash +{ + /*! + @brief return a hash value for a JSON object + + @since version 1.0.0 + */ + std::size_t operator()(const nlohmann::json& j) const + { + return nlohmann::detail::hash(j); + } +}; + +/// specialization for std::less +/// @note: do not remove the space after '<', +/// see https://github.com/nlohmann/json/pull/679 +template<> +struct less<::nlohmann::detail::value_t> +{ + /*! + @brief compare two value_t enum values + @since version 3.0.0 + */ + bool operator()(nlohmann::detail::value_t lhs, + nlohmann::detail::value_t rhs) const noexcept + { + return nlohmann::detail::operator<(lhs, rhs); + } +}; + +// C++20 prohibit function specialization in the std namespace. +#ifndef JSON_HAS_CPP_20 + +/*! +@brief exchanges the values of two JSON objects + +@since version 1.0.0 +*/ +template<> +inline void swap(nlohmann::json& j1, nlohmann::json& j2) noexcept( // NOLINT(readability-inconsistent-declaration-parameter-name) + is_nothrow_move_constructible::value&& // NOLINT(misc-redundant-expression) + is_nothrow_move_assignable::value + ) +{ + j1.swap(j2); +} + +#endif + +} // namespace std + +/*! +@brief user-defined string literal for JSON values + +This operator implements a user-defined string literal for JSON objects. It +can be used by adding `"_json"` to a string literal and returns a JSON object +if no parse error occurred. + +@param[in] s a string representation of a JSON object +@param[in] n the length of string @a s +@return a JSON object + +@since version 1.0.0 +*/ +JSON_HEDLEY_NON_NULL(1) +inline nlohmann::json operator "" _json(const char* s, std::size_t n) +{ + return nlohmann::json::parse(s, s + n); +} + +/*! +@brief user-defined string literal for JSON pointer + +This operator implements a user-defined string literal for JSON Pointers. It +can be used by adding `"_json_pointer"` to a string literal and returns a JSON pointer +object if no parse error occurred. + +@param[in] s a string representation of a JSON Pointer +@param[in] n the length of string @a s +@return a JSON pointer object + +@since version 2.0.0 +*/ +JSON_HEDLEY_NON_NULL(1) +inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n) +{ + return nlohmann::json::json_pointer(std::string(s, n)); +} + +// #include + + +// restore clang diagnostic settings +#if defined(__clang__) + #pragma clang diagnostic pop +#endif + +// clean up +#undef JSON_ASSERT +#undef JSON_INTERNAL_CATCH +#undef JSON_CATCH +#undef JSON_THROW +#undef JSON_TRY +#undef JSON_PRIVATE_UNLESS_TESTED +#undef JSON_HAS_CPP_11 +#undef JSON_HAS_CPP_14 +#undef JSON_HAS_CPP_17 +#undef JSON_HAS_CPP_20 +#undef NLOHMANN_BASIC_JSON_TPL_DECLARATION +#undef NLOHMANN_BASIC_JSON_TPL +#undef JSON_EXPLICIT +#undef NLOHMANN_CAN_CALL_STD_FUNC_IMPL + +// #include + + +#undef JSON_HEDLEY_ALWAYS_INLINE +#undef JSON_HEDLEY_ARM_VERSION +#undef JSON_HEDLEY_ARM_VERSION_CHECK +#undef JSON_HEDLEY_ARRAY_PARAM +#undef JSON_HEDLEY_ASSUME +#undef JSON_HEDLEY_BEGIN_C_DECLS +#undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#undef JSON_HEDLEY_CLANG_HAS_FEATURE +#undef JSON_HEDLEY_CLANG_HAS_WARNING +#undef JSON_HEDLEY_COMPCERT_VERSION +#undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#undef JSON_HEDLEY_CONCAT +#undef JSON_HEDLEY_CONCAT3 +#undef JSON_HEDLEY_CONCAT3_EX +#undef JSON_HEDLEY_CONCAT_EX +#undef JSON_HEDLEY_CONST +#undef JSON_HEDLEY_CONSTEXPR +#undef JSON_HEDLEY_CONST_CAST +#undef JSON_HEDLEY_CPP_CAST +#undef JSON_HEDLEY_CRAY_VERSION +#undef JSON_HEDLEY_CRAY_VERSION_CHECK +#undef JSON_HEDLEY_C_DECL +#undef JSON_HEDLEY_DEPRECATED +#undef JSON_HEDLEY_DEPRECATED_FOR +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#undef JSON_HEDLEY_DIAGNOSTIC_POP +#undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#undef JSON_HEDLEY_DMC_VERSION +#undef JSON_HEDLEY_DMC_VERSION_CHECK +#undef JSON_HEDLEY_EMPTY_BASES +#undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#undef JSON_HEDLEY_END_C_DECLS +#undef JSON_HEDLEY_FLAGS +#undef JSON_HEDLEY_FLAGS_CAST +#undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_BUILTIN +#undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_EXTENSION +#undef JSON_HEDLEY_GCC_HAS_FEATURE +#undef JSON_HEDLEY_GCC_HAS_WARNING +#undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#undef JSON_HEDLEY_GCC_VERSION +#undef JSON_HEDLEY_GCC_VERSION_CHECK +#undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#undef JSON_HEDLEY_GNUC_HAS_FEATURE +#undef JSON_HEDLEY_GNUC_HAS_WARNING +#undef JSON_HEDLEY_GNUC_VERSION +#undef JSON_HEDLEY_GNUC_VERSION_CHECK +#undef JSON_HEDLEY_HAS_ATTRIBUTE +#undef JSON_HEDLEY_HAS_BUILTIN +#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_HAS_EXTENSION +#undef JSON_HEDLEY_HAS_FEATURE +#undef JSON_HEDLEY_HAS_WARNING +#undef JSON_HEDLEY_IAR_VERSION +#undef JSON_HEDLEY_IAR_VERSION_CHECK +#undef JSON_HEDLEY_IBM_VERSION +#undef JSON_HEDLEY_IBM_VERSION_CHECK +#undef JSON_HEDLEY_IMPORT +#undef JSON_HEDLEY_INLINE +#undef JSON_HEDLEY_INTEL_CL_VERSION +#undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#undef JSON_HEDLEY_INTEL_VERSION +#undef JSON_HEDLEY_INTEL_VERSION_CHECK +#undef JSON_HEDLEY_IS_CONSTANT +#undef JSON_HEDLEY_IS_CONSTEXPR_ +#undef JSON_HEDLEY_LIKELY +#undef JSON_HEDLEY_MALLOC +#undef JSON_HEDLEY_MCST_LCC_VERSION +#undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#undef JSON_HEDLEY_MESSAGE +#undef JSON_HEDLEY_MSVC_VERSION +#undef JSON_HEDLEY_MSVC_VERSION_CHECK +#undef JSON_HEDLEY_NEVER_INLINE +#undef JSON_HEDLEY_NON_NULL +#undef JSON_HEDLEY_NO_ESCAPE +#undef JSON_HEDLEY_NO_RETURN +#undef JSON_HEDLEY_NO_THROW +#undef JSON_HEDLEY_NULL +#undef JSON_HEDLEY_PELLES_VERSION +#undef JSON_HEDLEY_PELLES_VERSION_CHECK +#undef JSON_HEDLEY_PGI_VERSION +#undef JSON_HEDLEY_PGI_VERSION_CHECK +#undef JSON_HEDLEY_PREDICT +#undef JSON_HEDLEY_PRINTF_FORMAT +#undef JSON_HEDLEY_PRIVATE +#undef JSON_HEDLEY_PUBLIC +#undef JSON_HEDLEY_PURE +#undef JSON_HEDLEY_REINTERPRET_CAST +#undef JSON_HEDLEY_REQUIRE +#undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#undef JSON_HEDLEY_REQUIRE_MSG +#undef JSON_HEDLEY_RESTRICT +#undef JSON_HEDLEY_RETURNS_NON_NULL +#undef JSON_HEDLEY_SENTINEL +#undef JSON_HEDLEY_STATIC_ASSERT +#undef JSON_HEDLEY_STATIC_CAST +#undef JSON_HEDLEY_STRINGIFY +#undef JSON_HEDLEY_STRINGIFY_EX +#undef JSON_HEDLEY_SUNPRO_VERSION +#undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#undef JSON_HEDLEY_TINYC_VERSION +#undef JSON_HEDLEY_TINYC_VERSION_CHECK +#undef JSON_HEDLEY_TI_ARMCL_VERSION +#undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL2000_VERSION +#undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL430_VERSION +#undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL6X_VERSION +#undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL7X_VERSION +#undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#undef JSON_HEDLEY_TI_CLPRU_VERSION +#undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#undef JSON_HEDLEY_TI_VERSION +#undef JSON_HEDLEY_TI_VERSION_CHECK +#undef JSON_HEDLEY_UNAVAILABLE +#undef JSON_HEDLEY_UNLIKELY +#undef JSON_HEDLEY_UNPREDICTABLE +#undef JSON_HEDLEY_UNREACHABLE +#undef JSON_HEDLEY_UNREACHABLE_RETURN +#undef JSON_HEDLEY_VERSION +#undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#undef JSON_HEDLEY_VERSION_DECODE_MINOR +#undef JSON_HEDLEY_VERSION_DECODE_REVISION +#undef JSON_HEDLEY_VERSION_ENCODE +#undef JSON_HEDLEY_WARNING +#undef JSON_HEDLEY_WARN_UNUSED_RESULT +#undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#undef JSON_HEDLEY_FALL_THROUGH + + + +#endif // INCLUDE_NLOHMANN_JSON_HPP_ \ No newline at end of file diff --git a/src/viewer3d/gltf/stb_image.h b/src/viewer3d/gltf/stb_image.h new file mode 100644 index 00000000..e9278075 --- /dev/null +++ b/src/viewer3d/gltf/stb_image.h @@ -0,0 +1,8653 @@ +/* stb_image - v2.21 - public domain image loader - http://nothings.org/stb + no warranty implied; use at your own risk + + Do this: + #define STB_IMAGE_IMPLEMENTATION + before you include this file in *one* C or C++ file to create the +implementation. + + // i.e. it should look like this: + #include ... + #include ... + #include ... + #define STB_IMAGE_IMPLEMENTATION + #include "stb_image.h" + + You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. + And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using +malloc,realloc,free + + + QUICK NOTES: + Primarily of interest to game developers and other people who can + avoid problematic images and only need the trivial interface + + JPEG baseline & progressive (12 bpc/arithmetic not supported, same as +stock IJG lib) PNG 1/2/4/8/16-bit-per-channel + + TGA (not sure what subset, if a subset) + BMP non-1bpp, non-RLE + PSD (composited view only, no extra channels, 8/16 bit-per-channel) + + GIF (*comp always reports as 4-channel) + HDR (radiance rgbE format) + PIC (Softimage PIC) + PNM (PPM and PGM binary only) + + Animated GIF still needs a proper API, but here's one way to do it: + http://gist.github.com/urraka/685d9a6340b26b830d49 + + - decode from memory or through FILE (define STBI_NO_STDIO to remove code) + - decode from arbitrary I/O callbacks + - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) + + Full documentation under "DOCUMENTATION" below. + + +LICENSE + + See end of file for license information. + +RECENT REVISION HISTORY: + + 2.21 (2019-02-25) fix typo in comment + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and +platform ifdefs 2.19 (2018-02-11) fix warning 2.18 (2018-01-30) fix warnings + 2.17 (2018-01-29) bugfix, 1-bit BMP, 16-bitness query, fix warnings + 2.16 (2017-07-23) all functions have 16-bit variants; optimizations; +bugfixes 2.15 (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE +detection on GCC 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for +Imagenet JPGs 2.13 (2016-12-04) experimental 16-bit API, only for PNG so far; +fixes 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes 2.11 +(2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 RGB-format JPEG; remove +white matting in PSD; allocate large structures on the stack; correct channel +count for PNG & BMP 2.10 (2016-01-22) avoid warning introduced in 2.09 2.09 +(2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED + + See end of file for full revision history. + + + ============================ Contributors ========================= + + Image formats Extensions, features + Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) + Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) + Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) + Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) + Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) + Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) + Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) + github:urraka (animated gif) Junggon Kim (PNM comments) + Christopher Forseth (animated gif) Daniel Gibson (16-bit TGA) + socks-the-fox (16-bit PNG) + Jeremy Sawicki (handle all ImageNet +JPGs) Optimizations & bugfixes Mikhail Morozov (1-bit BMP) + Fabian "ryg" Giesen Anael Seghezzi (is-16-bit query) + Arseny Kapoulkine + John-Mark Allen + Carmelo J Fdez-Aguera + + Bug & warning fixes + Marc LeBlanc David Woo Guillaume George Martins +Mozeiko Christpher Lloyd Jerry Jansson Joseph Thomson Phil +Jordan Dave Moore Roy Eltham Hayaki Saito Nathan Reed + Won Chun Luke Graham Johan Duparc Nick Verigakis + the Horde3D community Thomas Ruf Ronny Chevalier github:rlyeh + Janez Zemva John Bartholomew Michal Cichon github:romigrou + Jonathan Blow Ken Hamada Tero Hanninen github:svdijk + Laurent Gomila Cort Stratton Sergio Gonzalez github:snagar + Aruelien Pocheville Thibault Reuille Cass Everitt github:Zelex + Ryamond Barbiero Paul Du Bois Engin Manap github:grim210 + Aldo Culquicondor Philipp Wiesemann Dale Weiler github:sammyhw + Oriol Ferrer Mesia Josh Tobin Matthew Gregan github:phprus + Julian Raschke Gregory Mullen Baldur Karlsson +github:poppolopoppo Christian Floisand Kevin Schmidt JR Smith +github:darealshinji Blazej Dariusz Roszkowski github:Michaelangel007 +*/ + +#ifndef STBI_INCLUDE_STB_IMAGE_H +#define STBI_INCLUDE_STB_IMAGE_H + +// DOCUMENTATION +// +// Limitations: +// - no 12-bit-per-channel JPEG +// - no JPEGs with arithmetic coding +// - GIF always returns *comp=4 +// +// Basic usage (see HDR discussion below for HDR usage): +// int x,y,n; +// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); +// // ... process data if not NULL ... +// // ... x = width, y = height, n = # 8-bit components per pixel ... +// // ... replace '0' with '1'..'4' to force that many components per pixel +// // ... but 'n' will always be the number that it would have been if you +// said 0 stbi_image_free(data) +// +// Standard parameters: +// int *x -- outputs image width in pixels +// int *y -- outputs image height in pixels +// int *channels_in_file -- outputs # of image components in image file +// int desired_channels -- if non-zero, # of image components requested in +// result +// +// The return value from an image loader is an 'unsigned char *' which points +// to the pixel data, or NULL on an allocation failure or if the image is +// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, +// with each pixel consisting of N interleaved 8-bit components; the first +// pixel pointed to is top-left-most in the image. There is no padding between +// image scanlines or between pixels, regardless of format. The number of +// components N is 'desired_channels' if desired_channels is non-zero, or +// *channels_in_file otherwise. If desired_channels is non-zero, +// *channels_in_file has the number of components that _would_ have been +// output otherwise. E.g. if you set desired_channels to 4, you will always +// get RGBA output, but you can check *channels_in_file to see if it's trivially +// opaque because e.g. there were only 3 channels in the source image. +// +// An output image with N components has the following components interleaved +// in this order in each pixel: +// +// N=#comp components +// 1 grey +// 2 grey, alpha +// 3 red, green, blue +// 4 red, green, blue, alpha +// +// If image loading fails for any reason, the return value will be NULL, +// and *x, *y, *channels_in_file will be unchanged. The function +// stbi_failure_reason() can be queried for an extremely brief, end-user +// unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS +// to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get +// slightly more user-friendly ones. +// +// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. +// +// =========================================================================== +// +// UNICODE: +// +// If compiling for Windows and you wish to use Unicode filenames, compile +// with +// #define STBI_WINDOWS_UTF8 +// and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert +// Windows wchar_t filenames to utf8. +// +// =========================================================================== +// +// Philosophy +// +// stb libraries are designed with the following priorities: +// +// 1. easy to use +// 2. easy to maintain +// 3. good performance +// +// Sometimes I let "good performance" creep up in priority over "easy to +// maintain", and for best performance I may provide less-easy-to-use APIs that +// give higher performance, in addition to the easy-to-use ones. Nevertheless, +// it's important to keep in mind that from the standpoint of you, a client of +// this library, all you care about is #1 and #3, and stb libraries DO NOT +// emphasize #3 above all. +// +// Some secondary priorities arise directly from the first two, some of which +// provide more explicit reasons why performance can't be emphasized. +// +// - Portable ("ease of use") +// - Small source code footprint ("easy to maintain") +// - No dependencies ("ease of use") +// +// =========================================================================== +// +// I/O callbacks +// +// I/O callbacks allow you to read from arbitrary sources, like packaged +// files or some other source. Data read from callbacks are processed +// through a small internal buffer (currently 128 bytes) to try to reduce +// overhead. +// +// The three functions you must define are "read" (reads some bytes of data), +// "skip" (skips some bytes of data), "eof" (reports if the stream is at the +// end). +// +// =========================================================================== +// +// SIMD support +// +// The JPEG decoder will try to automatically use SIMD kernels on x86 when +// supported by the compiler. For ARM Neon support, you must explicitly +// request it. +// +// (The old do-it-yourself SIMD API is no longer supported in the current +// code.) +// +// On x86, SSE2 will automatically be used when available based on a run-time +// test; if not, the generic C versions are used as a fall-back. On ARM targets, +// the typical path is to have separate builds for NEON and non-NEON devices +// (at least this is true for iOS and Android). Therefore, the NEON support is +// toggled by a build flag: define STBI_NEON to get NEON loops. +// +// If for some reason you do not want to use any of SIMD code, or if +// you have issues compiling it, you can disable it entirely by +// defining STBI_NO_SIMD. +// +// =========================================================================== +// +// HDR image support (disable by defining STBI_NO_HDR) +// +// stb_image supports loading HDR images in general, and currently the Radiance +// .HDR file format specifically. You can still load any file through the +// existing interface; if you attempt to load an HDR file, it will be +// automatically remapped to LDR, assuming gamma 2.2 and an arbitrary scale +// factor defaulting to 1; both of these constants can be reconfigured through +// this interface: +// +// stbi_hdr_to_ldr_gamma(2.2f); +// stbi_hdr_to_ldr_scale(1.0f); +// +// (note, do not use _inverse_ constants; stbi_image will invert them +// appropriately). +// +// Additionally, there is a new, parallel interface for loading files as +// (linear) floats to preserve the full dynamic range: +// +// float *data = stbi_loadf(filename, &x, &y, &n, 0); +// +// If you load LDR images through this interface, those images will +// be promoted to floating point values, run through the inverse of +// constants corresponding to the above: +// +// stbi_ldr_to_hdr_scale(1.0f); +// stbi_ldr_to_hdr_gamma(2.2f); +// +// Finally, given a filename (or an open file or memory block--see header +// file for details) containing image data, you can query for the "most +// appropriate" interface to use (that is, whether the image is HDR or +// not), using: +// +// stbi_is_hdr(char *filename); +// +// =========================================================================== +// +// iPhone PNG support: +// +// By default we convert iphone-formatted PNGs back to RGB, even though +// they are internally encoded differently. You can disable this conversion +// by calling stbi_convert_iphone_png_to_rgb(0), in which case +// you will always just get the native iphone "format" through (which +// is BGR stored in RGB). +// +// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per +// pixel to remove any premultiplied alpha *only* if the image file explicitly +// says there's premultiplied data (currently only happens in iPhone images, +// and only if iPhone convert-to-rgb processing is on). +// +// =========================================================================== +// +// ADDITIONAL CONFIGURATION +// +// - You can suppress implementation of any of the decoders to reduce +// your code footprint by #defining one or more of the following +// symbols before creating the implementation. +// +// STBI_NO_JPEG +// STBI_NO_PNG +// STBI_NO_BMP +// STBI_NO_PSD +// STBI_NO_TGA +// STBI_NO_GIF +// STBI_NO_HDR +// STBI_NO_PIC +// STBI_NO_PNM (.ppm and .pgm) +// +// - You can request *only* certain decoders and suppress all other ones +// (this will be more forward-compatible, as addition of new decoders +// doesn't require you to disable them explicitly): +// +// STBI_ONLY_JPEG +// STBI_ONLY_PNG +// STBI_ONLY_BMP +// STBI_ONLY_PSD +// STBI_ONLY_TGA +// STBI_ONLY_GIF +// STBI_ONLY_HDR +// STBI_ONLY_PIC +// STBI_ONLY_PNM (.ppm and .pgm) +// +// - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still +// want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB +// + +#ifndef STBI_NO_STDIO +#include +#endif // STBI_NO_STDIO + +#define STBI_VERSION 1 + +enum { + STBI_default = 0, // only used for desired_channels + + STBI_grey = 1, + STBI_grey_alpha = 2, + STBI_rgb = 3, + STBI_rgb_alpha = 4 +}; + +#include +typedef unsigned char stbi_uc; +typedef unsigned short stbi_us; + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef STB_IMAGE_STATIC +#define STBIDEF static +#else +#define STBIDEF extern +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// PRIMARY API - works on images of any type +// + +// +// load image by filename, open file, or memory buffer +// + +typedef struct { + int (*read)(void* user, char* data, + int size); // fill 'data' with 'size' bytes. return number of + // bytes actually read + void (*skip)(void* user, int n); // skip the next 'n' bytes, or 'unget' the + // last -n bytes if negative + int (*eof)(void* user); // returns nonzero if we are at end of file/data +} stbi_io_callbacks; + +//////////////////////////////////// +// +// 8-bits-per-channel interface +// + +STBIDEF stbi_uc* stbi_load_from_memory(stbi_uc const* buffer, int len, int* x, + int* y, int* channels_in_file, + int desired_channels); +STBIDEF stbi_uc* stbi_load_from_callbacks(stbi_io_callbacks const* clbk, + void* user, int* x, int* y, + int* channels_in_file, + int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_uc* stbi_load(char const* filename, int* x, int* y, + int* channels_in_file, int desired_channels); +STBIDEF stbi_uc* stbi_load_from_file(FILE* f, int* x, int* y, + int* channels_in_file, + int desired_channels); +// for stbi_load_from_file, file pointer is left pointing immediately after +// image +#endif + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc* stbi_load_gif_from_memory(stbi_uc const* buffer, int len, + int** delays, int* x, int* y, int* z, + int* comp, int req_comp); +#endif + +#ifdef STBI_WINDOWS_UTF8 +STBIDEF int stbi_convert_wchar_to_utf8(char* buffer, size_t bufferlen, + const wchar_t* input); +#endif + +//////////////////////////////////// +// +// 16-bits-per-channel interface +// + +STBIDEF stbi_us* stbi_load_16_from_memory(stbi_uc const* buffer, int len, + int* x, int* y, int* channels_in_file, + int desired_channels); +STBIDEF stbi_us* stbi_load_16_from_callbacks(stbi_io_callbacks const* clbk, + void* user, int* x, int* y, + int* channels_in_file, + int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF stbi_us* stbi_load_16(char const* filename, int* x, int* y, + int* channels_in_file, int desired_channels); +STBIDEF stbi_us* stbi_load_from_file_16(FILE* f, int* x, int* y, + int* channels_in_file, + int desired_channels); +#endif + +//////////////////////////////////// +// +// float-per-channel interface +// +#ifndef STBI_NO_LINEAR +STBIDEF float* stbi_loadf_from_memory(stbi_uc const* buffer, int len, int* x, + int* y, int* channels_in_file, + int desired_channels); +STBIDEF float* stbi_loadf_from_callbacks(stbi_io_callbacks const* clbk, + void* user, int* x, int* y, + int* channels_in_file, + int desired_channels); + +#ifndef STBI_NO_STDIO +STBIDEF float* stbi_loadf(char const* filename, int* x, int* y, + int* channels_in_file, int desired_channels); +STBIDEF float* stbi_loadf_from_file(FILE* f, int* x, int* y, + int* channels_in_file, + int desired_channels); +#endif +#endif + +#ifndef STBI_NO_HDR +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); +STBIDEF void stbi_hdr_to_ldr_scale(float scale); +#endif // STBI_NO_HDR + +#ifndef STBI_NO_LINEAR +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); +STBIDEF void stbi_ldr_to_hdr_scale(float scale); +#endif // STBI_NO_LINEAR + +// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const* clbk, + void* user); +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const* buffer, int len); +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr(char const* filename); +STBIDEF int stbi_is_hdr_from_file(FILE* f); +#endif // STBI_NO_STDIO + +// get a VERY brief reason for failure +// NOT THREADSAFE +STBIDEF const char* stbi_failure_reason(void); + +// free the loaded image -- this is just free() +STBIDEF void stbi_image_free(void* retval_from_stbi_load); + +// get image dimensions & components without fully decoding +STBIDEF int stbi_info_from_memory(stbi_uc const* buffer, int len, int* x, + int* y, int* comp); +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const* clbk, void* user, + int* x, int* y, int* comp); +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const* buffer, int len); +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const* clbk, + void* user); + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const* filename, int* x, int* y, int* comp); +STBIDEF int stbi_info_from_file(FILE* f, int* x, int* y, int* comp); +STBIDEF int stbi_is_16_bit(char const* filename); +STBIDEF int stbi_is_16_bit_from_file(FILE* f); +#endif + +// for image formats that explicitly notate that they have premultiplied alpha, +// we just return the colors as stored in the file. set this flag to force +// unpremultiplication. results are undefined if the unpremultiply overflow. +STBIDEF void +stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); + +// indicate whether we should process iphone images back to canonical format, +// or just pass them through "as-is" +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); + +// flip the image vertically, so the first pixel in the output array is the +// bottom left +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); + +// ZLIB client - used by PNG, available for other purposes + +STBIDEF char* stbi_zlib_decode_malloc_guesssize(const char* buffer, int len, + int initial_size, int* outlen); +STBIDEF char* stbi_zlib_decode_malloc_guesssize_headerflag(const char* buffer, + int len, + int initial_size, + int* outlen, + int parse_header); +STBIDEF char* stbi_zlib_decode_malloc(const char* buffer, int len, int* outlen); +STBIDEF int stbi_zlib_decode_buffer(char* obuffer, int olen, + const char* ibuffer, int ilen); + +STBIDEF char* stbi_zlib_decode_noheader_malloc(const char* buffer, int len, + int* outlen); +STBIDEF int stbi_zlib_decode_noheader_buffer(char* obuffer, int olen, + const char* ibuffer, int ilen); + +#ifdef __cplusplus +} +#endif + +// +// +//// end header file ///////////////////////////////////////////////////// +#endif // STBI_INCLUDE_STB_IMAGE_H + +#ifdef STB_IMAGE_IMPLEMENTATION + +#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || \ + defined(STBI_ONLY_BMP) || defined(STBI_ONLY_TGA) || \ + defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) || \ + defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || \ + defined(STBI_ONLY_PNM) || defined(STBI_ONLY_ZLIB) +#ifndef STBI_ONLY_JPEG +#define STBI_NO_JPEG +#endif +#ifndef STBI_ONLY_PNG +#define STBI_NO_PNG +#endif +#ifndef STBI_ONLY_BMP +#define STBI_NO_BMP +#endif +#ifndef STBI_ONLY_PSD +#define STBI_NO_PSD +#endif +#ifndef STBI_ONLY_TGA +#define STBI_NO_TGA +#endif +#ifndef STBI_ONLY_GIF +#define STBI_NO_GIF +#endif +#ifndef STBI_ONLY_HDR +#define STBI_NO_HDR +#endif +#ifndef STBI_ONLY_PIC +#define STBI_NO_PIC +#endif +#ifndef STBI_ONLY_PNM +#define STBI_NO_PNM +#endif +#endif + +#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && \ + !defined(STBI_NO_ZLIB) +#define STBI_NO_ZLIB +#endif + +#include +#include +#include // ptrdiff_t on osx +#include +#include + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +#include // ldexp, pow +#endif + +#ifndef STBI_NO_STDIO +#include +#endif + +#ifndef STBI_ASSERT +#include +#define STBI_ASSERT(x) assert(x) +#endif + +#ifdef __cplusplus +#define STBI_EXTERN extern "C" +#else +#define STBI_EXTERN extern +#endif + +#ifndef _MSC_VER +#ifdef __cplusplus +#define stbi_inline inline +#else +#define stbi_inline +#endif +#else +#define stbi_inline __forceinline +#endif + +#ifdef _MSC_VER +typedef unsigned short stbi__uint16; +typedef signed short stbi__int16; +typedef unsigned int stbi__uint32; +typedef signed int stbi__int32; +#else +#include +typedef uint16_t stbi__uint16; +typedef int16_t stbi__int16; +typedef uint32_t stbi__uint32; +typedef int32_t stbi__int32; +#endif + +// should produce compiler error if size is wrong +typedef unsigned char validate_uint32[sizeof(stbi__uint32) == 4 ? 1 : -1]; + +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif + +#ifdef _MSC_VER +#define STBI_HAS_LROTL +#endif + +#ifdef STBI_HAS_LROTL +#define stbi_lrot(x, y) _lrotl(x, y) +#else +#define stbi_lrot(x, y) (((x) << (y)) | ((x) >> (32 - (y)))) +#endif + +#if defined(STBI_MALLOC) && defined(STBI_FREE) && \ + (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) +// ok +#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && \ + !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) +// ok +#else +#error \ + "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." +#endif + +#ifndef STBI_MALLOC +#define STBI_MALLOC(sz) malloc(sz) +#define STBI_REALLOC(p, newsz) realloc(p, newsz) +#define STBI_FREE(p) free(p) +#endif + +#ifndef STBI_REALLOC_SIZED +#define STBI_REALLOC_SIZED(p, oldsz, newsz) STBI_REALLOC(p, newsz) +#endif + +// x86/x64 detection +#if defined(__x86_64__) || defined(_M_X64) +#define STBI__X64_TARGET +#elif defined(__i386) || defined(_M_IX86) +#define STBI__X86_TARGET +#endif + +#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && \ + !defined(STBI_NO_SIMD) +// gcc doesn't support sse2 intrinsics unless you compile with -msse2, +// which in turn means it gets to use SSE2 everywhere. This is unfortunate, +// but previous attempts to provide the SSE2 functions with runtime +// detection caused numerous issues. The way architecture extensions are +// exposed in GCC/Clang is, sadly, not really suited for one-file libs. +// New behavior: if compiled with -msse2, we use SSE2 without any +// detection; if not, we don't use it at all. +#define STBI_NO_SIMD +#endif + +#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && \ + !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) +// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid +// STBI__X64_TARGET +// +// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the +// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. +// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not +// simultaneously enabling "-mstackrealign". +// +// See https://github.com/nothings/stb/issues/81 for more information. +// +// So default to no SSE2 on 32-bit MinGW. If you've read this far and added +// -mstackrealign to your build settings, feel free to #define +// STBI_MINGW_ENABLE_SSE2. +#define STBI_NO_SIMD +#endif + +#if !defined(STBI_NO_SIMD) && \ + (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) +#define STBI_SSE2 +#include + +#ifdef _MSC_VER + +#if _MSC_VER >= 1400 // not VC6 +#include // __cpuid +static int stbi__cpuid3(void) +{ + int info[4]; + __cpuid(info, 1); + return info[3]; +} +#else +static int stbi__cpuid3(void) +{ + int res; + __asm { + mov eax,1 + cpuid + mov res,edx + } + return res; +} +#endif + +#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + int info3 = stbi__cpuid3(); + return ((info3 >> 26) & 1) != 0; +} +#endif + +#else // assume GCC-style if not VC++ +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) + +#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) +static int stbi__sse2_available(void) +{ + // If we're even attempting to compile this on GCC/Clang, that means + // -msse2 is on, which means the compiler is allowed to use SSE2 + // instructions at will, and so are we. + return 1; +} +#endif + +#endif +#endif + +// ARM NEON +#if defined(STBI_NO_SIMD) && defined(STBI_NEON) +#undef STBI_NEON +#endif + +#ifdef STBI_NEON +#include +// assume GCC or Clang on ARM targets +#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) +#endif + +#ifndef STBI_SIMD_ALIGN +#define STBI_SIMD_ALIGN(type, name) type name +#endif + +/////////////////////////////////////////////// +// +// stbi__context struct and start_xxx functions + +// stbi__context structure is our basic context used by all images, so it +// contains all the IO context, plus some basic image information +typedef struct { + stbi__uint32 img_x, img_y; + int img_n, img_out_n; + + stbi_io_callbacks io; + void* io_user_data; + + int read_from_callbacks; + int buflen; + stbi_uc buffer_start[128]; + + stbi_uc *img_buffer, *img_buffer_end; + stbi_uc *img_buffer_original, *img_buffer_original_end; +} stbi__context; + +static void stbi__refill_buffer(stbi__context* s); + +// initialize a memory-decode context +static void stbi__start_mem(stbi__context* s, stbi_uc const* buffer, int len) +{ + s->io.read = NULL; + s->read_from_callbacks = 0; + s->img_buffer = s->img_buffer_original = (stbi_uc*)buffer; + s->img_buffer_end = s->img_buffer_original_end = (stbi_uc*)buffer + len; +} + +// initialize a callback-based context +static void stbi__start_callbacks(stbi__context* s, stbi_io_callbacks* c, + void* user) +{ + s->io = *c; + s->io_user_data = user; + s->buflen = sizeof(s->buffer_start); + s->read_from_callbacks = 1; + s->img_buffer_original = s->buffer_start; + stbi__refill_buffer(s); + s->img_buffer_original_end = s->img_buffer_end; +} + +#ifndef STBI_NO_STDIO + +static int stbi__stdio_read(void* user, char* data, int size) +{ + return (int)fread(data, 1, size, (FILE*)user); +} + +static void stbi__stdio_skip(void* user, int n) +{ + fseek((FILE*)user, n, SEEK_CUR); +} + +static int stbi__stdio_eof(void* user) { return feof((FILE*)user); } + +static stbi_io_callbacks stbi__stdio_callbacks = { + stbi__stdio_read, + stbi__stdio_skip, + stbi__stdio_eof, +}; + +static void stbi__start_file(stbi__context* s, FILE* f) +{ + stbi__start_callbacks(s, &stbi__stdio_callbacks, (void*)f); +} + +// static void stop_file(stbi__context *s) { } + +#endif // !STBI_NO_STDIO + +static void stbi__rewind(stbi__context* s) +{ + // conceptually rewind SHOULD rewind to the beginning of the stream, + // but we just rewind to the beginning of the initial buffer, because + // we only use it after doing 'test', which only ever looks at at most 92 + // bytes + s->img_buffer = s->img_buffer_original; + s->img_buffer_end = s->img_buffer_original_end; +} + +enum { STBI_ORDER_RGB, STBI_ORDER_BGR }; + +typedef struct { + int bits_per_channel; + int num_channels; + int channel_order; +} stbi__result_info; + +#ifndef STBI_NO_JPEG +static int stbi__jpeg_test(stbi__context* s); +static void* stbi__jpeg_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri); +static int stbi__jpeg_info(stbi__context* s, int* x, int* y, int* comp); +#endif + +#ifndef STBI_NO_PNG +static int stbi__png_test(stbi__context* s); +static void* stbi__png_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri); +static int stbi__png_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__png_is16(stbi__context* s); +#endif + +#ifndef STBI_NO_BMP +static int stbi__bmp_test(stbi__context* s); +static void* stbi__bmp_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri); +static int stbi__bmp_info(stbi__context* s, int* x, int* y, int* comp); +#endif + +#ifndef STBI_NO_TGA +static int stbi__tga_test(stbi__context* s); +static void* stbi__tga_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri); +static int stbi__tga_info(stbi__context* s, int* x, int* y, int* comp); +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context* s); +static void* stbi__psd_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri, int bpc); +static int stbi__psd_info(stbi__context* s, int* x, int* y, int* comp); +static int stbi__psd_is16(stbi__context* s); +#endif + +#ifndef STBI_NO_HDR +static int stbi__hdr_test(stbi__context* s); +static float* stbi__hdr_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri); +static int stbi__hdr_info(stbi__context* s, int* x, int* y, int* comp); +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_test(stbi__context* s); +static void* stbi__pic_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri); +static int stbi__pic_info(stbi__context* s, int* x, int* y, int* comp); +#endif + +#ifndef STBI_NO_GIF +static int stbi__gif_test(stbi__context* s); +static void* stbi__gif_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri); +static void* stbi__load_gif_main(stbi__context* s, int** delays, int* x, int* y, + int* z, int* comp, int req_comp); +static int stbi__gif_info(stbi__context* s, int* x, int* y, int* comp); +#endif + +#ifndef STBI_NO_PNM +static int stbi__pnm_test(stbi__context* s); +static void* stbi__pnm_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri); +static int stbi__pnm_info(stbi__context* s, int* x, int* y, int* comp); +#endif + +// this is not threadsafe +static const char* stbi__g_failure_reason; + +STBIDEF const char* stbi_failure_reason(void) { return stbi__g_failure_reason; } + +static int stbi__err(const char* str) +{ + stbi__g_failure_reason = str; + return 0; +} + +static void* stbi__malloc(size_t size) { return STBI_MALLOC(size); } + +// stb_image uses ints pervasively, including for offset calculations. +// therefore the largest decoded image size we can support with the +// current code, even on 64-bit targets, is INT_MAX. this is not a +// significant limitation for the intended use case. +// +// we do, however, need to make sure our size calculations don't +// overflow. hence a few helper functions for size calculations that +// multiply integers together, making sure that they're non-negative +// and no overflow occurs. + +// return 1 if the sum is valid, 0 on overflow. +// negative terms are considered invalid. +static int stbi__addsizes_valid(int a, int b) +{ + if (b < 0) + return 0; + // now 0 <= b <= INT_MAX, hence also + // 0 <= INT_MAX - b <= INTMAX. + // And "a + b <= INT_MAX" (which might overflow) is the + // same as a <= INT_MAX - b (no overflow) + return a <= INT_MAX - b; +} + +// returns 1 if the product is valid, 0 on overflow. +// negative factors are considered invalid. +static int stbi__mul2sizes_valid(int a, int b) +{ + if (a < 0 || b < 0) + return 0; + if (b == 0) + return 1; // mul-by-0 is always safe + // portable way to check for no overflows in a*b + return a <= INT_MAX / b; +} + +// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow +static int stbi__mad2sizes_valid(int a, int b, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a * b, add); +} + +// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow +static int stbi__mad3sizes_valid(int a, int b, int c, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a * b, c) && + stbi__addsizes_valid(a * b * c, add); +} + +// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't +// overflow +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) +{ + return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a * b, c) && + stbi__mul2sizes_valid(a * b * c, d) && + stbi__addsizes_valid(a * b * c * d, add); +} +#endif + +// mallocs with size overflow checking +static void* stbi__malloc_mad2(int a, int b, int add) +{ + if (!stbi__mad2sizes_valid(a, b, add)) + return NULL; + return stbi__malloc(a * b + add); +} + +static void* stbi__malloc_mad3(int a, int b, int c, int add) +{ + if (!stbi__mad3sizes_valid(a, b, c, add)) + return NULL; + return stbi__malloc(a * b * c + add); +} + +#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) +static void* stbi__malloc_mad4(int a, int b, int c, int d, int add) +{ + if (!stbi__mad4sizes_valid(a, b, c, d, add)) + return NULL; + return stbi__malloc(a * b * c * d + add); +} +#endif + +// stbi__err - error +// stbi__errpf - error returning pointer to float +// stbi__errpuc - error returning pointer to unsigned char + +#ifdef STBI_NO_FAILURE_STRINGS +#define stbi__err(x, y) 0 +#elif defined(STBI_FAILURE_USERMSG) +#define stbi__err(x, y) stbi__err(y) +#else +#define stbi__err(x, y) stbi__err(x) +#endif + +#define stbi__errpf(x, y) ((float*)(size_t)(stbi__err(x, y) ? NULL : NULL)) +#define stbi__errpuc(x, y) \ + ((unsigned char*)(size_t)(stbi__err(x, y) ? NULL : NULL)) + +STBIDEF void stbi_image_free(void* retval_from_stbi_load) +{ + STBI_FREE(retval_from_stbi_load); +} + +#ifndef STBI_NO_LINEAR +static float* stbi__ldr_to_hdr(stbi_uc* data, int x, int y, int comp); +#endif + +#ifndef STBI_NO_HDR +static stbi_uc* stbi__hdr_to_ldr(float* data, int x, int y, int comp); +#endif + +static int stbi__vertically_flip_on_load = 0; + +STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) +{ + stbi__vertically_flip_on_load = flag_true_if_should_flip; +} + +static void* stbi__load_main(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri, int bpc) +{ + memset(ri, 0, + sizeof(*ri)); // make sure it's initialized if we add new fields + ri->bits_per_channel = + 8; // default is 8 so most paths don't have to be changed + ri->channel_order = + STBI_ORDER_RGB; // all current input & output are this, but this is here + // so we can add BGR order + ri->num_channels = 0; + +#ifndef STBI_NO_JPEG + if (stbi__jpeg_test(s)) + return stbi__jpeg_load(s, x, y, comp, req_comp, ri); +#endif +#ifndef STBI_NO_PNG + if (stbi__png_test(s)) + return stbi__png_load(s, x, y, comp, req_comp, ri); +#endif +#ifndef STBI_NO_BMP + if (stbi__bmp_test(s)) + return stbi__bmp_load(s, x, y, comp, req_comp, ri); +#endif +#ifndef STBI_NO_GIF + if (stbi__gif_test(s)) + return stbi__gif_load(s, x, y, comp, req_comp, ri); +#endif +#ifndef STBI_NO_PSD + if (stbi__psd_test(s)) + return stbi__psd_load(s, x, y, comp, req_comp, ri, bpc); +#endif +#ifndef STBI_NO_PIC + if (stbi__pic_test(s)) + return stbi__pic_load(s, x, y, comp, req_comp, ri); +#endif +#ifndef STBI_NO_PNM + if (stbi__pnm_test(s)) + return stbi__pnm_load(s, x, y, comp, req_comp, ri); +#endif + +#ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + float* hdr = stbi__hdr_load(s, x, y, comp, req_comp, ri); + return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); + } +#endif + +#ifndef STBI_NO_TGA + // test tga last because it's a crappy test! + if (stbi__tga_test(s)) + return stbi__tga_load(s, x, y, comp, req_comp, ri); +#endif + + return stbi__errpuc("unknown image type", + "Image not of any known type, or corrupt"); +} + +static stbi_uc* stbi__convert_16_to_8(stbi__uint16* orig, int w, int h, + int channels) +{ + int i; + int img_len = w * h * channels; + stbi_uc* reduced; + + reduced = (stbi_uc*)stbi__malloc(img_len); + if (reduced == NULL) + return stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + reduced[i] = (stbi_uc)((orig[i] >> 8) & + 0xFF); // top half of each byte is sufficient + // approx of 16->8 bit scaling + + STBI_FREE(orig); + return reduced; +} + +static stbi__uint16* stbi__convert_8_to_16(stbi_uc* orig, int w, int h, + int channels) +{ + int i; + int img_len = w * h * channels; + stbi__uint16* enlarged; + + enlarged = (stbi__uint16*)stbi__malloc(img_len * 2); + if (enlarged == NULL) + return (stbi__uint16*)stbi__errpuc("outofmem", "Out of memory"); + + for (i = 0; i < img_len; ++i) + enlarged[i] = (stbi__uint16)((orig[i] << 8) + + orig[i]); // replicate to high and low + // byte, maps 0->0, 255->0xffff + + STBI_FREE(orig); + return enlarged; +} + +static void stbi__vertical_flip(void* image, int w, int h, int bytes_per_pixel) +{ + int row; + size_t bytes_per_row = (size_t)w * bytes_per_pixel; + stbi_uc temp[2048]; + stbi_uc* bytes = (stbi_uc*)image; + + for (row = 0; row < (h >> 1); row++) { + stbi_uc* row0 = bytes + row * bytes_per_row; + stbi_uc* row1 = bytes + (h - row - 1) * bytes_per_row; + // swap row0 with row1 + size_t bytes_left = bytes_per_row; + while (bytes_left) { + size_t bytes_copy = + (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); + memcpy(temp, row0, bytes_copy); + memcpy(row0, row1, bytes_copy); + memcpy(row1, temp, bytes_copy); + row0 += bytes_copy; + row1 += bytes_copy; + bytes_left -= bytes_copy; + } + } +} + +#ifndef STBI_NO_GIF +static void stbi__vertical_flip_slices(void* image, int w, int h, int z, + int bytes_per_pixel) +{ + int slice; + int slice_size = w * h * bytes_per_pixel; + + stbi_uc* bytes = (stbi_uc*)image; + for (slice = 0; slice < z; ++slice) { + stbi__vertical_flip(bytes, w, h, bytes_per_pixel); + bytes += slice_size; + } +} +#endif + +static unsigned char* stbi__load_and_postprocess_8bit(stbi__context* s, int* x, + int* y, int* comp, + int req_comp) +{ + stbi__result_info ri; + void* result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); + + if (result == NULL) + return NULL; + + if (ri.bits_per_channel != 8) { + STBI_ASSERT(ri.bits_per_channel == 16); + result = stbi__convert_16_to_8((stbi__uint16*)result, *x, *y, + req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 8; + } + + // @TODO: move stbi__convert_format to here + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); + } + + return (unsigned char*)result; +} + +static stbi__uint16* stbi__load_and_postprocess_16bit(stbi__context* s, int* x, + int* y, int* comp, + int req_comp) +{ + stbi__result_info ri; + void* result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); + + if (result == NULL) + return NULL; + + if (ri.bits_per_channel != 16) { + STBI_ASSERT(ri.bits_per_channel == 8); + result = stbi__convert_8_to_16((stbi_uc*)result, *x, *y, + req_comp == 0 ? *comp : req_comp); + ri.bits_per_channel = 16; + } + + // @TODO: move stbi__convert_format16 to here + // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to + // keep more precision + + if (stbi__vertically_flip_on_load) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); + } + + return (stbi__uint16*)result; +} + +#if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) +static void stbi__float_postprocess(float* result, int* x, int* y, int* comp, + int req_comp) +{ + if (stbi__vertically_flip_on_load && result != NULL) { + int channels = req_comp ? req_comp : *comp; + stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); + } +} +#endif + +#ifndef STBI_NO_STDIO + +#if defined(_MSC_VER) && defined(STBI_WINDOWS_UTF8) +STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar( + unsigned int cp, unsigned long flags, const char* str, int cbmb, + wchar_t* widestr, int cchwide); +STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte( + unsigned int cp, unsigned long flags, const wchar_t* widestr, int cchwide, + char* str, int cbmb, const char* defchar, int* used_default); +#endif + +#if defined(_MSC_VER) && defined(STBI_WINDOWS_UTF8) +STBIDEF int stbi_convert_wchar_to_utf8(char* buffer, size_t bufferlen, + const wchar_t* input) +{ + return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, + bufferlen, NULL, NULL); +} +#endif + +static FILE* stbi__fopen(char const* filename, char const* mode) +{ + FILE* f; +#if defined(_MSC_VER) && defined(STBI_WINDOWS_UTF8) + wchar_t wMode[64]; + wchar_t wFilename[1024]; + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, + sizeof(wFilename))) + return 0; + + if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, + sizeof(wMode))) + return 0; + +#if _MSC_VER >= 1400 + if (0 != _wfopen_s(&f, wFilename, wMode)) + f = 0; +#else + f = _wfopen(wFilename, wMode); +#endif + +#elif defined(_MSC_VER) && _MSC_VER >= 1400 + if (0 != fopen_s(&f, filename, mode)) + f = 0; +#else + f = fopen(filename, mode); +#endif + return f; +} + +STBIDEF stbi_uc* stbi_load(char const* filename, int* x, int* y, int* comp, + int req_comp) +{ + FILE* f = stbi__fopen(filename, "rb"); + unsigned char* result; + if (!f) + return stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file(f, x, y, comp, req_comp); + fclose(f); + return result; +} + +STBIDEF stbi_uc* stbi_load_from_file(FILE* f, int* x, int* y, int* comp, + int req_comp) +{ + unsigned char* result; + stbi__context s; + stbi__start_file(&s, f); + result = stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi__uint16* stbi_load_from_file_16(FILE* f, int* x, int* y, int* comp, + int req_comp) +{ + stbi__uint16* result; + stbi__context s; + stbi__start_file(&s, f); + result = stbi__load_and_postprocess_16bit(&s, x, y, comp, req_comp); + if (result) { + // need to 'unget' all the characters in the IO buffer + fseek(f, -(int)(s.img_buffer_end - s.img_buffer), SEEK_CUR); + } + return result; +} + +STBIDEF stbi_us* stbi_load_16(char const* filename, int* x, int* y, int* comp, + int req_comp) +{ + FILE* f = stbi__fopen(filename, "rb"); + stbi__uint16* result; + if (!f) + return (stbi_us*)stbi__errpuc("can't fopen", "Unable to open file"); + result = stbi_load_from_file_16(f, x, y, comp, req_comp); + fclose(f); + return result; +} + +#endif //! STBI_NO_STDIO + +STBIDEF stbi_us* stbi_load_16_from_memory(stbi_uc const* buffer, int len, + int* x, int* y, int* channels_in_file, + int desired_channels) +{ + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, + desired_channels); +} + +STBIDEF stbi_us* stbi_load_16_from_callbacks(stbi_io_callbacks const* clbk, + void* user, int* x, int* y, + int* channels_in_file, + int desired_channels) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); + return stbi__load_and_postprocess_16bit(&s, x, y, channels_in_file, + desired_channels); +} + +STBIDEF stbi_uc* stbi_load_from_memory(stbi_uc const* buffer, int len, int* x, + int* y, int* comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); +} + +STBIDEF stbi_uc* stbi_load_from_callbacks(stbi_io_callbacks const* clbk, + void* user, int* x, int* y, int* comp, + int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); + return stbi__load_and_postprocess_8bit(&s, x, y, comp, req_comp); +} + +#ifndef STBI_NO_GIF +STBIDEF stbi_uc* stbi_load_gif_from_memory(stbi_uc const* buffer, int len, + int** delays, int* x, int* y, int* z, + int* comp, int req_comp) +{ + unsigned char* result; + stbi__context s; + stbi__start_mem(&s, buffer, len); + + result = (unsigned char*)stbi__load_gif_main(&s, delays, x, y, z, comp, + req_comp); + if (stbi__vertically_flip_on_load) { + stbi__vertical_flip_slices(result, *x, *y, *z, *comp); + } + + return result; +} +#endif + +#ifndef STBI_NO_LINEAR +static float* stbi__loadf_main(stbi__context* s, int* x, int* y, int* comp, + int req_comp) +{ + unsigned char* data; +#ifndef STBI_NO_HDR + if (stbi__hdr_test(s)) { + stbi__result_info ri; + float* hdr_data = stbi__hdr_load(s, x, y, comp, req_comp, &ri); + if (hdr_data) + stbi__float_postprocess(hdr_data, x, y, comp, req_comp); + return hdr_data; + } +#endif + data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); + if (data) + return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); + return stbi__errpf("unknown image type", + "Image not of any known type, or corrupt"); +} + +STBIDEF float* stbi_loadf_from_memory(stbi_uc const* buffer, int len, int* x, + int* y, int* comp, int req_comp) +{ + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__loadf_main(&s, x, y, comp, req_comp); +} + +STBIDEF float* stbi_loadf_from_callbacks(stbi_io_callbacks const* clbk, + void* user, int* x, int* y, int* comp, + int req_comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); + return stbi__loadf_main(&s, x, y, comp, req_comp); +} + +#ifndef STBI_NO_STDIO +STBIDEF float* stbi_loadf(char const* filename, int* x, int* y, int* comp, + int req_comp) +{ + float* result; + FILE* f = stbi__fopen(filename, "rb"); + if (!f) + return stbi__errpf("can't fopen", "Unable to open file"); + result = stbi_loadf_from_file(f, x, y, comp, req_comp); + fclose(f); + return result; +} + +STBIDEF float* stbi_loadf_from_file(FILE* f, int* x, int* y, int* comp, + int req_comp) +{ + stbi__context s; + stbi__start_file(&s, f); + return stbi__loadf_main(&s, x, y, comp, req_comp); +} +#endif // !STBI_NO_STDIO + +#endif // !STBI_NO_LINEAR + +// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is +// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always +// reports false! + +STBIDEF int stbi_is_hdr_from_memory(stbi_uc const* buffer, int len) +{ +#ifndef STBI_NO_HDR + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__hdr_test(&s); +#else + STBI_NOTUSED(buffer); + STBI_NOTUSED(len); + return 0; +#endif +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_is_hdr(char const* filename) +{ + FILE* f = stbi__fopen(filename, "rb"); + int result = 0; + if (f) { + result = stbi_is_hdr_from_file(f); + fclose(f); + } + return result; +} + +STBIDEF int stbi_is_hdr_from_file(FILE* f) +{ +#ifndef STBI_NO_HDR + long pos = ftell(f); + int res; + stbi__context s; + stbi__start_file(&s, f); + res = stbi__hdr_test(&s); + fseek(f, pos, SEEK_SET); + return res; +#else + STBI_NOTUSED(f); + return 0; +#endif +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const* clbk, + void* user) +{ +#ifndef STBI_NO_HDR + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)clbk, user); + return stbi__hdr_test(&s); +#else + STBI_NOTUSED(clbk); + STBI_NOTUSED(user); + return 0; +#endif +} + +#ifndef STBI_NO_LINEAR +static float stbi__l2h_gamma = 2.2f, stbi__l2h_scale = 1.0f; + +STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } +STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } +#endif + +static float stbi__h2l_gamma_i = 1.0f / 2.2f, stbi__h2l_scale_i = 1.0f; + +STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) +{ + stbi__h2l_gamma_i = 1 / gamma; +} +STBIDEF void stbi_hdr_to_ldr_scale(float scale) +{ + stbi__h2l_scale_i = 1 / scale; +} + +////////////////////////////////////////////////////////////////////////////// +// +// Common code used by all image loaders +// + +enum { STBI__SCAN_load = 0, STBI__SCAN_type, STBI__SCAN_header }; + +static void stbi__refill_buffer(stbi__context* s) +{ + int n = (s->io.read)(s->io_user_data, (char*)s->buffer_start, s->buflen); + if (n == 0) { + // at end of file, treat same as if from memory, but need to handle case + // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file + s->read_from_callbacks = 0; + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + 1; + *s->img_buffer = 0; + } + else { + s->img_buffer = s->buffer_start; + s->img_buffer_end = s->buffer_start + n; + } +} + +stbi_inline static stbi_uc stbi__get8(stbi__context* s) +{ + if (s->img_buffer < s->img_buffer_end) + return *s->img_buffer++; + if (s->read_from_callbacks) { + stbi__refill_buffer(s); + return *s->img_buffer++; + } + return 0; +} + +stbi_inline static int stbi__at_eof(stbi__context* s) +{ + if (s->io.read) { + if (!(s->io.eof)(s->io_user_data)) + return 0; + // if feof() is true, check if buffer = end + // special case: we've only got the special 0 character at the end + if (s->read_from_callbacks == 0) + return 1; + } + + return s->img_buffer >= s->img_buffer_end; +} + +static void stbi__skip(stbi__context* s, int n) +{ + if (n < 0) { + s->img_buffer = s->img_buffer_end; + return; + } + if (s->io.read) { + int blen = (int)(s->img_buffer_end - s->img_buffer); + if (blen < n) { + s->img_buffer = s->img_buffer_end; + (s->io.skip)(s->io_user_data, n - blen); + return; + } + } + s->img_buffer += n; +} + +static int stbi__getn(stbi__context* s, stbi_uc* buffer, int n) +{ + if (s->io.read) { + int blen = (int)(s->img_buffer_end - s->img_buffer); + if (blen < n) { + int res, count; + + memcpy(buffer, s->img_buffer, blen); + + count = + (s->io.read)(s->io_user_data, (char*)buffer + blen, n - blen); + res = (count == (n - blen)); + s->img_buffer = s->img_buffer_end; + return res; + } + } + + if (s->img_buffer + n <= s->img_buffer_end) { + memcpy(buffer, s->img_buffer, n); + s->img_buffer += n; + return 1; + } + else + return 0; +} + +static int stbi__get16be(stbi__context* s) +{ + int z = stbi__get8(s); + return (z << 8) + stbi__get8(s); +} + +static stbi__uint32 stbi__get32be(stbi__context* s) +{ + stbi__uint32 z = stbi__get16be(s); + return (z << 16) + stbi__get16be(s); +} + +#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) +// nothing +#else +static int stbi__get16le(stbi__context* s) +{ + int z = stbi__get8(s); + return z + (stbi__get8(s) << 8); +} +#endif + +#ifndef STBI_NO_BMP +static stbi__uint32 stbi__get32le(stbi__context* s) +{ + stbi__uint32 z = stbi__get16le(s); + return z + (stbi__get16le(s) << 16); +} +#endif + +#define STBI__BYTECAST(x) \ + ((stbi_uc)((x)&255)) // truncate int to byte without warnings + +////////////////////////////////////////////////////////////////////////////// +// +// generic converter from built-in img_n to req_comp +// individual types do this automatically as much as possible (e.g. jpeg +// does all cases internally since it needs to colorspace convert anyway, +// and it never has alpha, so very few cases ). png can automatically +// interleave an alpha=255 channel, but falls back to this for other cases +// +// assume data buffer is malloced, so malloc a new one and free that one +// only failure mode is malloc failing + +static stbi_uc stbi__compute_y(int r, int g, int b) +{ + return (stbi_uc)(((r * 77) + (g * 150) + (29 * b)) >> 8); +} + +static unsigned char* stbi__convert_format(unsigned char* data, int img_n, + int req_comp, unsigned int x, + unsigned int y) +{ + int i, j; + unsigned char* good; + + if (req_comp == img_n) + return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (unsigned char*)stbi__malloc_mad3(req_comp, x, y, 0); + if (good == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + + for (j = 0; j < (int)y; ++j) { + unsigned char* src = data + j * x * img_n; + unsigned char* dest = good + j * x * req_comp; + +#define STBI__COMBO(a, b) ((a)*8 + (b)) +#define STBI__CASE(a, b) \ + case STBI__COMBO(a, b): \ + for (i = x - 1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp + // components; avoid switch per pixel, so use switch per scanline and + // massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1, 2) + { + dest[0] = src[0]; + dest[1] = 255; + } + break; + STBI__CASE(1, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(1, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = 255; + } + break; + STBI__CASE(2, 1) { dest[0] = src[0]; } + break; + STBI__CASE(2, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(2, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = src[1]; + } + break; + STBI__CASE(3, 4) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + dest[3] = 255; + } + break; + STBI__CASE(3, 1) + { + dest[0] = stbi__compute_y(src[0], src[1], src[2]); + } + break; + STBI__CASE(3, 2) + { + dest[0] = stbi__compute_y(src[0], src[1], src[2]); + dest[1] = 255; + } + break; + STBI__CASE(4, 1) + { + dest[0] = stbi__compute_y(src[0], src[1], src[2]); + } + break; + STBI__CASE(4, 2) + { + dest[0] = stbi__compute_y(src[0], src[1], src[2]); + dest[1] = src[3]; + } + break; + STBI__CASE(4, 3) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + } + break; + default: + STBI_ASSERT(0); + } +#undef STBI__CASE + } + + STBI_FREE(data); + return good; +} + +static stbi__uint16 stbi__compute_y_16(int r, int g, int b) +{ + return (stbi__uint16)(((r * 77) + (g * 150) + (29 * b)) >> 8); +} + +static stbi__uint16* stbi__convert_format16(stbi__uint16* data, int img_n, + int req_comp, unsigned int x, + unsigned int y) +{ + int i, j; + stbi__uint16* good; + + if (req_comp == img_n) + return data; + STBI_ASSERT(req_comp >= 1 && req_comp <= 4); + + good = (stbi__uint16*)stbi__malloc(req_comp * x * y * 2); + if (good == NULL) { + STBI_FREE(data); + return (stbi__uint16*)stbi__errpuc("outofmem", "Out of memory"); + } + + for (j = 0; j < (int)y; ++j) { + stbi__uint16* src = data + j * x * img_n; + stbi__uint16* dest = good + j * x * req_comp; + +#define STBI__COMBO(a, b) ((a)*8 + (b)) +#define STBI__CASE(a, b) \ + case STBI__COMBO(a, b): \ + for (i = x - 1; i >= 0; --i, src += a, dest += b) + // convert source image with img_n components to one with req_comp + // components; avoid switch per pixel, so use switch per scanline and + // massive macros + switch (STBI__COMBO(img_n, req_comp)) { + STBI__CASE(1, 2) + { + dest[0] = src[0]; + dest[1] = 0xffff; + } + break; + STBI__CASE(1, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(1, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = 0xffff; + } + break; + STBI__CASE(2, 1) { dest[0] = src[0]; } + break; + STBI__CASE(2, 3) { dest[0] = dest[1] = dest[2] = src[0]; } + break; + STBI__CASE(2, 4) + { + dest[0] = dest[1] = dest[2] = src[0]; + dest[3] = src[1]; + } + break; + STBI__CASE(3, 4) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + dest[3] = 0xffff; + } + break; + STBI__CASE(3, 1) + { + dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); + } + break; + STBI__CASE(3, 2) + { + dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); + dest[1] = 0xffff; + } + break; + STBI__CASE(4, 1) + { + dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); + } + break; + STBI__CASE(4, 2) + { + dest[0] = stbi__compute_y_16(src[0], src[1], src[2]); + dest[1] = src[3]; + } + break; + STBI__CASE(4, 3) + { + dest[0] = src[0]; + dest[1] = src[1]; + dest[2] = src[2]; + } + break; + default: + STBI_ASSERT(0); + } +#undef STBI__CASE + } + + STBI_FREE(data); + return good; +} + +#ifndef STBI_NO_LINEAR +static float* stbi__ldr_to_hdr(stbi_uc* data, int x, int y, int comp) +{ + int i, k, n; + float* output; + if (!data) + return NULL; + output = (float*)stbi__malloc_mad4(x, y, comp, sizeof(float), 0); + if (output == NULL) { + STBI_FREE(data); + return stbi__errpf("outofmem", "Out of memory"); + } + // compute number of non-alpha components + if (comp & 1) + n = comp; + else + n = comp - 1; + for (i = 0; i < x * y; ++i) { + for (k = 0; k < n; ++k) { + output[i * comp + k] = + (float)(pow(data[i * comp + k] / 255.0f, stbi__l2h_gamma) * + stbi__l2h_scale); + } + } + if (n < comp) { + for (i = 0; i < x * y; ++i) { + output[i * comp + n] = data[i * comp + n] / 255.0f; + } + } + STBI_FREE(data); + return output; +} +#endif + +#ifndef STBI_NO_HDR +#define stbi__float2int(x) ((int)(x)) +static stbi_uc* stbi__hdr_to_ldr(float* data, int x, int y, int comp) +{ + int i, k, n; + stbi_uc* output; + if (!data) + return NULL; + output = (stbi_uc*)stbi__malloc_mad3(x, y, comp, 0); + if (output == NULL) { + STBI_FREE(data); + return stbi__errpuc("outofmem", "Out of memory"); + } + // compute number of non-alpha components + if (comp & 1) + n = comp; + else + n = comp - 1; + for (i = 0; i < x * y; ++i) { + for (k = 0; k < n; ++k) { + float z = (float)pow(data[i * comp + k] * stbi__h2l_scale_i, + stbi__h2l_gamma_i) * + 255 + + 0.5f; + if (z < 0) + z = 0; + if (z > 255) + z = 255; + output[i * comp + k] = (stbi_uc)stbi__float2int(z); + } + if (k < comp) { + float z = data[i * comp + k] * 255 + 0.5f; + if (z < 0) + z = 0; + if (z > 255) + z = 255; + output[i * comp + k] = (stbi_uc)stbi__float2int(z); + } + } + STBI_FREE(data); + return output; +} +#endif + +////////////////////////////////////////////////////////////////////////////// +// +// "baseline" JPEG/JFIF decoder +// +// simple implementation +// - doesn't support delayed output of y-dimension +// - simple interface (only one output format: 8-bit interleaved RGB) +// - doesn't try to recover corrupt jpegs +// - doesn't allow partial loading, loading multiple at once +// - still fast on x86 (copying globals into locals doesn't help x86) +// - allocates lots of intermediate memory (full size of all components) +// - non-interleaved case requires this anyway +// - allows good upsampling (see next) +// high-quality +// - upsampled channels are bilinearly interpolated, even across blocks +// - quality integer IDCT derived from IJG's 'slow' +// performance +// - fast huffman; reasonable integer IDCT +// - some SIMD kernels for common paths on targets with SSE2/NEON +// - uses a lot of intermediate memory, could cache poorly + +#ifndef STBI_NO_JPEG + +// huffman decoding acceleration +#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache + +typedef struct { + stbi_uc fast[1 << FAST_BITS]; + // weirdly, repacking this into AoS is a 10% speed loss, instead of a win + stbi__uint16 code[256]; + stbi_uc values[256]; + stbi_uc size[257]; + unsigned int maxcode[18]; + int delta[17]; // old 'firstsymbol' - old 'firstcode' +} stbi__huffman; + +typedef struct { + stbi__context* s; + stbi__huffman huff_dc[4]; + stbi__huffman huff_ac[4]; + stbi__uint16 dequant[4][64]; + stbi__int16 fast_ac[4][1 << FAST_BITS]; + + // sizes for components, interleaved MCUs + int img_h_max, img_v_max; + int img_mcu_x, img_mcu_y; + int img_mcu_w, img_mcu_h; + + // definition of jpeg image component + struct { + int id; + int h, v; + int tq; + int hd, ha; + int dc_pred; + + int x, y, w2, h2; + stbi_uc* data; + void *raw_data, *raw_coeff; + stbi_uc* linebuf; + short* coeff; // progressive only + int coeff_w, coeff_h; // number of 8x8 coefficient blocks + } img_comp[4]; + + stbi__uint32 code_buffer; // jpeg entropy-coded buffer + int code_bits; // number of valid bits + unsigned char marker; // marker seen while filling entropy buffer + int nomore; // flag if we saw a marker so must stop + + int progressive; + int spec_start; + int spec_end; + int succ_high; + int succ_low; + int eob_run; + int jfif; + int app14_color_transform; // Adobe APP14 tag + int rgb; + + int scan_n, order[4]; + int restart_interval, todo; + + // kernels + void (*idct_block_kernel)(stbi_uc* out, int out_stride, short data[64]); + void (*YCbCr_to_RGB_kernel)(stbi_uc* out, const stbi_uc* y, + const stbi_uc* pcb, const stbi_uc* pcr, + int count, int step); + stbi_uc* (*resample_row_hv_2_kernel)(stbi_uc* out, stbi_uc* in_near, + stbi_uc* in_far, int w, int hs); +} stbi__jpeg; + +static int stbi__build_huffman(stbi__huffman* h, int* count) +{ + int i, j, k = 0; + unsigned int code; + // build size list for each symbol (from JPEG spec) + for (i = 0; i < 16; ++i) + for (j = 0; j < count[i]; ++j) + h->size[k++] = (stbi_uc)(i + 1); + h->size[k] = 0; + + // compute actual symbols (from jpeg spec) + code = 0; + k = 0; + for (j = 1; j <= 16; ++j) { + // compute delta to add to code to compute symbol id + h->delta[j] = k - code; + if (h->size[k] == j) { + while (h->size[k] == j) + h->code[k++] = (stbi__uint16)(code++); + if (code - 1 >= (1u << j)) + return stbi__err("bad code lengths", "Corrupt JPEG"); + } + // compute largest code + 1 for this size, preshifted as needed later + h->maxcode[j] = code << (16 - j); + code <<= 1; + } + h->maxcode[j] = 0xffffffff; + + // build non-spec acceleration table; 255 is flag for not-accelerated + memset(h->fast, 255, 1 << FAST_BITS); + for (i = 0; i < k; ++i) { + int s = h->size[i]; + if (s <= FAST_BITS) { + int c = h->code[i] << (FAST_BITS - s); + int m = 1 << (FAST_BITS - s); + for (j = 0; j < m; ++j) { + h->fast[c + j] = (stbi_uc)i; + } + } + } + return 1; +} + +// build a table that decodes both magnitude and value of small ACs in +// one go. +static void stbi__build_fast_ac(stbi__int16* fast_ac, stbi__huffman* h) +{ + int i; + for (i = 0; i < (1 << FAST_BITS); ++i) { + stbi_uc fast = h->fast[i]; + fast_ac[i] = 0; + if (fast < 255) { + int rs = h->values[fast]; + int run = (rs >> 4) & 15; + int magbits = rs & 15; + int len = h->size[fast]; + + if (magbits && len + magbits <= FAST_BITS) { + // magnitude code followed by receive_extend code + int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> + (FAST_BITS - magbits); + int m = 1 << (magbits - 1); + if (k < m) + k += (~0U << magbits) + 1; + // if the result is small enough, we can fit it in fast_ac table + if (k >= -128 && k <= 127) + fast_ac[i] = + (stbi__int16)((k * 256) + (run * 16) + (len + magbits)); + } + } + } +} + +static void stbi__grow_buffer_unsafe(stbi__jpeg* j) +{ + do { + unsigned int b = j->nomore ? 0 : stbi__get8(j->s); + if (b == 0xff) { + int c = stbi__get8(j->s); + while (c == 0xff) + c = stbi__get8(j->s); // consume fill bytes + if (c != 0) { + j->marker = (unsigned char)c; + j->nomore = 1; + return; + } + } + j->code_buffer |= b << (24 - j->code_bits); + j->code_bits += 8; + } while (j->code_bits <= 24); +} + +// (1 << n) - 1 +static const stbi__uint32 stbi__bmask[17] = { + 0, 1, 3, 7, 15, 31, 63, 127, 255, + 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535}; + +// decode a jpeg huffman value from the bitstream +stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg* j, stbi__huffman* h) +{ + unsigned int temp; + int c, k; + + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + + // look at the top FAST_BITS and determine what symbol ID it is, + // if the code is <= FAST_BITS + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); + k = h->fast[c]; + if (k < 255) { + int s = h->size[k]; + if (s > j->code_bits) + return -1; + j->code_buffer <<= s; + j->code_bits -= s; + return h->values[k]; + } + + // naive test is to shift the code_buffer down so k bits are + // valid, then test against maxcode. To speed this up, we've + // preshifted maxcode left so that it has (16-k) 0s at the + // end; in other words, regardless of the number of bits, it + // wants to be compared against something shifted to have 16; + // that way we don't need to shift inside the loop. + temp = j->code_buffer >> 16; + for (k = FAST_BITS + 1;; ++k) + if (temp < h->maxcode[k]) + break; + if (k == 17) { + // error! code not found + j->code_bits -= 16; + return -1; + } + + if (k > j->code_bits) + return -1; + + // convert the huffman code to the symbol id + c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; + STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & + stbi__bmask[h->size[c]]) == h->code[c]); + + // convert the id to a symbol + j->code_bits -= k; + j->code_buffer <<= k; + return h->values[c]; +} + +// bias[n] = (-1<code_bits < n) + stbi__grow_buffer_unsafe(j); + + sgn = (stbi__int32)j->code_buffer >> 31; // sign bit is always in MSB + k = stbi_lrot(j->code_buffer, n); + STBI_ASSERT(n >= 0 && + n < (int)(sizeof(stbi__bmask) / sizeof(*stbi__bmask))); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k + (stbi__jbias[n] & ~sgn); +} + +// get some unsigned bits +stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg* j, int n) +{ + unsigned int k; + if (j->code_bits < n) + stbi__grow_buffer_unsafe(j); + k = stbi_lrot(j->code_buffer, n); + j->code_buffer = k & ~stbi__bmask[n]; + k &= stbi__bmask[n]; + j->code_bits -= n; + return k; +} + +stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg* j) +{ + unsigned int k; + if (j->code_bits < 1) + stbi__grow_buffer_unsafe(j); + k = j->code_buffer; + j->code_buffer <<= 1; + --j->code_bits; + return k & 0x80000000; +} + +// given a value that's at position X in the zigzag stream, +// where does it appear in the 8x8 matrix coded as row-major? +static const stbi_uc stbi__jpeg_dezigzag[64 + 15] = { + 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, + 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, + 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, + 54, 47, 55, 62, 63, + // let corrupt input sample past end + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63}; + +// decode one 64-entry block-- +static int stbi__jpeg_decode_block(stbi__jpeg* j, short data[64], + stbi__huffman* hdc, stbi__huffman* hac, + stbi__int16* fac, int b, + stbi__uint16* dequant) +{ + int diff, dc, k; + int t; + + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + t = stbi__jpeg_huff_decode(j, hdc); + if (t < 0) + return stbi__err("bad huffman code", "Corrupt JPEG"); + + // 0 all the ac values now so we can do it 32-bits at a time + memset(data, 0, 64 * sizeof(data[0])); + + diff = t ? stbi__extend_receive(j, t) : 0; + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short)(dc * dequant[0]); + + // decode AC components, see JPEG spec + k = 1; + do { + unsigned int zig; + int c, r, s; + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + j->code_buffer <<= s; + j->code_bits -= s; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)((r >> 8) * dequant[zig]); + } + else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) + return stbi__err("bad huffman code", "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (rs != 0xf0) + break; // end block + k += 16; + } + else { + k += r; + // decode into unzigzag'd location + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)(stbi__extend_receive(j, s) * dequant[zig]); + } + } + } while (k < 64); + return 1; +} + +static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg* j, short data[64], + stbi__huffman* hdc, int b) +{ + int diff, dc; + int t; + if (j->spec_end != 0) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + + if (j->succ_high == 0) { + // first scan for DC coefficient, must be first + memset(data, 0, 64 * sizeof(data[0])); // 0 all the ac values now + t = stbi__jpeg_huff_decode(j, hdc); + diff = t ? stbi__extend_receive(j, t) : 0; + + dc = j->img_comp[b].dc_pred + diff; + j->img_comp[b].dc_pred = dc; + data[0] = (short)(dc << j->succ_low); + } + else { + // refinement scan for DC coefficient + if (stbi__jpeg_get_bit(j)) + data[0] += (short)(1 << j->succ_low); + } + return 1; +} + +// @OPTIMIZE: store non-zigzagged during the decode passes, +// and only de-zigzag when dequantizing +static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg* j, short data[64], + stbi__huffman* hac, stbi__int16* fac) +{ + int k; + if (j->spec_start == 0) + return stbi__err("can't merge dc and ac", "Corrupt JPEG"); + + if (j->succ_high == 0) { + int shift = j->succ_low; + + if (j->eob_run) { + --j->eob_run; + return 1; + } + + k = j->spec_start; + do { + unsigned int zig; + int c, r, s; + if (j->code_bits < 16) + stbi__grow_buffer_unsafe(j); + c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS) - 1); + r = fac[c]; + if (r) { // fast-AC path + k += (r >> 4) & 15; // run + s = r & 15; // combined length + j->code_buffer <<= s; + j->code_bits -= s; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)((r >> 8) << shift); + } + else { + int rs = stbi__jpeg_huff_decode(j, hac); + if (rs < 0) + return stbi__err("bad huffman code", "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r); + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + --j->eob_run; + break; + } + k += 16; + } + else { + k += r; + zig = stbi__jpeg_dezigzag[k++]; + data[zig] = (short)(stbi__extend_receive(j, s) << shift); + } + } + } while (k <= j->spec_end); + } + else { + // refinement scan for these AC coefficients + + short bit = (short)(1 << j->succ_low); + + if (j->eob_run) { + --j->eob_run; + for (k = j->spec_start; k <= j->spec_end; ++k) { + short* p = &data[stbi__jpeg_dezigzag[k]]; + if (*p != 0) + if (stbi__jpeg_get_bit(j)) + if ((*p & bit) == 0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + } + else { + k = j->spec_start; + do { + int r, s; + int rs = stbi__jpeg_huff_decode( + j, hac); // @OPTIMIZE see if we can use the fast path here, + // advance-by-r is so slow, eh + if (rs < 0) + return stbi__err("bad huffman code", "Corrupt JPEG"); + s = rs & 15; + r = rs >> 4; + if (s == 0) { + if (r < 15) { + j->eob_run = (1 << r) - 1; + if (r) + j->eob_run += stbi__jpeg_get_bits(j, r); + r = 64; // force end of block + } + else { + // r=15 s=0 should write 16 0s, so we just do + // a run of 15 0s and then write s (which is 0), + // so we don't have to do anything special here + } + } + else { + if (s != 1) + return stbi__err("bad huffman code", "Corrupt JPEG"); + // sign bit + if (stbi__jpeg_get_bit(j)) + s = bit; + else + s = -bit; + } + + // advance by r + while (k <= j->spec_end) { + short* p = &data[stbi__jpeg_dezigzag[k++]]; + if (*p != 0) { + if (stbi__jpeg_get_bit(j)) + if ((*p & bit) == 0) { + if (*p > 0) + *p += bit; + else + *p -= bit; + } + } + else { + if (r == 0) { + *p = (short)s; + break; + } + --r; + } + } + } while (k <= j->spec_end); + } + } + return 1; +} + +// take a -128..127 value and stbi__clamp it and convert to 0..255 +stbi_inline static stbi_uc stbi__clamp(int x) +{ + // trick to use a single test to catch both cases + if ((unsigned int)x > 255) { + if (x < 0) + return 0; + if (x > 255) + return 255; + } + return (stbi_uc)x; +} + +#define stbi__f2f(x) ((int)(((x)*4096 + 0.5))) +#define stbi__fsh(x) ((x)*4096) + +// derived from jidctint -- DCT_ISLOW +#define STBI__IDCT_1D(s0, s1, s2, s3, s4, s5, s6, s7) \ + int t0, t1, t2, t3, p1, p2, p3, p4, p5, x0, x1, x2, x3; \ + p2 = s2; \ + p3 = s6; \ + p1 = (p2 + p3) * stbi__f2f(0.5411961f); \ + t2 = p1 + p3 * stbi__f2f(-1.847759065f); \ + t3 = p1 + p2 * stbi__f2f(0.765366865f); \ + p2 = s0; \ + p3 = s4; \ + t0 = stbi__fsh(p2 + p3); \ + t1 = stbi__fsh(p2 - p3); \ + x0 = t0 + t3; \ + x3 = t0 - t3; \ + x1 = t1 + t2; \ + x2 = t1 - t2; \ + t0 = s7; \ + t1 = s5; \ + t2 = s3; \ + t3 = s1; \ + p3 = t0 + t2; \ + p4 = t1 + t3; \ + p1 = t0 + t3; \ + p2 = t1 + t2; \ + p5 = (p3 + p4) * stbi__f2f(1.175875602f); \ + t0 = t0 * stbi__f2f(0.298631336f); \ + t1 = t1 * stbi__f2f(2.053119869f); \ + t2 = t2 * stbi__f2f(3.072711026f); \ + t3 = t3 * stbi__f2f(1.501321110f); \ + p1 = p5 + p1 * stbi__f2f(-0.899976223f); \ + p2 = p5 + p2 * stbi__f2f(-2.562915447f); \ + p3 = p3 * stbi__f2f(-1.961570560f); \ + p4 = p4 * stbi__f2f(-0.390180644f); \ + t3 += p1 + p4; \ + t2 += p2 + p3; \ + t1 += p2 + p4; \ + t0 += p1 + p3; + +static void stbi__idct_block(stbi_uc* out, int out_stride, short data[64]) +{ + int i, val[64], *v = val; + stbi_uc* o; + short* d = data; + + // columns + for (i = 0; i < 8; ++i, ++d, ++v) { + // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing + if (d[8] == 0 && d[16] == 0 && d[24] == 0 && d[32] == 0 && d[40] == 0 && + d[48] == 0 && d[56] == 0) { + // no shortcut 0 seconds + // (1|2|3|4|5|6|7)==0 0 seconds + // all separate -0.047 seconds + // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds + int dcterm = d[0] * 4; + v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = + dcterm; + } + else { + STBI__IDCT_1D(d[0], d[8], d[16], d[24], d[32], d[40], d[48], d[56]) + // constants scaled things up by 1<<12; let's bring them back + // down, but keep 2 extra bits of precision + x0 += 512; + x1 += 512; + x2 += 512; + x3 += 512; + v[0] = (x0 + t3) >> 10; + v[56] = (x0 - t3) >> 10; + v[8] = (x1 + t2) >> 10; + v[48] = (x1 - t2) >> 10; + v[16] = (x2 + t1) >> 10; + v[40] = (x2 - t1) >> 10; + v[24] = (x3 + t0) >> 10; + v[32] = (x3 - t0) >> 10; + } + } + + for (i = 0, v = val, o = out; i < 8; ++i, v += 8, o += out_stride) { + // no fast case since the first 1D IDCT spread components out + STBI__IDCT_1D(v[0], v[1], v[2], v[3], v[4], v[5], v[6], v[7]) + // constants scaled things up by 1<<12, plus we had 1<<2 from first + // loop, plus horizontal and vertical each scale by sqrt(8) so together + // we've got an extra 1<<3, so 1<<17 total we need to remove. + // so we want to round that, which means adding 0.5 * 1<<17, + // aka 65536. Also, we'll end up with -128 to 127 that we want + // to encode as 0..255 by adding 128, so we'll add that before the shift + x0 += 65536 + (128 << 17); + x1 += 65536 + (128 << 17); + x2 += 65536 + (128 << 17); + x3 += 65536 + (128 << 17); + // tried computing the shifts into temps, or'ing the temps to see + // if any were out of range, but that was slower + o[0] = stbi__clamp((x0 + t3) >> 17); + o[7] = stbi__clamp((x0 - t3) >> 17); + o[1] = stbi__clamp((x1 + t2) >> 17); + o[6] = stbi__clamp((x1 - t2) >> 17); + o[2] = stbi__clamp((x2 + t1) >> 17); + o[5] = stbi__clamp((x2 - t1) >> 17); + o[3] = stbi__clamp((x3 + t0) >> 17); + o[4] = stbi__clamp((x3 - t0) >> 17); + } +} + +#ifdef STBI_SSE2 +// sse2 integer IDCT. not the fastest possible implementation but it +// produces bit-identical results to the generic C version so it's +// fully "transparent". +static void stbi__idct_simd(stbi_uc* out, int out_stride, short data[64]) +{ + // This is constructed to match our regular (generic) integer IDCT exactly. + __m128i row0, row1, row2, row3, row4, row5, row6, row7; + __m128i tmp; + +// dot product constant: even elems=x, odd elems=y +#define dct_const(x, y) _mm_setr_epi16((x), (y), (x), (y), (x), (y), (x), (y)) + +// out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) +// out(1) = c1[even]*x + c1[odd]*y +#define dct_rot(out0, out1, x, y, c0, c1) \ + __m128i c0##lo = _mm_unpacklo_epi16((x), (y)); \ + __m128i c0##hi = _mm_unpackhi_epi16((x), (y)); \ + __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ + __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ + __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ + __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) + +// out = in << 12 (in 16-bit, out 32-bit) +#define dct_widen(out, in) \ + __m128i out##_l = \ + _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ + __m128i out##_h = \ + _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) + +// wide add +#define dct_wadd(out, a, b) \ + __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_add_epi32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ + __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) + +// butterfly a/b, add bias, then shift by "s" and pack +#define dct_bfly32o(out0, out1, a, b, bias, s) \ + { \ + __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ + __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ + dct_wadd(sum, abiased, b); \ + dct_wsub(dif, abiased, b); \ + out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), \ + _mm_srai_epi32(sum_h, s)); \ + out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), \ + _mm_srai_epi32(dif_h, s)); \ + } + +// 8-bit interleave step (for transposes) +#define dct_interleave8(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi8(a, b); \ + b = _mm_unpackhi_epi8(tmp, b) + +// 16-bit interleave step (for transposes) +#define dct_interleave16(a, b) \ + tmp = a; \ + a = _mm_unpacklo_epi16(a, b); \ + b = _mm_unpackhi_epi16(tmp, b) + +#define dct_pass(bias, shift) \ + { \ + /* even part */ \ + dct_rot(t2e, t3e, row2, row6, rot0_0, rot0_1); \ + __m128i sum04 = _mm_add_epi16(row0, row4); \ + __m128i dif04 = _mm_sub_epi16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + dct_rot(y0o, y2o, row7, row3, rot2_0, rot2_1); \ + dct_rot(y1o, y3o, row5, row1, rot3_0, rot3_1); \ + __m128i sum17 = _mm_add_epi16(row1, row7); \ + __m128i sum35 = _mm_add_epi16(row3, row5); \ + dct_rot(y4o, y5o, sum17, sum35, rot1_0, rot1_1); \ + dct_wadd(x4, y0o, y4o); \ + dct_wadd(x5, y1o, y5o); \ + dct_wadd(x6, y2o, y5o); \ + dct_wadd(x7, y3o, y4o); \ + dct_bfly32o(row0, row7, x0, x7, bias, shift); \ + dct_bfly32o(row1, row6, x1, x6, bias, shift); \ + dct_bfly32o(row2, row5, x2, x5, bias, shift); \ + dct_bfly32o(row3, row4, x3, x4, bias, shift); \ + } + + __m128i rot0_0 = + dct_const(stbi__f2f(0.5411961f), + stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); + __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f(0.765366865f), + stbi__f2f(0.5411961f)); + __m128i rot1_0 = + dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), + stbi__f2f(1.175875602f)); + __m128i rot1_1 = + dct_const(stbi__f2f(1.175875602f), + stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); + __m128i rot2_0 = + dct_const(stbi__f2f(-1.961570560f) + stbi__f2f(0.298631336f), + stbi__f2f(-1.961570560f)); + __m128i rot2_1 = + dct_const(stbi__f2f(-1.961570560f), + stbi__f2f(-1.961570560f) + stbi__f2f(3.072711026f)); + __m128i rot3_0 = + dct_const(stbi__f2f(-0.390180644f) + stbi__f2f(2.053119869f), + stbi__f2f(-0.390180644f)); + __m128i rot3_1 = + dct_const(stbi__f2f(-0.390180644f), + stbi__f2f(-0.390180644f) + stbi__f2f(1.501321110f)); + + // rounding biases in column/row passes, see stbi__idct_block for + // explanation. + __m128i bias_0 = _mm_set1_epi32(512); + __m128i bias_1 = _mm_set1_epi32(65536 + (128 << 17)); + + // load + row0 = _mm_load_si128((const __m128i*)(data + 0 * 8)); + row1 = _mm_load_si128((const __m128i*)(data + 1 * 8)); + row2 = _mm_load_si128((const __m128i*)(data + 2 * 8)); + row3 = _mm_load_si128((const __m128i*)(data + 3 * 8)); + row4 = _mm_load_si128((const __m128i*)(data + 4 * 8)); + row5 = _mm_load_si128((const __m128i*)(data + 5 * 8)); + row6 = _mm_load_si128((const __m128i*)(data + 6 * 8)); + row7 = _mm_load_si128((const __m128i*)(data + 7 * 8)); + + // column pass + dct_pass(bias_0, 10); + + { + // 16bit 8x8 transpose pass 1 + dct_interleave16(row0, row4); + dct_interleave16(row1, row5); + dct_interleave16(row2, row6); + dct_interleave16(row3, row7); + + // transpose pass 2 + dct_interleave16(row0, row2); + dct_interleave16(row1, row3); + dct_interleave16(row4, row6); + dct_interleave16(row5, row7); + + // transpose pass 3 + dct_interleave16(row0, row1); + dct_interleave16(row2, row3); + dct_interleave16(row4, row5); + dct_interleave16(row6, row7); + } + + // row pass + dct_pass(bias_1, 17); + + { + // pack + __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 + __m128i p1 = _mm_packus_epi16(row2, row3); + __m128i p2 = _mm_packus_epi16(row4, row5); + __m128i p3 = _mm_packus_epi16(row6, row7); + + // 8bit 8x8 transpose pass 1 + dct_interleave8(p0, p2); // a0e0a1e1... + dct_interleave8(p1, p3); // c0g0c1g1... + + // transpose pass 2 + dct_interleave8(p0, p1); // a0c0e0g0... + dct_interleave8(p2, p3); // b0d0f0h0... + + // transpose pass 3 + dct_interleave8(p0, p2); // a0b0c0d0... + dct_interleave8(p1, p3); // a4b4c4d4... + + // store + _mm_storel_epi64((__m128i*)out, p0); + out += out_stride; + _mm_storel_epi64((__m128i*)out, _mm_shuffle_epi32(p0, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i*)out, p2); + out += out_stride; + _mm_storel_epi64((__m128i*)out, _mm_shuffle_epi32(p2, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i*)out, p1); + out += out_stride; + _mm_storel_epi64((__m128i*)out, _mm_shuffle_epi32(p1, 0x4e)); + out += out_stride; + _mm_storel_epi64((__m128i*)out, p3); + out += out_stride; + _mm_storel_epi64((__m128i*)out, _mm_shuffle_epi32(p3, 0x4e)); + } + +#undef dct_const +#undef dct_rot +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_interleave8 +#undef dct_interleave16 +#undef dct_pass +} + +#endif // STBI_SSE2 + +#ifdef STBI_NEON + +// NEON integer IDCT. should produce bit-identical +// results to the generic C version. +static void stbi__idct_simd(stbi_uc* out, int out_stride, short data[64]) +{ + int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; + + int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); + int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); + int16x4_t rot0_2 = vdup_n_s16(stbi__f2f(0.765366865f)); + int16x4_t rot1_0 = vdup_n_s16(stbi__f2f(1.175875602f)); + int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); + int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); + int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); + int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); + int16x4_t rot3_0 = vdup_n_s16(stbi__f2f(0.298631336f)); + int16x4_t rot3_1 = vdup_n_s16(stbi__f2f(2.053119869f)); + int16x4_t rot3_2 = vdup_n_s16(stbi__f2f(3.072711026f)); + int16x4_t rot3_3 = vdup_n_s16(stbi__f2f(1.501321110f)); + +#define dct_long_mul(out, inq, coeff) \ + int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) + +#define dct_long_mac(out, acc, inq, coeff) \ + int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ + int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) + +#define dct_widen(out, inq) \ + int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ + int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) + +// wide add +#define dct_wadd(out, a, b) \ + int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vaddq_s32(a##_h, b##_h) + +// wide sub +#define dct_wsub(out, a, b) \ + int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ + int32x4_t out##_h = vsubq_s32(a##_h, b##_h) + +// butterfly a/b, then shift using "shiftop" by "s" and pack +#define dct_bfly32o(out0, out1, a, b, shiftop, s) \ + { \ + dct_wadd(sum, a, b); \ + dct_wsub(dif, a, b); \ + out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ + out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ + } + +#define dct_pass(shiftop, shift) \ + { \ + /* even part */ \ + int16x8_t sum26 = vaddq_s16(row2, row6); \ + dct_long_mul(p1e, sum26, rot0_0); \ + dct_long_mac(t2e, p1e, row6, rot0_1); \ + dct_long_mac(t3e, p1e, row2, rot0_2); \ + int16x8_t sum04 = vaddq_s16(row0, row4); \ + int16x8_t dif04 = vsubq_s16(row0, row4); \ + dct_widen(t0e, sum04); \ + dct_widen(t1e, dif04); \ + dct_wadd(x0, t0e, t3e); \ + dct_wsub(x3, t0e, t3e); \ + dct_wadd(x1, t1e, t2e); \ + dct_wsub(x2, t1e, t2e); \ + /* odd part */ \ + int16x8_t sum15 = vaddq_s16(row1, row5); \ + int16x8_t sum17 = vaddq_s16(row1, row7); \ + int16x8_t sum35 = vaddq_s16(row3, row5); \ + int16x8_t sum37 = vaddq_s16(row3, row7); \ + int16x8_t sumodd = vaddq_s16(sum17, sum35); \ + dct_long_mul(p5o, sumodd, rot1_0); \ + dct_long_mac(p1o, p5o, sum17, rot1_1); \ + dct_long_mac(p2o, p5o, sum35, rot1_2); \ + dct_long_mul(p3o, sum37, rot2_0); \ + dct_long_mul(p4o, sum15, rot2_1); \ + dct_wadd(sump13o, p1o, p3o); \ + dct_wadd(sump24o, p2o, p4o); \ + dct_wadd(sump23o, p2o, p3o); \ + dct_wadd(sump14o, p1o, p4o); \ + dct_long_mac(x4, sump13o, row7, rot3_0); \ + dct_long_mac(x5, sump24o, row5, rot3_1); \ + dct_long_mac(x6, sump23o, row3, rot3_2); \ + dct_long_mac(x7, sump14o, row1, rot3_3); \ + dct_bfly32o(row0, row7, x0, x7, shiftop, shift); \ + dct_bfly32o(row1, row6, x1, x6, shiftop, shift); \ + dct_bfly32o(row2, row5, x2, x5, shiftop, shift); \ + dct_bfly32o(row3, row4, x3, x4, shiftop, shift); \ + } + + // load + row0 = vld1q_s16(data + 0 * 8); + row1 = vld1q_s16(data + 1 * 8); + row2 = vld1q_s16(data + 2 * 8); + row3 = vld1q_s16(data + 3 * 8); + row4 = vld1q_s16(data + 4 * 8); + row5 = vld1q_s16(data + 5 * 8); + row6 = vld1q_s16(data + 6 * 8); + row7 = vld1q_s16(data + 7 * 8); + + // add DC bias + row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); + + // column pass + dct_pass(vrshrn_n_s32, 10); + + // 16bit 8x8 transpose + { +// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. +// whether compilers actually get this is another story, sadly. +#define dct_trn16(x, y) \ + { \ + int16x8x2_t t = vtrnq_s16(x, y); \ + x = t.val[0]; \ + y = t.val[1]; \ + } +#define dct_trn32(x, y) \ + { \ + int32x4x2_t t = \ + vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); \ + x = vreinterpretq_s16_s32(t.val[0]); \ + y = vreinterpretq_s16_s32(t.val[1]); \ + } +#define dct_trn64(x, y) \ + { \ + int16x8_t x0 = x; \ + int16x8_t y0 = y; \ + x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); \ + y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); \ + } + + // pass 1 + dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 + dct_trn16(row2, row3); + dct_trn16(row4, row5); + dct_trn16(row6, row7); + + // pass 2 + dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 + dct_trn32(row1, row3); + dct_trn32(row4, row6); + dct_trn32(row5, row7); + + // pass 3 + dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 + dct_trn64(row1, row5); + dct_trn64(row2, row6); + dct_trn64(row3, row7); + +#undef dct_trn16 +#undef dct_trn32 +#undef dct_trn64 + } + + // row pass + // vrshrn_n_s32 only supports shifts up to 16, we need + // 17. so do a non-rounding shift of 16 first then follow + // up with a rounding shift by 1. + dct_pass(vshrn_n_s32, 16); + + { + // pack and round + uint8x8_t p0 = vqrshrun_n_s16(row0, 1); + uint8x8_t p1 = vqrshrun_n_s16(row1, 1); + uint8x8_t p2 = vqrshrun_n_s16(row2, 1); + uint8x8_t p3 = vqrshrun_n_s16(row3, 1); + uint8x8_t p4 = vqrshrun_n_s16(row4, 1); + uint8x8_t p5 = vqrshrun_n_s16(row5, 1); + uint8x8_t p6 = vqrshrun_n_s16(row6, 1); + uint8x8_t p7 = vqrshrun_n_s16(row7, 1); + + // again, these can translate into one instruction, but often don't. +#define dct_trn8_8(x, y) \ + { \ + uint8x8x2_t t = vtrn_u8(x, y); \ + x = t.val[0]; \ + y = t.val[1]; \ + } +#define dct_trn8_16(x, y) \ + { \ + uint16x4x2_t t = \ + vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); \ + x = vreinterpret_u8_u16(t.val[0]); \ + y = vreinterpret_u8_u16(t.val[1]); \ + } +#define dct_trn8_32(x, y) \ + { \ + uint32x2x2_t t = \ + vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); \ + x = vreinterpret_u8_u32(t.val[0]); \ + y = vreinterpret_u8_u32(t.val[1]); \ + } + + // sadly can't use interleaved stores here since we only write + // 8 bytes to each scan line! + + // 8x8 8-bit transpose pass 1 + dct_trn8_8(p0, p1); + dct_trn8_8(p2, p3); + dct_trn8_8(p4, p5); + dct_trn8_8(p6, p7); + + // pass 2 + dct_trn8_16(p0, p2); + dct_trn8_16(p1, p3); + dct_trn8_16(p4, p6); + dct_trn8_16(p5, p7); + + // pass 3 + dct_trn8_32(p0, p4); + dct_trn8_32(p1, p5); + dct_trn8_32(p2, p6); + dct_trn8_32(p3, p7); + + // store + vst1_u8(out, p0); + out += out_stride; + vst1_u8(out, p1); + out += out_stride; + vst1_u8(out, p2); + out += out_stride; + vst1_u8(out, p3); + out += out_stride; + vst1_u8(out, p4); + out += out_stride; + vst1_u8(out, p5); + out += out_stride; + vst1_u8(out, p6); + out += out_stride; + vst1_u8(out, p7); + +#undef dct_trn8_8 +#undef dct_trn8_16 +#undef dct_trn8_32 + } + +#undef dct_long_mul +#undef dct_long_mac +#undef dct_widen +#undef dct_wadd +#undef dct_wsub +#undef dct_bfly32o +#undef dct_pass +} + +#endif // STBI_NEON + +#define STBI__MARKER_none 0xff +// if there's a pending marker from the entropy stream, return that +// otherwise, fetch from the stream and get a marker. if there's no +// marker, return 0xff, which is never a valid marker value +static stbi_uc stbi__get_marker(stbi__jpeg* j) +{ + stbi_uc x; + if (j->marker != STBI__MARKER_none) { + x = j->marker; + j->marker = STBI__MARKER_none; + return x; + } + x = stbi__get8(j->s); + if (x != 0xff) + return STBI__MARKER_none; + while (x == 0xff) + x = stbi__get8(j->s); // consume repeated 0xff fill bytes + return x; +} + +// in each scan, we'll have scan_n components, and the order +// of the components is specified by order[] +#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) + +// after a restart interval, stbi__jpeg_reset the entropy decoder and +// the dc prediction +static void stbi__jpeg_reset(stbi__jpeg* j) +{ + j->code_bits = 0; + j->code_buffer = 0; + j->nomore = 0; + j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = + j->img_comp[3].dc_pred = 0; + j->marker = STBI__MARKER_none; + j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; + j->eob_run = 0; + // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, + // since we don't even allow 1<<30 pixels +} + +static int stbi__parse_entropy_coded_data(stbi__jpeg* z) +{ + stbi__jpeg_reset(z); + if (!z->progressive) { + if (z->scan_n == 1) { + int i, j; + STBI_SIMD_ALIGN(short, data[64]); + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a + // time, in trivial scanline order number of blocks to do just + // depends on how many actual "pixels" this component has, + // independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block( + z, data, z->huff_dc + z->img_comp[n].hd, + z->huff_ac + ha, z->fast_ac[ha], n, + z->dequant[z->img_comp[n].tq])) + return 0; + z->idct_block_kernel(z->img_comp[n].data + + z->img_comp[n].w2 * j * 8 + i * 8, + z->img_comp[n].w2, data); + // every data block is an MCU, so countdown the restart + // interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe(z); + // if it's NOT a restart, then just bail, so we get + // corrupt data rather than no data + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + else { // interleaved + int i, j, k, x, y; + STBI_SIMD_ALIGN(short, data[64]); + for (j = 0; j < z->img_mcu_y; ++j) { + for (i = 0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in + // order + for (k = 0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's + // just determined by the basic H and V specified for + // the component + for (y = 0; y < z->img_comp[n].v; ++y) { + for (x = 0; x < z->img_comp[n].h; ++x) { + int x2 = (i * z->img_comp[n].h + x) * 8; + int y2 = (j * z->img_comp[n].v + y) * 8; + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block( + z, data, z->huff_dc + z->img_comp[n].hd, + z->huff_ac + ha, z->fast_ac[ha], n, + z->dequant[z->img_comp[n].tq])) + return 0; + z->idct_block_kernel( + z->img_comp[n].data + + z->img_comp[n].w2 * y2 + x2, + z->img_comp[n].w2, data); + } + } + } + // after all interleaved components, that's an interleaved + // MCU, so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } + else { + if (z->scan_n == 1) { + int i, j; + int n = z->order[0]; + // non-interleaved data, we just need to process one block at a + // time, in trivial scanline order number of blocks to do just + // depends on how many actual "pixels" this component has, + // independent of interleaved MCU blocking and such + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + short* data = z->img_comp[n].coeff + + 64 * (i + j * z->img_comp[n].coeff_w); + if (z->spec_start == 0) { + if (!stbi__jpeg_decode_block_prog_dc( + z, data, &z->huff_dc[z->img_comp[n].hd], n)) + return 0; + } + else { + int ha = z->img_comp[n].ha; + if (!stbi__jpeg_decode_block_prog_ac( + z, data, &z->huff_ac[ha], z->fast_ac[ha])) + return 0; + } + // every data block is an MCU, so countdown the restart + // interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + else { // interleaved + int i, j, k, x, y; + for (j = 0; j < z->img_mcu_y; ++j) { + for (i = 0; i < z->img_mcu_x; ++i) { + // scan an interleaved mcu... process scan_n components in + // order + for (k = 0; k < z->scan_n; ++k) { + int n = z->order[k]; + // scan out an mcu's worth of this component; that's + // just determined by the basic H and V specified for + // the component + for (y = 0; y < z->img_comp[n].v; ++y) { + for (x = 0; x < z->img_comp[n].h; ++x) { + int x2 = (i * z->img_comp[n].h + x); + int y2 = (j * z->img_comp[n].v + y); + short* data = + z->img_comp[n].coeff + + 64 * (x2 + y2 * z->img_comp[n].coeff_w); + if (!stbi__jpeg_decode_block_prog_dc( + z, data, &z->huff_dc[z->img_comp[n].hd], + n)) + return 0; + } + } + } + // after all interleaved components, that's an interleaved + // MCU, so now count down the restart interval + if (--z->todo <= 0) { + if (z->code_bits < 24) + stbi__grow_buffer_unsafe(z); + if (!STBI__RESTART(z->marker)) + return 1; + stbi__jpeg_reset(z); + } + } + } + return 1; + } + } +} + +static void stbi__jpeg_dequantize(short* data, stbi__uint16* dequant) +{ + int i; + for (i = 0; i < 64; ++i) + data[i] *= dequant[i]; +} + +static void stbi__jpeg_finish(stbi__jpeg* z) +{ + if (z->progressive) { + // dequantize and idct the data + int i, j, n; + for (n = 0; n < z->s->img_n; ++n) { + int w = (z->img_comp[n].x + 7) >> 3; + int h = (z->img_comp[n].y + 7) >> 3; + for (j = 0; j < h; ++j) { + for (i = 0; i < w; ++i) { + short* data = z->img_comp[n].coeff + + 64 * (i + j * z->img_comp[n].coeff_w); + stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); + z->idct_block_kernel(z->img_comp[n].data + + z->img_comp[n].w2 * j * 8 + i * 8, + z->img_comp[n].w2, data); + } + } + } + } +} + +static int stbi__process_marker(stbi__jpeg* z, int m) +{ + int L; + switch (m) { + case STBI__MARKER_none: // no marker found + return stbi__err("expected marker", "Corrupt JPEG"); + + case 0xDD: // DRI - specify restart interval + if (stbi__get16be(z->s) != 4) + return stbi__err("bad DRI len", "Corrupt JPEG"); + z->restart_interval = stbi__get16be(z->s); + return 1; + + case 0xDB: // DQT - define quantization table + L = stbi__get16be(z->s) - 2; + while (L > 0) { + int q = stbi__get8(z->s); + int p = q >> 4, sixteen = (p != 0); + int t = q & 15, i; + if (p != 0 && p != 1) + return stbi__err("bad DQT type", "Corrupt JPEG"); + if (t > 3) + return stbi__err("bad DQT table", "Corrupt JPEG"); + + for (i = 0; i < 64; ++i) + z->dequant[t][stbi__jpeg_dezigzag[i]] = + (stbi__uint16)(sixteen ? stbi__get16be(z->s) + : stbi__get8(z->s)); + L -= (sixteen ? 129 : 65); + } + return L == 0; + + case 0xC4: // DHT - define huffman table + L = stbi__get16be(z->s) - 2; + while (L > 0) { + stbi_uc* v; + int sizes[16], i, n = 0; + int q = stbi__get8(z->s); + int tc = q >> 4; + int th = q & 15; + if (tc > 1 || th > 3) + return stbi__err("bad DHT header", "Corrupt JPEG"); + for (i = 0; i < 16; ++i) { + sizes[i] = stbi__get8(z->s); + n += sizes[i]; + } + L -= 17; + if (tc == 0) { + if (!stbi__build_huffman(z->huff_dc + th, sizes)) + return 0; + v = z->huff_dc[th].values; + } + else { + if (!stbi__build_huffman(z->huff_ac + th, sizes)) + return 0; + v = z->huff_ac[th].values; + } + for (i = 0; i < n; ++i) + v[i] = stbi__get8(z->s); + if (tc != 0) + stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); + L -= n; + } + return L == 0; + } + + // check for comment block or APP blocks + if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { + L = stbi__get16be(z->s); + if (L < 2) { + if (m == 0xFE) + return stbi__err("bad COM len", "Corrupt JPEG"); + else + return stbi__err("bad APP len", "Corrupt JPEG"); + } + L -= 2; + + if (m == 0xE0 && L >= 5) { // JFIF APP0 segment + static const unsigned char tag[5] = {'J', 'F', 'I', 'F', '\0'}; + int ok = 1; + int i; + for (i = 0; i < 5; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 5; + if (ok) + z->jfif = 1; + } + else if (m == 0xEE && L >= 12) { // Adobe APP14 segment + static const unsigned char tag[6] = {'A', 'd', 'o', 'b', 'e', '\0'}; + int ok = 1; + int i; + for (i = 0; i < 6; ++i) + if (stbi__get8(z->s) != tag[i]) + ok = 0; + L -= 6; + if (ok) { + stbi__get8(z->s); // version + stbi__get16be(z->s); // flags0 + stbi__get16be(z->s); // flags1 + z->app14_color_transform = stbi__get8(z->s); // color transform + L -= 6; + } + } + + stbi__skip(z->s, L); + return 1; + } + + return stbi__err("unknown marker", "Corrupt JPEG"); +} + +// after we see SOS +static int stbi__process_scan_header(stbi__jpeg* z) +{ + int i; + int Ls = stbi__get16be(z->s); + z->scan_n = stbi__get8(z->s); + if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int)z->s->img_n) + return stbi__err("bad SOS component count", "Corrupt JPEG"); + if (Ls != 6 + 2 * z->scan_n) + return stbi__err("bad SOS len", "Corrupt JPEG"); + for (i = 0; i < z->scan_n; ++i) { + int id = stbi__get8(z->s), which; + int q = stbi__get8(z->s); + for (which = 0; which < z->s->img_n; ++which) + if (z->img_comp[which].id == id) + break; + if (which == z->s->img_n) + return 0; // no match + z->img_comp[which].hd = q >> 4; + if (z->img_comp[which].hd > 3) + return stbi__err("bad DC huff", "Corrupt JPEG"); + z->img_comp[which].ha = q & 15; + if (z->img_comp[which].ha > 3) + return stbi__err("bad AC huff", "Corrupt JPEG"); + z->order[i] = which; + } + + { + int aa; + z->spec_start = stbi__get8(z->s); + z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 + aa = stbi__get8(z->s); + z->succ_high = (aa >> 4); + z->succ_low = (aa & 15); + if (z->progressive) { + if (z->spec_start > 63 || z->spec_end > 63 || + z->spec_start > z->spec_end || z->succ_high > 13 || + z->succ_low > 13) + return stbi__err("bad SOS", "Corrupt JPEG"); + } + else { + if (z->spec_start != 0) + return stbi__err("bad SOS", "Corrupt JPEG"); + if (z->succ_high != 0 || z->succ_low != 0) + return stbi__err("bad SOS", "Corrupt JPEG"); + z->spec_end = 63; + } + } + + return 1; +} + +static int stbi__free_jpeg_components(stbi__jpeg* z, int ncomp, int why) +{ + int i; + for (i = 0; i < ncomp; ++i) { + if (z->img_comp[i].raw_data) { + STBI_FREE(z->img_comp[i].raw_data); + z->img_comp[i].raw_data = NULL; + z->img_comp[i].data = NULL; + } + if (z->img_comp[i].raw_coeff) { + STBI_FREE(z->img_comp[i].raw_coeff); + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].coeff = 0; + } + if (z->img_comp[i].linebuf) { + STBI_FREE(z->img_comp[i].linebuf); + z->img_comp[i].linebuf = NULL; + } + } + return why; +} + +static int stbi__process_frame_header(stbi__jpeg* z, int scan) +{ + stbi__context* s = z->s; + int Lf, p, i, q, h_max = 1, v_max = 1, c; + Lf = stbi__get16be(s); + if (Lf < 11) + return stbi__err("bad SOF len", "Corrupt JPEG"); // JPEG + p = stbi__get8(s); + if (p != 8) + return stbi__err( + "only 8-bit", + "JPEG format not supported: 8-bit only"); // JPEG baseline + s->img_y = stbi__get16be(s); + if (s->img_y == 0) + return stbi__err( + "no header height", + "JPEG format not supported: delayed height"); // Legal, but we don't + // handle it--but + // neither does IJG + s->img_x = stbi__get16be(s); + if (s->img_x == 0) + return stbi__err("0 width", "Corrupt JPEG"); // JPEG requires + c = stbi__get8(s); + if (c != 3 && c != 1 && c != 4) + return stbi__err("bad component count", "Corrupt JPEG"); + s->img_n = c; + for (i = 0; i < c; ++i) { + z->img_comp[i].data = NULL; + z->img_comp[i].linebuf = NULL; + } + + if (Lf != 8 + 3 * s->img_n) + return stbi__err("bad SOF len", "Corrupt JPEG"); + + z->rgb = 0; + for (i = 0; i < s->img_n; ++i) { + static const unsigned char rgb[3] = {'R', 'G', 'B'}; + z->img_comp[i].id = stbi__get8(s); + if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) + ++z->rgb; + q = stbi__get8(s); + z->img_comp[i].h = (q >> 4); + if (!z->img_comp[i].h || z->img_comp[i].h > 4) + return stbi__err("bad H", "Corrupt JPEG"); + z->img_comp[i].v = q & 15; + if (!z->img_comp[i].v || z->img_comp[i].v > 4) + return stbi__err("bad V", "Corrupt JPEG"); + z->img_comp[i].tq = stbi__get8(s); + if (z->img_comp[i].tq > 3) + return stbi__err("bad TQ", "Corrupt JPEG"); + } + + if (scan != STBI__SCAN_load) + return 1; + + if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) + return stbi__err("too large", "Image too large to decode"); + + for (i = 0; i < s->img_n; ++i) { + if (z->img_comp[i].h > h_max) + h_max = z->img_comp[i].h; + if (z->img_comp[i].v > v_max) + v_max = z->img_comp[i].v; + } + + // compute interleaved mcu info + z->img_h_max = h_max; + z->img_v_max = v_max; + z->img_mcu_w = h_max * 8; + z->img_mcu_h = v_max * 8; + // these sizes can't be more than 17 bits + z->img_mcu_x = (s->img_x + z->img_mcu_w - 1) / z->img_mcu_w; + z->img_mcu_y = (s->img_y + z->img_mcu_h - 1) / z->img_mcu_h; + + for (i = 0; i < s->img_n; ++i) { + // number of effective pixels (e.g. for non-interleaved MCU) + z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max - 1) / h_max; + z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max - 1) / v_max; + // to simplify generation, we'll allocate enough memory to decode + // the bogus oversized data from using interleaved MCUs and their + // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't + // discard the extra data until colorspace conversion + // + // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked + // earlier) so these muls can't overflow with 32-bit ints (which we + // require) + z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; + z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; + z->img_comp[i].coeff = 0; + z->img_comp[i].raw_coeff = 0; + z->img_comp[i].linebuf = NULL; + z->img_comp[i].raw_data = + stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); + if (z->img_comp[i].raw_data == NULL) + return stbi__free_jpeg_components( + z, i + 1, stbi__err("outofmem", "Out of memory")); + // align blocks for idct using mmx/sse + z->img_comp[i].data = + (stbi_uc*)(((size_t)z->img_comp[i].raw_data + 15) & ~15); + if (z->progressive) { + // w2, h2 are multiples of 8 (see above) + z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; + z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; + z->img_comp[i].raw_coeff = stbi__malloc_mad3( + z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); + if (z->img_comp[i].raw_coeff == NULL) + return stbi__free_jpeg_components( + z, i + 1, stbi__err("outofmem", "Out of memory")); + z->img_comp[i].coeff = + (short*)(((size_t)z->img_comp[i].raw_coeff + 15) & ~15); + } + } + + return 1; +} + +// use comparisons since in some cases we handle more than one case (e.g. SOF) +#define stbi__DNL(x) ((x) == 0xdc) +#define stbi__SOI(x) ((x) == 0xd8) +#define stbi__EOI(x) ((x) == 0xd9) +#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) +#define stbi__SOS(x) ((x) == 0xda) + +#define stbi__SOF_progressive(x) ((x) == 0xc2) + +static int stbi__decode_jpeg_header(stbi__jpeg* z, int scan) +{ + int m; + z->jfif = 0; + z->app14_color_transform = -1; // valid values are 0,1,2 + z->marker = STBI__MARKER_none; // initialize cached marker to empty + m = stbi__get_marker(z); + if (!stbi__SOI(m)) + return stbi__err("no SOI", "Corrupt JPEG"); + if (scan == STBI__SCAN_type) + return 1; + m = stbi__get_marker(z); + while (!stbi__SOF(m)) { + if (!stbi__process_marker(z, m)) + return 0; + m = stbi__get_marker(z); + while (m == STBI__MARKER_none) { + // some files have extra padding after their blocks, so ok, we'll + // scan + if (stbi__at_eof(z->s)) + return stbi__err("no SOF", "Corrupt JPEG"); + m = stbi__get_marker(z); + } + } + z->progressive = stbi__SOF_progressive(m); + if (!stbi__process_frame_header(z, scan)) + return 0; + return 1; +} + +// decode image to YCbCr format +static int stbi__decode_jpeg_image(stbi__jpeg* j) +{ + int m; + for (m = 0; m < 4; m++) { + j->img_comp[m].raw_data = NULL; + j->img_comp[m].raw_coeff = NULL; + } + j->restart_interval = 0; + if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) + return 0; + m = stbi__get_marker(j); + while (!stbi__EOI(m)) { + if (stbi__SOS(m)) { + if (!stbi__process_scan_header(j)) + return 0; + if (!stbi__parse_entropy_coded_data(j)) + return 0; + if (j->marker == STBI__MARKER_none) { + // handle 0s at the end of image data from IP Kamera 9060 + while (!stbi__at_eof(j->s)) { + int x = stbi__get8(j->s); + if (x == 255) { + j->marker = stbi__get8(j->s); + break; + } + } + // if we reach eof without hitting a marker, stbi__get_marker() + // below will fail and we'll eventually return 0 + } + } + else if (stbi__DNL(m)) { + int Ld = stbi__get16be(j->s); + stbi__uint32 NL = stbi__get16be(j->s); + if (Ld != 4) + return stbi__err("bad DNL len", "Corrupt JPEG"); + if (NL != j->s->img_y) + return stbi__err("bad DNL height", "Corrupt JPEG"); + } + else { + if (!stbi__process_marker(j, m)) + return 0; + } + m = stbi__get_marker(j); + } + if (j->progressive) + stbi__jpeg_finish(j); + return 1; +} + +// static jfif-centered resampling (across block boundaries) + +typedef stbi_uc* (*resample_row_func)(stbi_uc* out, stbi_uc* in0, stbi_uc* in1, + int w, int hs); + +#define stbi__div4(x) ((stbi_uc)((x) >> 2)) + +static stbi_uc* resample_row_1(stbi_uc* out, stbi_uc* in_near, stbi_uc* in_far, + int w, int hs) +{ + STBI_NOTUSED(out); + STBI_NOTUSED(in_far); + STBI_NOTUSED(w); + STBI_NOTUSED(hs); + return in_near; +} + +static stbi_uc* stbi__resample_row_v_2(stbi_uc* out, stbi_uc* in_near, + stbi_uc* in_far, int w, int hs) +{ + // need to generate two samples vertically for every one in input + int i; + STBI_NOTUSED(hs); + for (i = 0; i < w; ++i) + out[i] = stbi__div4(3 * in_near[i] + in_far[i] + 2); + return out; +} + +static stbi_uc* stbi__resample_row_h_2(stbi_uc* out, stbi_uc* in_near, + stbi_uc* in_far, int w, int hs) +{ + // need to generate two samples horizontally for every one in input + int i; + stbi_uc* input = in_near; + + if (w == 1) { + // if only one sample, can't do any interpolation + out[0] = out[1] = input[0]; + return out; + } + + out[0] = input[0]; + out[1] = stbi__div4(input[0] * 3 + input[1] + 2); + for (i = 1; i < w - 1; ++i) { + int n = 3 * input[i] + 2; + out[i * 2 + 0] = stbi__div4(n + input[i - 1]); + out[i * 2 + 1] = stbi__div4(n + input[i + 1]); + } + out[i * 2 + 0] = stbi__div4(input[w - 2] * 3 + input[w - 1] + 2); + out[i * 2 + 1] = input[w - 1]; + + STBI_NOTUSED(in_far); + STBI_NOTUSED(hs); + + return out; +} + +#define stbi__div16(x) ((stbi_uc)((x) >> 4)) + +static stbi_uc* stbi__resample_row_hv_2(stbi_uc* out, stbi_uc* in_near, + stbi_uc* in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i, t0, t1; + if (w == 1) { + out[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3 * in_near[0] + in_far[0]; + out[0] = stbi__div4(t1 + 2); + for (i = 1; i < w; ++i) { + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8); + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + } + out[w * 2 - 1] = stbi__div4(t1 + 2); + + STBI_NOTUSED(hs); + + return out; +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static stbi_uc* stbi__resample_row_hv_2_simd(stbi_uc* out, stbi_uc* in_near, + stbi_uc* in_far, int w, int hs) +{ + // need to generate 2x2 samples for every one in input + int i = 0, t0, t1; + + if (w == 1) { + out[0] = out[1] = stbi__div4(3 * in_near[0] + in_far[0] + 2); + return out; + } + + t1 = 3 * in_near[0] + in_far[0]; + // process groups of 8 pixels for as long as we can. + // note we can't handle the last pixel in a row in this loop + // because we need to handle the filter boundary conditions. + for (; i < ((w - 1) & ~7); i += 8) { +#if defined(STBI_SSE2) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + __m128i zero = _mm_setzero_si128(); + __m128i farb = _mm_loadl_epi64((__m128i*)(in_far + i)); + __m128i nearb = _mm_loadl_epi64((__m128i*)(in_near + i)); + __m128i farw = _mm_unpacklo_epi8(farb, zero); + __m128i nearw = _mm_unpacklo_epi8(nearb, zero); + __m128i diff = _mm_sub_epi16(farw, nearw); + __m128i nears = _mm_slli_epi16(nearw, 2); + __m128i curr = _mm_add_epi16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + __m128i prv0 = _mm_slli_si128(curr, 2); + __m128i nxt0 = _mm_srli_si128(curr, 2); + __m128i prev = _mm_insert_epi16(prv0, t1, 0); + __m128i next = + _mm_insert_epi16(nxt0, 3 * in_near[i + 8] + in_far[i + 8], 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + __m128i bias = _mm_set1_epi16(8); + __m128i curs = _mm_slli_epi16(curr, 2); + __m128i prvd = _mm_sub_epi16(prev, curr); + __m128i nxtd = _mm_sub_epi16(next, curr); + __m128i curb = _mm_add_epi16(curs, bias); + __m128i even = _mm_add_epi16(prvd, curb); + __m128i odd = _mm_add_epi16(nxtd, curb); + + // interleave even and odd pixels, then undo scaling. + __m128i int0 = _mm_unpacklo_epi16(even, odd); + __m128i int1 = _mm_unpackhi_epi16(even, odd); + __m128i de0 = _mm_srli_epi16(int0, 4); + __m128i de1 = _mm_srli_epi16(int1, 4); + + // pack and write output + __m128i outv = _mm_packus_epi16(de0, de1); + _mm_storeu_si128((__m128i*)(out + i * 2), outv); +#elif defined(STBI_NEON) + // load and perform the vertical filtering pass + // this uses 3*x + y = 4*x + (y - x) + uint8x8_t farb = vld1_u8(in_far + i); + uint8x8_t nearb = vld1_u8(in_near + i); + int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); + int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); + int16x8_t curr = vaddq_s16(nears, diff); // current row + + // horizontal filter works the same based on shifted vers of current + // row. "prev" is current row shifted right by 1 pixel; we need to + // insert the previous pixel value (from t1). + // "next" is current row shifted left by 1 pixel, with first pixel + // of next block of 8 pixels added in. + int16x8_t prv0 = vextq_s16(curr, curr, 7); + int16x8_t nxt0 = vextq_s16(curr, curr, 1); + int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); + int16x8_t next = + vsetq_lane_s16(3 * in_near[i + 8] + in_far[i + 8], nxt0, 7); + + // horizontal filter, polyphase implementation since it's convenient: + // even pixels = 3*cur + prev = cur*4 + (prev - cur) + // odd pixels = 3*cur + next = cur*4 + (next - cur) + // note the shared term. + int16x8_t curs = vshlq_n_s16(curr, 2); + int16x8_t prvd = vsubq_s16(prev, curr); + int16x8_t nxtd = vsubq_s16(next, curr); + int16x8_t even = vaddq_s16(curs, prvd); + int16x8_t odd = vaddq_s16(curs, nxtd); + + // undo scaling and round, then store with even/odd phases interleaved + uint8x8x2_t o; + o.val[0] = vqrshrun_n_s16(even, 4); + o.val[1] = vqrshrun_n_s16(odd, 4); + vst2_u8(out + i * 2, o); +#endif + + // "previous" value for next iter + t1 = 3 * in_near[i + 7] + in_far[i + 7]; + } + + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + + for (++i; i < w; ++i) { + t0 = t1; + t1 = 3 * in_near[i] + in_far[i]; + out[i * 2 - 1] = stbi__div16(3 * t0 + t1 + 8); + out[i * 2] = stbi__div16(3 * t1 + t0 + 8); + } + out[w * 2 - 1] = stbi__div4(t1 + 2); + + STBI_NOTUSED(hs); + + return out; +} +#endif + +static stbi_uc* stbi__resample_row_generic(stbi_uc* out, stbi_uc* in_near, + stbi_uc* in_far, int w, int hs) +{ + // resample with nearest-neighbor + int i, j; + STBI_NOTUSED(in_far); + for (i = 0; i < w; ++i) + for (j = 0; j < hs; ++j) + out[i * hs + j] = in_near[i]; + return out; +} + +// this is a reduced-precision calculation of YCbCr-to-RGB introduced +// to make sure the code produces the same results in both SIMD and scalar +#define stbi__float2fixed(x) (((int)((x)*4096.0f + 0.5f)) << 8) +static void stbi__YCbCr_to_RGB_row(stbi_uc* out, const stbi_uc* y, + const stbi_uc* pcb, const stbi_uc* pcr, + int count, int step) +{ + int i; + for (i = 0; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1 << 19); // rounding + int r, g, b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr * stbi__float2fixed(1.40200f); + g = y_fixed + (cr * -stbi__float2fixed(0.71414f)) + + ((cb * -stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb * stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned)r > 255) { + if (r < 0) + r = 0; + else + r = 255; + } + if ((unsigned)g > 255) { + if (g < 0) + g = 0; + else + g = 255; + } + if ((unsigned)b > 255) { + if (b < 0) + b = 0; + else + b = 255; + } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} + +#if defined(STBI_SSE2) || defined(STBI_NEON) +static void stbi__YCbCr_to_RGB_simd(stbi_uc* out, stbi_uc const* y, + stbi_uc const* pcb, stbi_uc const* pcr, + int count, int step) +{ + int i = 0; + +#ifdef STBI_SSE2 + // step == 3 is pretty ugly on the final interleave, and i'm not convinced + // it's useful in practice (you wouldn't use it for textures, for example). + // so just accelerate step == 4 case. + if (step == 4) { + // this is a fairly straightforward implementation and not + // super-optimized. + __m128i signflip = _mm_set1_epi8(-0x80); + __m128i cr_const0 = _mm_set1_epi16((short)(1.40200f * 4096.0f + 0.5f)); + __m128i cr_const1 = _mm_set1_epi16(-(short)(0.71414f * 4096.0f + 0.5f)); + __m128i cb_const0 = _mm_set1_epi16(-(short)(0.34414f * 4096.0f + 0.5f)); + __m128i cb_const1 = _mm_set1_epi16((short)(1.77200f * 4096.0f + 0.5f)); + __m128i y_bias = _mm_set1_epi8((char)(unsigned char)128); + __m128i xw = _mm_set1_epi16(255); // alpha channel + + for (; i + 7 < count; i += 8) { + // load + __m128i y_bytes = _mm_loadl_epi64((__m128i*)(y + i)); + __m128i cr_bytes = _mm_loadl_epi64((__m128i*)(pcr + i)); + __m128i cb_bytes = _mm_loadl_epi64((__m128i*)(pcb + i)); + __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 + __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 + + // unpack to short (and left-shift cr, cb by 8) + __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); + __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); + __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); + + // color transform + __m128i yws = _mm_srli_epi16(yw, 4); + __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); + __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); + __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); + __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); + __m128i rws = _mm_add_epi16(cr0, yws); + __m128i gwt = _mm_add_epi16(cb0, yws); + __m128i bws = _mm_add_epi16(yws, cb1); + __m128i gws = _mm_add_epi16(gwt, cr1); + + // descale + __m128i rw = _mm_srai_epi16(rws, 4); + __m128i bw = _mm_srai_epi16(bws, 4); + __m128i gw = _mm_srai_epi16(gws, 4); + + // back to byte, set up for transpose + __m128i brb = _mm_packus_epi16(rw, bw); + __m128i gxb = _mm_packus_epi16(gw, xw); + + // transpose to interleave channels + __m128i t0 = _mm_unpacklo_epi8(brb, gxb); + __m128i t1 = _mm_unpackhi_epi8(brb, gxb); + __m128i o0 = _mm_unpacklo_epi16(t0, t1); + __m128i o1 = _mm_unpackhi_epi16(t0, t1); + + // store + _mm_storeu_si128((__m128i*)(out + 0), o0); + _mm_storeu_si128((__m128i*)(out + 16), o1); + out += 32; + } + } +#endif + +#ifdef STBI_NEON + // in this version, step=3 support would be easy to add. but is there + // demand? + if (step == 4) { + // this is a fairly straightforward implementation and not + // super-optimized. + uint8x8_t signflip = vdup_n_u8(0x80); + int16x8_t cr_const0 = vdupq_n_s16((short)(1.40200f * 4096.0f + 0.5f)); + int16x8_t cr_const1 = vdupq_n_s16(-(short)(0.71414f * 4096.0f + 0.5f)); + int16x8_t cb_const0 = vdupq_n_s16(-(short)(0.34414f * 4096.0f + 0.5f)); + int16x8_t cb_const1 = vdupq_n_s16((short)(1.77200f * 4096.0f + 0.5f)); + + for (; i + 7 < count; i += 8) { + // load + uint8x8_t y_bytes = vld1_u8(y + i); + uint8x8_t cr_bytes = vld1_u8(pcr + i); + uint8x8_t cb_bytes = vld1_u8(pcb + i); + int8x8_t cr_biased = + vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); + int8x8_t cb_biased = + vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); + + // expand to s16 + int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); + int16x8_t crw = vshll_n_s8(cr_biased, 7); + int16x8_t cbw = vshll_n_s8(cb_biased, 7); + + // color transform + int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); + int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); + int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); + int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); + int16x8_t rws = vaddq_s16(yws, cr0); + int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); + int16x8_t bws = vaddq_s16(yws, cb1); + + // undo scaling, round, convert to byte + uint8x8x4_t o; + o.val[0] = vqrshrun_n_s16(rws, 4); + o.val[1] = vqrshrun_n_s16(gws, 4); + o.val[2] = vqrshrun_n_s16(bws, 4); + o.val[3] = vdup_n_u8(255); + + // store, interleaving r/g/b/a + vst4_u8(out, o); + out += 8 * 4; + } + } +#endif + + for (; i < count; ++i) { + int y_fixed = (y[i] << 20) + (1 << 19); // rounding + int r, g, b; + int cr = pcr[i] - 128; + int cb = pcb[i] - 128; + r = y_fixed + cr * stbi__float2fixed(1.40200f); + g = y_fixed + cr * -stbi__float2fixed(0.71414f) + + ((cb * -stbi__float2fixed(0.34414f)) & 0xffff0000); + b = y_fixed + cb * stbi__float2fixed(1.77200f); + r >>= 20; + g >>= 20; + b >>= 20; + if ((unsigned)r > 255) { + if (r < 0) + r = 0; + else + r = 255; + } + if ((unsigned)g > 255) { + if (g < 0) + g = 0; + else + g = 255; + } + if ((unsigned)b > 255) { + if (b < 0) + b = 0; + else + b = 255; + } + out[0] = (stbi_uc)r; + out[1] = (stbi_uc)g; + out[2] = (stbi_uc)b; + out[3] = 255; + out += step; + } +} +#endif + +// set up the kernels +static void stbi__setup_jpeg(stbi__jpeg* j) +{ + j->idct_block_kernel = stbi__idct_block; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; + +#ifdef STBI_SSE2 + if (stbi__sse2_available()) { + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; + } +#endif + +#ifdef STBI_NEON + j->idct_block_kernel = stbi__idct_simd; + j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; + j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; +#endif +} + +// clean up the temporary component buffers +static void stbi__cleanup_jpeg(stbi__jpeg* j) +{ + stbi__free_jpeg_components(j, j->s->img_n, 0); +} + +typedef struct { + resample_row_func resample; + stbi_uc *line0, *line1; + int hs, vs; // expansion factor in each axis + int w_lores; // horizontal pixels pre-expansion + int ystep; // how far through vertical expansion we are + int ypos; // which pre-expansion row we're on +} stbi__resample; + +// fast 0..255 * 0..255 => 0..255 rounded multiplication +static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) +{ + unsigned int t = x * y + 128; + return (stbi_uc)((t + (t >> 8)) >> 8); +} + +static stbi_uc* load_jpeg_image(stbi__jpeg* z, int* out_x, int* out_y, + int* comp, int req_comp) +{ + int n, decode_n, is_rgb; + z->s->img_n = 0; // make stbi__cleanup_jpeg safe + + // validate req_comp + if (req_comp < 0 || req_comp > 4) + return stbi__errpuc("bad req_comp", "Internal error"); + + // load a jpeg image from whichever source, but leave in YCbCr format + if (!stbi__decode_jpeg_image(z)) { + stbi__cleanup_jpeg(z); + return NULL; + } + + // determine actual number of components to generate + n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; + + is_rgb = z->s->img_n == 3 && + (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); + + if (z->s->img_n == 3 && n < 3 && !is_rgb) + decode_n = 1; + else + decode_n = z->s->img_n; + + // resample and color-convert + { + int k; + unsigned int i, j; + stbi_uc* output; + stbi_uc* coutput[4]; + + stbi__resample res_comp[4]; + + for (k = 0; k < decode_n; ++k) { + stbi__resample* r = &res_comp[k]; + + // allocate line buffer big enough for upsampling off the edges + // with upsample factor of 4 + z->img_comp[k].linebuf = (stbi_uc*)stbi__malloc(z->s->img_x + 3); + if (!z->img_comp[k].linebuf) { + stbi__cleanup_jpeg(z); + return stbi__errpuc("outofmem", "Out of memory"); + } + + r->hs = z->img_h_max / z->img_comp[k].h; + r->vs = z->img_v_max / z->img_comp[k].v; + r->ystep = r->vs >> 1; + r->w_lores = (z->s->img_x + r->hs - 1) / r->hs; + r->ypos = 0; + r->line0 = r->line1 = z->img_comp[k].data; + + if (r->hs == 1 && r->vs == 1) + r->resample = resample_row_1; + else if (r->hs == 1 && r->vs == 2) + r->resample = stbi__resample_row_v_2; + else if (r->hs == 2 && r->vs == 1) + r->resample = stbi__resample_row_h_2; + else if (r->hs == 2 && r->vs == 2) + r->resample = z->resample_row_hv_2_kernel; + else + r->resample = stbi__resample_row_generic; + } + + // can't error after this so, this is safe + output = (stbi_uc*)stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); + if (!output) { + stbi__cleanup_jpeg(z); + return stbi__errpuc("outofmem", "Out of memory"); + } + + // now go ahead and resample + for (j = 0; j < z->s->img_y; ++j) { + stbi_uc* out = output + n * z->s->img_x * j; + for (k = 0; k < decode_n; ++k) { + stbi__resample* r = &res_comp[k]; + int y_bot = r->ystep >= (r->vs >> 1); + coutput[k] = r->resample( + z->img_comp[k].linebuf, y_bot ? r->line1 : r->line0, + y_bot ? r->line0 : r->line1, r->w_lores, r->hs); + if (++r->ystep >= r->vs) { + r->ystep = 0; + r->line0 = r->line1; + if (++r->ypos < z->img_comp[k].y) + r->line1 += z->img_comp[k].w2; + } + } + if (n >= 3) { + stbi_uc* y = coutput[0]; + if (z->s->img_n == 3) { + if (is_rgb) { + for (i = 0; i < z->s->img_x; ++i) { + out[0] = y[i]; + out[1] = coutput[1][i]; + out[2] = coutput[2][i]; + out[3] = 255; + out += n; + } + } + else { + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], + z->s->img_x, n); + } + } + else if (z->s->img_n == 4) { + if (z->app14_color_transform == 0) { // CMYK + for (i = 0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(coutput[0][i], m); + out[1] = stbi__blinn_8x8(coutput[1][i], m); + out[2] = stbi__blinn_8x8(coutput[2][i], m); + out[3] = 255; + out += n; + } + } + else if (z->app14_color_transform == 2) { // YCCK + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], + z->s->img_x, n); + for (i = 0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + out[0] = stbi__blinn_8x8(255 - out[0], m); + out[1] = stbi__blinn_8x8(255 - out[1], m); + out[2] = stbi__blinn_8x8(255 - out[2], m); + out += n; + } + } + else { // YCbCr + alpha? Ignore the fourth channel for now + z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], + z->s->img_x, n); + } + } + else + for (i = 0; i < z->s->img_x; ++i) { + out[0] = out[1] = out[2] = y[i]; + out[3] = 255; // not used if n==3 + out += n; + } + } + else { + if (is_rgb) { + if (n == 1) + for (i = 0; i < z->s->img_x; ++i) + *out++ = stbi__compute_y( + coutput[0][i], coutput[1][i], coutput[2][i]); + else { + for (i = 0; i < z->s->img_x; ++i, out += 2) { + out[0] = stbi__compute_y( + coutput[0][i], coutput[1][i], coutput[2][i]); + out[1] = 255; + } + } + } + else if (z->s->img_n == 4 && z->app14_color_transform == 0) { + for (i = 0; i < z->s->img_x; ++i) { + stbi_uc m = coutput[3][i]; + stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); + stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); + stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); + out[0] = stbi__compute_y(r, g, b); + out[1] = 255; + out += n; + } + } + else if (z->s->img_n == 4 && z->app14_color_transform == 2) { + for (i = 0; i < z->s->img_x; ++i) { + out[0] = + stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); + out[1] = 255; + out += n; + } + } + else { + stbi_uc* y = coutput[0]; + if (n == 1) + for (i = 0; i < z->s->img_x; ++i) + out[i] = y[i]; + else + for (i = 0; i < z->s->img_x; ++i) { + *out++ = y[i]; + *out++ = 255; + } + } + } + } + stbi__cleanup_jpeg(z); + *out_x = z->s->img_x; + *out_y = z->s->img_y; + if (comp) + *comp = z->s->img_n >= 3 + ? 3 + : 1; // report original components, not output + return output; + } +} + +static void* stbi__jpeg_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri) +{ + unsigned char* result; + stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); + STBI_NOTUSED(ri); + j->s = s; + stbi__setup_jpeg(j); + result = load_jpeg_image(j, x, y, comp, req_comp); + STBI_FREE(j); + return result; +} + +static int stbi__jpeg_test(stbi__context* s) +{ + int r; + stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); + j->s = s; + stbi__setup_jpeg(j); + r = stbi__decode_jpeg_header(j, STBI__SCAN_type); + stbi__rewind(s); + STBI_FREE(j); + return r; +} + +static int stbi__jpeg_info_raw(stbi__jpeg* j, int* x, int* y, int* comp) +{ + if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { + stbi__rewind(j->s); + return 0; + } + if (x) + *x = j->s->img_x; + if (y) + *y = j->s->img_y; + if (comp) + *comp = j->s->img_n >= 3 ? 3 : 1; + return 1; +} + +static int stbi__jpeg_info(stbi__context* s, int* x, int* y, int* comp) +{ + int result; + stbi__jpeg* j = (stbi__jpeg*)(stbi__malloc(sizeof(stbi__jpeg))); + j->s = s; + result = stbi__jpeg_info_raw(j, x, y, comp); + STBI_FREE(j); + return result; +} +#endif + +// public domain zlib decode v0.2 Sean Barrett 2006-11-18 +// simple implementation +// - all input must be provided in an upfront buffer +// - all output is written to a single output buffer (can malloc/realloc) +// performance +// - fast huffman + +#ifndef STBI_NO_ZLIB + +// fast-way is faster to check than jpeg huffman, but slow way is slower +#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables +#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) + +// zlib-style huffman encoding +// (jpegs packs from left, zlib from right, so can't share code) +typedef struct { + stbi__uint16 fast[1 << STBI__ZFAST_BITS]; + stbi__uint16 firstcode[16]; + int maxcode[17]; + stbi__uint16 firstsymbol[16]; + stbi_uc size[288]; + stbi__uint16 value[288]; +} stbi__zhuffman; + +stbi_inline static int stbi__bitreverse16(int n) +{ + n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); + n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); + n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); + n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); + return n; +} + +stbi_inline static int stbi__bit_reverse(int v, int bits) +{ + STBI_ASSERT(bits <= 16); + // to bit reverse n bits, reverse 16 and shift + // e.g. 11 bits, bit reverse and shift away 5 + return stbi__bitreverse16(v) >> (16 - bits); +} + +static int stbi__zbuild_huffman(stbi__zhuffman* z, const stbi_uc* sizelist, + int num) +{ + int i, k = 0; + int code, next_code[16], sizes[17]; + + // DEFLATE spec for generating codes + memset(sizes, 0, sizeof(sizes)); + memset(z->fast, 0, sizeof(z->fast)); + for (i = 0; i < num; ++i) + ++sizes[sizelist[i]]; + sizes[0] = 0; + for (i = 1; i < 16; ++i) + if (sizes[i] > (1 << i)) + return stbi__err("bad sizes", "Corrupt PNG"); + code = 0; + for (i = 1; i < 16; ++i) { + next_code[i] = code; + z->firstcode[i] = (stbi__uint16)code; + z->firstsymbol[i] = (stbi__uint16)k; + code = (code + sizes[i]); + if (sizes[i]) + if (code - 1 >= (1 << i)) + return stbi__err("bad codelengths", "Corrupt PNG"); + z->maxcode[i] = code << (16 - i); // preshift for inner loop + code <<= 1; + k += sizes[i]; + } + z->maxcode[16] = 0x10000; // sentinel + for (i = 0; i < num; ++i) { + int s = sizelist[i]; + if (s) { + int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; + stbi__uint16 fastv = (stbi__uint16)((s << 9) | i); + z->size[c] = (stbi_uc)s; + z->value[c] = (stbi__uint16)i; + if (s <= STBI__ZFAST_BITS) { + int j = stbi__bit_reverse(next_code[s], s); + while (j < (1 << STBI__ZFAST_BITS)) { + z->fast[j] = fastv; + j += (1 << s); + } + } + ++next_code[s]; + } + } + return 1; +} + +// zlib-from-memory implementation for PNG reading +// because PNG allows splitting the zlib stream arbitrarily, +// and it's annoying structurally to have PNG call ZLIB call PNG, +// we require PNG read all the IDATs and combine them into a single +// memory buffer + +typedef struct { + stbi_uc *zbuffer, *zbuffer_end; + int num_bits; + stbi__uint32 code_buffer; + + char* zout; + char* zout_start; + char* zout_end; + int z_expandable; + + stbi__zhuffman z_length, z_distance; +} stbi__zbuf; + +stbi_inline static stbi_uc stbi__zget8(stbi__zbuf* z) +{ + if (z->zbuffer >= z->zbuffer_end) + return 0; + return *z->zbuffer++; +} + +static void stbi__fill_bits(stbi__zbuf* z) +{ + do { + STBI_ASSERT(z->code_buffer < (1U << z->num_bits)); + z->code_buffer |= (unsigned int)stbi__zget8(z) << z->num_bits; + z->num_bits += 8; + } while (z->num_bits <= 24); +} + +stbi_inline static unsigned int stbi__zreceive(stbi__zbuf* z, int n) +{ + unsigned int k; + if (z->num_bits < n) + stbi__fill_bits(z); + k = z->code_buffer & ((1 << n) - 1); + z->code_buffer >>= n; + z->num_bits -= n; + return k; +} + +static int stbi__zhuffman_decode_slowpath(stbi__zbuf* a, stbi__zhuffman* z) +{ + int b, s, k; + // not resolved by fast table, so compute it the slow way + // use jpeg approach, which requires MSbits at top + k = stbi__bit_reverse(a->code_buffer, 16); + for (s = STBI__ZFAST_BITS + 1;; ++s) + if (k < z->maxcode[s]) + break; + if (s == 16) + return -1; // invalid code! + // code size is s, so: + b = (k >> (16 - s)) - z->firstcode[s] + z->firstsymbol[s]; + STBI_ASSERT(z->size[b] == s); + a->code_buffer >>= s; + a->num_bits -= s; + return z->value[b]; +} + +stbi_inline static int stbi__zhuffman_decode(stbi__zbuf* a, stbi__zhuffman* z) +{ + int b, s; + if (a->num_bits < 16) + stbi__fill_bits(a); + b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; + if (b) { + s = b >> 9; + a->code_buffer >>= s; + a->num_bits -= s; + return b & 511; + } + return stbi__zhuffman_decode_slowpath(a, z); +} + +static int stbi__zexpand(stbi__zbuf* z, char* zout, + int n) // need to make room for n bytes +{ + char* q; + int cur, limit, old_limit; + z->zout = zout; + if (!z->z_expandable) + return stbi__err("output buffer limit", "Corrupt PNG"); + cur = (int)(z->zout - z->zout_start); + limit = old_limit = (int)(z->zout_end - z->zout_start); + while (cur + n > limit) + limit *= 2; + q = (char*)STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); + STBI_NOTUSED(old_limit); + if (q == NULL) + return stbi__err("outofmem", "Out of memory"); + z->zout_start = q; + z->zout = q + cur; + z->zout_end = q + limit; + return 1; +} + +static const int stbi__zlength_base[31] = { + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + +static const int stbi__zlength_extra[31] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, + 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, + 4, 4, 5, 5, 5, 5, 0, 0, 0}; + +static const int stbi__zdist_base[32] = { + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, + 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, + 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0}; + +static const int stbi__zdist_extra[32] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, + 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, + 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; + +static int stbi__parse_huffman_block(stbi__zbuf* a) +{ + char* zout = a->zout; + for (;;) { + int z = stbi__zhuffman_decode(a, &a->z_length); + if (z < 256) { + if (z < 0) + return stbi__err("bad huffman code", + "Corrupt PNG"); // error in huffman codes + if (zout >= a->zout_end) { + if (!stbi__zexpand(a, zout, 1)) + return 0; + zout = a->zout; + } + *zout++ = (char)z; + } + else { + stbi_uc* p; + int len, dist; + if (z == 256) { + a->zout = zout; + return 1; + } + z -= 257; + len = stbi__zlength_base[z]; + if (stbi__zlength_extra[z]) + len += stbi__zreceive(a, stbi__zlength_extra[z]); + z = stbi__zhuffman_decode(a, &a->z_distance); + if (z < 0) + return stbi__err("bad huffman code", "Corrupt PNG"); + dist = stbi__zdist_base[z]; + if (stbi__zdist_extra[z]) + dist += stbi__zreceive(a, stbi__zdist_extra[z]); + if (zout - a->zout_start < dist) + return stbi__err("bad dist", "Corrupt PNG"); + if (zout + len > a->zout_end) { + if (!stbi__zexpand(a, zout, len)) + return 0; + zout = a->zout; + } + p = (stbi_uc*)(zout - dist); + if (dist == 1) { // run of one byte; common in images. + stbi_uc v = *p; + if (len) { + do + *zout++ = v; + while (--len); + } + } + else { + if (len) { + do + *zout++ = *p++; + while (--len); + } + } + } + } +} + +static int stbi__compute_huffman_codes(stbi__zbuf* a) +{ + static const stbi_uc length_dezigzag[19] = { + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + stbi__zhuffman z_codelength; + stbi_uc lencodes[286 + 32 + 137]; // padding for maximum single op + stbi_uc codelength_sizes[19]; + int i, n; + + int hlit = stbi__zreceive(a, 5) + 257; + int hdist = stbi__zreceive(a, 5) + 1; + int hclen = stbi__zreceive(a, 4) + 4; + int ntot = hlit + hdist; + + memset(codelength_sizes, 0, sizeof(codelength_sizes)); + for (i = 0; i < hclen; ++i) { + int s = stbi__zreceive(a, 3); + codelength_sizes[length_dezigzag[i]] = (stbi_uc)s; + } + if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) + return 0; + + n = 0; + while (n < ntot) { + int c = stbi__zhuffman_decode(a, &z_codelength); + if (c < 0 || c >= 19) + return stbi__err("bad codelengths", "Corrupt PNG"); + if (c < 16) + lencodes[n++] = (stbi_uc)c; + else { + stbi_uc fill = 0; + if (c == 16) { + c = stbi__zreceive(a, 2) + 3; + if (n == 0) + return stbi__err("bad codelengths", "Corrupt PNG"); + fill = lencodes[n - 1]; + } + else if (c == 17) + c = stbi__zreceive(a, 3) + 3; + else { + STBI_ASSERT(c == 18); + c = stbi__zreceive(a, 7) + 11; + } + if (ntot - n < c) + return stbi__err("bad codelengths", "Corrupt PNG"); + memset(lencodes + n, fill, c); + n += c; + } + } + if (n != ntot) + return stbi__err("bad codelengths", "Corrupt PNG"); + if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) + return 0; + if (!stbi__zbuild_huffman(&a->z_distance, lencodes + hlit, hdist)) + return 0; + return 1; +} + +static int stbi__parse_uncompressed_block(stbi__zbuf* a) +{ + stbi_uc header[4]; + int len, nlen, k; + if (a->num_bits & 7) + stbi__zreceive(a, a->num_bits & 7); // discard + // drain the bit-packed data into header + k = 0; + while (a->num_bits > 0) { + header[k++] = + (stbi_uc)(a->code_buffer & 255); // suppress MSVC run-time check + a->code_buffer >>= 8; + a->num_bits -= 8; + } + STBI_ASSERT(a->num_bits == 0); + // now fill header the normal way + while (k < 4) + header[k++] = stbi__zget8(a); + len = header[1] * 256 + header[0]; + nlen = header[3] * 256 + header[2]; + if (nlen != (len ^ 0xffff)) + return stbi__err("zlib corrupt", "Corrupt PNG"); + if (a->zbuffer + len > a->zbuffer_end) + return stbi__err("read past buffer", "Corrupt PNG"); + if (a->zout + len > a->zout_end) + if (!stbi__zexpand(a, a->zout, len)) + return 0; + memcpy(a->zout, a->zbuffer, len); + a->zbuffer += len; + a->zout += len; + return 1; +} + +static int stbi__parse_zlib_header(stbi__zbuf* a) +{ + int cmf = stbi__zget8(a); + int cm = cmf & 15; + /* int cinfo = cmf >> 4; */ + int flg = stbi__zget8(a); + if ((cmf * 256 + flg) % 31 != 0) + return stbi__err("bad zlib header", "Corrupt PNG"); // zlib spec + if (flg & 32) + return stbi__err("no preset dict", + "Corrupt PNG"); // preset dictionary not allowed in png + if (cm != 8) + return stbi__err("bad compression", + "Corrupt PNG"); // DEFLATE required for png + // window = 1 << (8 + cinfo)... but who cares, we fully buffer output + return 1; +} + +static const stbi_uc stbi__zdefault_length[288] = { + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8}; +static const stbi_uc stbi__zdefault_distance[32] = { + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5}; +/* +Init algorithm: +{ + int i; // use <= to match clearly with spec + for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; + for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; + for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; + for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; + + for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; +} +*/ + +static int stbi__parse_zlib(stbi__zbuf* a, int parse_header) +{ + int final, type; + if (parse_header) + if (!stbi__parse_zlib_header(a)) + return 0; + a->num_bits = 0; + a->code_buffer = 0; + do { + final = stbi__zreceive(a, 1); + type = stbi__zreceive(a, 2); + if (type == 0) { + if (!stbi__parse_uncompressed_block(a)) + return 0; + } + else if (type == 3) { + return 0; + } + else { + if (type == 1) { + // use fixed code lengths + if (!stbi__zbuild_huffman(&a->z_length, stbi__zdefault_length, + 288)) + return 0; + if (!stbi__zbuild_huffman(&a->z_distance, + stbi__zdefault_distance, 32)) + return 0; + } + else { + if (!stbi__compute_huffman_codes(a)) + return 0; + } + if (!stbi__parse_huffman_block(a)) + return 0; + } + } while (!final); + return 1; +} + +static int stbi__do_zlib(stbi__zbuf* a, char* obuf, int olen, int exp, + int parse_header) +{ + a->zout_start = obuf; + a->zout = obuf; + a->zout_end = obuf + olen; + a->z_expandable = exp; + + return stbi__parse_zlib(a, parse_header); +} + +STBIDEF char* stbi_zlib_decode_malloc_guesssize(const char* buffer, int len, + int initial_size, int* outlen) +{ + stbi__zbuf a; + char* p = (char*)stbi__malloc(initial_size); + if (p == NULL) + return NULL; + a.zbuffer = (stbi_uc*)buffer; + a.zbuffer_end = (stbi_uc*)buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { + if (outlen) + *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } + else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF char* stbi_zlib_decode_malloc(char const* buffer, int len, int* outlen) +{ + return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); +} + +STBIDEF char* stbi_zlib_decode_malloc_guesssize_headerflag(const char* buffer, + int len, + int initial_size, + int* outlen, + int parse_header) +{ + stbi__zbuf a; + char* p = (char*)stbi__malloc(initial_size); + if (p == NULL) + return NULL; + a.zbuffer = (stbi_uc*)buffer; + a.zbuffer_end = (stbi_uc*)buffer + len; + if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { + if (outlen) + *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } + else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_buffer(char* obuffer, int olen, + char const* ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc*)ibuffer; + a.zbuffer_end = (stbi_uc*)ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) + return (int)(a.zout - a.zout_start); + else + return -1; +} + +STBIDEF char* stbi_zlib_decode_noheader_malloc(char const* buffer, int len, + int* outlen) +{ + stbi__zbuf a; + char* p = (char*)stbi__malloc(16384); + if (p == NULL) + return NULL; + a.zbuffer = (stbi_uc*)buffer; + a.zbuffer_end = (stbi_uc*)buffer + len; + if (stbi__do_zlib(&a, p, 16384, 1, 0)) { + if (outlen) + *outlen = (int)(a.zout - a.zout_start); + return a.zout_start; + } + else { + STBI_FREE(a.zout_start); + return NULL; + } +} + +STBIDEF int stbi_zlib_decode_noheader_buffer(char* obuffer, int olen, + const char* ibuffer, int ilen) +{ + stbi__zbuf a; + a.zbuffer = (stbi_uc*)ibuffer; + a.zbuffer_end = (stbi_uc*)ibuffer + ilen; + if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) + return (int)(a.zout - a.zout_start); + else + return -1; +} +#endif + +// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 +// simple implementation +// - only 8-bit samples +// - no CRC checking +// - allocates lots of intermediate memory +// - avoids problem of streaming data between subsystems +// - avoids explicit window management +// performance +// - uses stb_zlib, a PD zlib implementation with fast huffman decoding + +#ifndef STBI_NO_PNG +typedef struct { + stbi__uint32 length; + stbi__uint32 type; +} stbi__pngchunk; + +static stbi__pngchunk stbi__get_chunk_header(stbi__context* s) +{ + stbi__pngchunk c; + c.length = stbi__get32be(s); + c.type = stbi__get32be(s); + return c; +} + +static int stbi__check_png_header(stbi__context* s) +{ + static const stbi_uc png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10}; + int i; + for (i = 0; i < 8; ++i) + if (stbi__get8(s) != png_sig[i]) + return stbi__err("bad png sig", "Not a PNG"); + return 1; +} + +typedef struct { + stbi__context* s; + stbi_uc *idata, *expanded, *out; + int depth; +} stbi__png; + +enum { + STBI__F_none = 0, + STBI__F_sub = 1, + STBI__F_up = 2, + STBI__F_avg = 3, + STBI__F_paeth = 4, + // synthetic filters used for first scanline to avoid needing a dummy row of + // 0s + STBI__F_avg_first, + STBI__F_paeth_first +}; + +static stbi_uc first_row_filter[5] = {STBI__F_none, STBI__F_sub, STBI__F_none, + STBI__F_avg_first, STBI__F_paeth_first}; + +static int stbi__paeth(int a, int b, int c) +{ + int p = a + b - c; + int pa = abs(p - a); + int pb = abs(p - b); + int pc = abs(p - c); + if (pa <= pb && pa <= pc) + return a; + if (pb <= pc) + return b; + return c; +} + +static const stbi_uc stbi__depth_scale_table[9] = {0, 0xff, 0x55, 0, 0x11, + 0, 0, 0, 0x01}; + +// create the png data from post-deflated data +static int stbi__create_png_image_raw(stbi__png* a, stbi_uc* raw, + stbi__uint32 raw_len, int out_n, + stbi__uint32 x, stbi__uint32 y, int depth, + int color) +{ + int bytes = (depth == 16 ? 2 : 1); + stbi__context* s = a->s; + stbi__uint32 i, j, stride = x * out_n * bytes; + stbi__uint32 img_len, img_width_bytes; + int k; + int img_n = s->img_n; // copy it into a local for later + + int output_bytes = out_n * bytes; + int filter_bytes = img_n * bytes; + int width = x; + + STBI_ASSERT(out_n == s->img_n || out_n == s->img_n + 1); + a->out = (stbi_uc*)stbi__malloc_mad3( + x, y, output_bytes, 0); // extra bytes to write off the end into + if (!a->out) + return stbi__err("outofmem", "Out of memory"); + + if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) + return stbi__err("too large", "Corrupt PNG"); + img_width_bytes = (((img_n * x * depth) + 7) >> 3); + img_len = (img_width_bytes + 1) * y; + + // we used to check for exact match between raw_len and img_len on + // non-interlaced PNGs, but issue #276 reported a PNG in the wild that had + // extra data at the end (all zeros), so just check for raw_len < img_len + // always. + if (raw_len < img_len) + return stbi__err("not enough pixels", "Corrupt PNG"); + + for (j = 0; j < y; ++j) { + stbi_uc* cur = a->out + stride * j; + stbi_uc* prior; + int filter = *raw++; + + if (filter > 4) + return stbi__err("invalid filter", "Corrupt PNG"); + + if (depth < 8) { + STBI_ASSERT(img_width_bytes <= x); + cur += x * out_n - + img_width_bytes; // store output to the rightmost img_len + // bytes, so we can decode in place + filter_bytes = 1; + width = img_width_bytes; + } + prior = cur - stride; // bugfix: need to compute this after 'cur +=' + // computation above + + // if first row, use special filter that doesn't sample previous row + if (j == 0) + filter = first_row_filter[filter]; + + // handle first byte explicitly + for (k = 0; k < filter_bytes; ++k) { + switch (filter) { + case STBI__F_none: + cur[k] = raw[k]; + break; + case STBI__F_sub: + cur[k] = raw[k]; + break; + case STBI__F_up: + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); + break; + case STBI__F_avg: + cur[k] = STBI__BYTECAST(raw[k] + (prior[k] >> 1)); + break; + case STBI__F_paeth: + cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0, prior[k], 0)); + break; + case STBI__F_avg_first: + cur[k] = raw[k]; + break; + case STBI__F_paeth_first: + cur[k] = raw[k]; + break; + } + } + + if (depth == 8) { + if (img_n != out_n) + cur[img_n] = 255; // first pixel + raw += img_n; + cur += out_n; + prior += out_n; + } + else if (depth == 16) { + if (img_n != out_n) { + cur[filter_bytes] = 255; // first pixel top byte + cur[filter_bytes + 1] = 255; // first pixel bottom byte + } + raw += filter_bytes; + cur += output_bytes; + prior += output_bytes; + } + else { + raw += 1; + cur += 1; + prior += 1; + } + + // this is a little gross, so that we don't switch per-pixel or + // per-component + if (depth < 8 || img_n == out_n) { + int nk = (width - 1) * filter_bytes; +#define STBI__CASE(f) \ + case f: \ + for (k = 0; k < nk; ++k) + switch (filter) { + // "none" filter turns into a memcpy here; make that explicit. + case STBI__F_none: + memcpy(cur, raw, nk); + break; + STBI__CASE(STBI__F_sub) + { + cur[k] = STBI__BYTECAST(raw[k] + cur[k - filter_bytes]); + } + break; + STBI__CASE(STBI__F_up) + { + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); + } + break; + STBI__CASE(STBI__F_avg) + { + cur[k] = STBI__BYTECAST( + raw[k] + ((prior[k] + cur[k - filter_bytes]) >> 1)); + } + break; + STBI__CASE(STBI__F_paeth) + { + cur[k] = STBI__BYTECAST( + raw[k] + stbi__paeth(cur[k - filter_bytes], prior[k], + prior[k - filter_bytes])); + } + break; + STBI__CASE(STBI__F_avg_first) + { + cur[k] = + STBI__BYTECAST(raw[k] + (cur[k - filter_bytes] >> 1)); + } + break; + STBI__CASE(STBI__F_paeth_first) + { + cur[k] = STBI__BYTECAST( + raw[k] + stbi__paeth(cur[k - filter_bytes], 0, 0)); + } + break; + } +#undef STBI__CASE + raw += nk; + } + else { + STBI_ASSERT(img_n + 1 == out_n); +#define STBI__CASE(f) \ + case f: \ + for (i = x - 1; i >= 1; --i, cur[filter_bytes] = 255, \ + raw += filter_bytes, cur += output_bytes, prior += output_bytes) \ + for (k = 0; k < filter_bytes; ++k) + switch (filter) { + STBI__CASE(STBI__F_none) { cur[k] = raw[k]; } + break; + STBI__CASE(STBI__F_sub) + { + cur[k] = STBI__BYTECAST(raw[k] + cur[k - output_bytes]); + } + break; + STBI__CASE(STBI__F_up) + { + cur[k] = STBI__BYTECAST(raw[k] + prior[k]); + } + break; + STBI__CASE(STBI__F_avg) + { + cur[k] = STBI__BYTECAST( + raw[k] + ((prior[k] + cur[k - output_bytes]) >> 1)); + } + break; + STBI__CASE(STBI__F_paeth) + { + cur[k] = STBI__BYTECAST( + raw[k] + stbi__paeth(cur[k - output_bytes], prior[k], + prior[k - output_bytes])); + } + break; + STBI__CASE(STBI__F_avg_first) + { + cur[k] = + STBI__BYTECAST(raw[k] + (cur[k - output_bytes] >> 1)); + } + break; + STBI__CASE(STBI__F_paeth_first) + { + cur[k] = STBI__BYTECAST( + raw[k] + stbi__paeth(cur[k - output_bytes], 0, 0)); + } + break; + } +#undef STBI__CASE + + // the loop above sets the high byte of the pixels' alpha, but for + // 16 bit png files we also need the low byte set. we'll do that + // here. + if (depth == 16) { + cur = a->out + + stride * j; // start at the beginning of the row again + for (i = 0; i < x; ++i, cur += output_bytes) { + cur[filter_bytes + 1] = 255; + } + } + } + } + + // we make a separate pass to expand bits to pixels; for performance, + // this could run two scanlines behind the above code, so it won't + // intefere with filtering but will still be in the cache. + if (depth < 8) { + for (j = 0; j < y; ++j) { + stbi_uc* cur = a->out + stride * j; + stbi_uc* in = a->out + stride * j + x * out_n - img_width_bytes; + // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the + // common 8-bit path optimal at minimal cost for 1/2/4-bit png + // guarante byte alignment, if width is not multiple of 8/4/2 we'll + // decode dummy trailing data that will be skipped in the later loop + stbi_uc scale = (color == 0) + ? stbi__depth_scale_table[depth] + : 1; // scale grayscale values to 0..255 range + + // note that the final byte might overshoot and write more data than + // desired. we can allocate enough data that this never writes out + // of memory, but it could also overwrite the next scanline. can it + // overwrite non-empty data on the next scanline? yes, consider + // 1-pixel-wide scanlines with 1-bit-per-pixel. so we need to + // explicitly clamp the final ones + + if (depth == 4) { + for (k = x * img_n; k >= 2; k -= 2, ++in) { + *cur++ = scale * ((*in >> 4)); + *cur++ = scale * ((*in) & 0x0f); + } + if (k > 0) + *cur++ = scale * ((*in >> 4)); + } + else if (depth == 2) { + for (k = x * img_n; k >= 4; k -= 4, ++in) { + *cur++ = scale * ((*in >> 6)); + *cur++ = scale * ((*in >> 4) & 0x03); + *cur++ = scale * ((*in >> 2) & 0x03); + *cur++ = scale * ((*in) & 0x03); + } + if (k > 0) + *cur++ = scale * ((*in >> 6)); + if (k > 1) + *cur++ = scale * ((*in >> 4) & 0x03); + if (k > 2) + *cur++ = scale * ((*in >> 2) & 0x03); + } + else if (depth == 1) { + for (k = x * img_n; k >= 8; k -= 8, ++in) { + *cur++ = scale * ((*in >> 7)); + *cur++ = scale * ((*in >> 6) & 0x01); + *cur++ = scale * ((*in >> 5) & 0x01); + *cur++ = scale * ((*in >> 4) & 0x01); + *cur++ = scale * ((*in >> 3) & 0x01); + *cur++ = scale * ((*in >> 2) & 0x01); + *cur++ = scale * ((*in >> 1) & 0x01); + *cur++ = scale * ((*in) & 0x01); + } + if (k > 0) + *cur++ = scale * ((*in >> 7)); + if (k > 1) + *cur++ = scale * ((*in >> 6) & 0x01); + if (k > 2) + *cur++ = scale * ((*in >> 5) & 0x01); + if (k > 3) + *cur++ = scale * ((*in >> 4) & 0x01); + if (k > 4) + *cur++ = scale * ((*in >> 3) & 0x01); + if (k > 5) + *cur++ = scale * ((*in >> 2) & 0x01); + if (k > 6) + *cur++ = scale * ((*in >> 1) & 0x01); + } + if (img_n != out_n) { + int q; + // insert alpha = 255 + cur = a->out + stride * j; + if (img_n == 1) { + for (q = x - 1; q >= 0; --q) { + cur[q * 2 + 1] = 255; + cur[q * 2 + 0] = cur[q]; + } + } + else { + STBI_ASSERT(img_n == 3); + for (q = x - 1; q >= 0; --q) { + cur[q * 4 + 3] = 255; + cur[q * 4 + 2] = cur[q * 3 + 2]; + cur[q * 4 + 1] = cur[q * 3 + 1]; + cur[q * 4 + 0] = cur[q * 3 + 0]; + } + } + } + } + } + else if (depth == 16) { + // force the image data from big-endian to platform-native. + // this is done in a separate pass due to the decoding relying + // on the data being untouched, but could probably be done + // per-line during decode if care is taken. + stbi_uc* cur = a->out; + stbi__uint16* cur16 = (stbi__uint16*)cur; + + for (i = 0; i < x * y * out_n; ++i, cur16++, cur += 2) { + *cur16 = (cur[0] << 8) | cur[1]; + } + } + + return 1; +} + +static int stbi__create_png_image(stbi__png* a, stbi_uc* image_data, + stbi__uint32 image_data_len, int out_n, + int depth, int color, int interlaced) +{ + int bytes = (depth == 16 ? 2 : 1); + int out_bytes = out_n * bytes; + stbi_uc* final; + int p; + if (!interlaced) + return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, + a->s->img_x, a->s->img_y, depth, + color); + + // de-interlacing + final = (stbi_uc*)stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); + for (p = 0; p < 7; ++p) { + int xorig[] = {0, 4, 0, 2, 0, 1, 0}; + int yorig[] = {0, 0, 4, 0, 2, 0, 1}; + int xspc[] = {8, 8, 4, 4, 2, 2, 1}; + int yspc[] = {8, 8, 8, 4, 4, 2, 2}; + int i, j, x, y; + // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 + x = (a->s->img_x - xorig[p] + xspc[p] - 1) / xspc[p]; + y = (a->s->img_y - yorig[p] + yspc[p] - 1) / yspc[p]; + if (x && y) { + stbi__uint32 img_len = + ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; + if (!stbi__create_png_image_raw(a, image_data, image_data_len, + out_n, x, y, depth, color)) { + STBI_FREE(final); + return 0; + } + for (j = 0; j < y; ++j) { + for (i = 0; i < x; ++i) { + int out_y = j * yspc[p] + yorig[p]; + int out_x = i * xspc[p] + xorig[p]; + memcpy(final + out_y * a->s->img_x * out_bytes + + out_x * out_bytes, + a->out + (j * x + i) * out_bytes, out_bytes); + } + } + STBI_FREE(a->out); + image_data += img_len; + image_data_len -= img_len; + } + } + a->out = final; + + return 1; +} + +static int stbi__compute_transparency(stbi__png* z, stbi_uc tc[3], int out_n) +{ + stbi__context* s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc* p = z->out; + + // compute color-based transparency, assuming we've + // already got 255 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 255); + p += 2; + } + } + else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__compute_transparency16(stbi__png* z, stbi__uint16 tc[3], + int out_n) +{ + stbi__context* s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi__uint16* p = (stbi__uint16*)z->out; + + // compute color-based transparency, assuming we've + // already got 65535 as the alpha value in the output + STBI_ASSERT(out_n == 2 || out_n == 4); + + if (out_n == 2) { + for (i = 0; i < pixel_count; ++i) { + p[1] = (p[0] == tc[0] ? 0 : 65535); + p += 2; + } + } + else { + for (i = 0; i < pixel_count; ++i) { + if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) + p[3] = 0; + p += 4; + } + } + return 1; +} + +static int stbi__expand_png_palette(stbi__png* a, stbi_uc* palette, int len, + int pal_img_n) +{ + stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; + stbi_uc *p, *temp_out, *orig = a->out; + + p = (stbi_uc*)stbi__malloc_mad2(pixel_count, pal_img_n, 0); + if (p == NULL) + return stbi__err("outofmem", "Out of memory"); + + // between here and free(out) below, exitting would leak + temp_out = p; + + if (pal_img_n == 3) { + for (i = 0; i < pixel_count; ++i) { + int n = orig[i] * 4; + p[0] = palette[n]; + p[1] = palette[n + 1]; + p[2] = palette[n + 2]; + p += 3; + } + } + else { + for (i = 0; i < pixel_count; ++i) { + int n = orig[i] * 4; + p[0] = palette[n]; + p[1] = palette[n + 1]; + p[2] = palette[n + 2]; + p[3] = palette[n + 3]; + p += 4; + } + } + STBI_FREE(a->out); + a->out = temp_out; + + STBI_NOTUSED(len); + + return 1; +} + +static int stbi__unpremultiply_on_load = 0; +static int stbi__de_iphone_flag = 0; + +STBIDEF void +stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) +{ + stbi__unpremultiply_on_load = flag_true_if_should_unpremultiply; +} + +STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) +{ + stbi__de_iphone_flag = flag_true_if_should_convert; +} + +static void stbi__de_iphone(stbi__png* z) +{ + stbi__context* s = z->s; + stbi__uint32 i, pixel_count = s->img_x * s->img_y; + stbi_uc* p = z->out; + + if (s->img_out_n == 3) { // convert bgr to rgb + for (i = 0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 3; + } + } + else { + STBI_ASSERT(s->img_out_n == 4); + if (stbi__unpremultiply_on_load) { + // convert bgr to rgb and unpremultiply + for (i = 0; i < pixel_count; ++i) { + stbi_uc a = p[3]; + stbi_uc t = p[0]; + if (a) { + stbi_uc half = a / 2; + p[0] = (p[2] * 255 + half) / a; + p[1] = (p[1] * 255 + half) / a; + p[2] = (t * 255 + half) / a; + } + else { + p[0] = p[2]; + p[2] = t; + } + p += 4; + } + } + else { + // convert bgr to rgb + for (i = 0; i < pixel_count; ++i) { + stbi_uc t = p[0]; + p[0] = p[2]; + p[2] = t; + p += 4; + } + } + } +} + +#define STBI__PNG_TYPE(a, b, c, d) \ + (((unsigned)(a) << 24) + ((unsigned)(b) << 16) + ((unsigned)(c) << 8) + \ + (unsigned)(d)) + +static int stbi__parse_png_file(stbi__png* z, int scan, int req_comp) +{ + stbi_uc palette[1024], pal_img_n = 0; + stbi_uc has_trans = 0, tc[3] = {0}; + stbi__uint16 tc16[3]; + stbi__uint32 ioff = 0, idata_limit = 0, i, pal_len = 0; + int first = 1, k, interlace = 0, color = 0, is_iphone = 0; + stbi__context* s = z->s; + + z->expanded = NULL; + z->idata = NULL; + z->out = NULL; + + if (!stbi__check_png_header(s)) + return 0; + + if (scan == STBI__SCAN_type) + return 1; + + for (;;) { + stbi__pngchunk c = stbi__get_chunk_header(s); + switch (c.type) { + case STBI__PNG_TYPE('C', 'g', 'B', 'I'): + is_iphone = 1; + stbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I', 'H', 'D', 'R'): { + int comp, filter; + if (!first) + return stbi__err("multiple IHDR", "Corrupt PNG"); + first = 0; + if (c.length != 13) + return stbi__err("bad IHDR len", "Corrupt PNG"); + s->img_x = stbi__get32be(s); + if (s->img_x > (1 << 24)) + return stbi__err("too large", "Very large image (corrupt?)"); + s->img_y = stbi__get32be(s); + if (s->img_y > (1 << 24)) + return stbi__err("too large", "Very large image (corrupt?)"); + z->depth = stbi__get8(s); + if (z->depth != 1 && z->depth != 2 && z->depth != 4 && + z->depth != 8 && z->depth != 16) + return stbi__err("1/2/4/8/16-bit only", + "PNG not supported: 1/2/4/8/16-bit only"); + color = stbi__get8(s); + if (color > 6) + return stbi__err("bad ctype", "Corrupt PNG"); + if (color == 3 && z->depth == 16) + return stbi__err("bad ctype", "Corrupt PNG"); + if (color == 3) + pal_img_n = 3; + else if (color & 1) + return stbi__err("bad ctype", "Corrupt PNG"); + comp = stbi__get8(s); + if (comp) + return stbi__err("bad comp method", "Corrupt PNG"); + filter = stbi__get8(s); + if (filter) + return stbi__err("bad filter method", "Corrupt PNG"); + interlace = stbi__get8(s); + if (interlace > 1) + return stbi__err("bad interlace method", "Corrupt PNG"); + if (!s->img_x || !s->img_y) + return stbi__err("0-pixel image", "Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) + return stbi__err("too large", "Image too large to decode"); + if (scan == STBI__SCAN_header) + return 1; + } + else { + // if paletted, then pal_n is our final components, and + // img_n is # components to decompress/filter. + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) + return stbi__err("too large", "Corrupt PNG"); + // if SCAN_header, have to scan to see if we have a tRNS + } + break; + } + + case STBI__PNG_TYPE('P', 'L', 'T', 'E'): { + if (first) + return stbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256 * 3) + return stbi__err("invalid PLTE", "Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) + return stbi__err("invalid PLTE", "Corrupt PNG"); + for (i = 0; i < pal_len; ++i) { + palette[i * 4 + 0] = stbi__get8(s); + palette[i * 4 + 1] = stbi__get8(s); + palette[i * 4 + 2] = stbi__get8(s); + palette[i * 4 + 3] = 255; + } + break; + } + + case STBI__PNG_TYPE('t', 'R', 'N', 'S'): { + if (first) + return stbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) + return stbi__err("tRNS after IDAT", "Corrupt PNG"); + if (pal_img_n) { + if (scan == STBI__SCAN_header) { + s->img_n = 4; + return 1; + } + if (pal_len == 0) + return stbi__err("tRNS before PLTE", "Corrupt PNG"); + if (c.length > pal_len) + return stbi__err("bad tRNS len", "Corrupt PNG"); + pal_img_n = 4; + for (i = 0; i < c.length; ++i) + palette[i * 4 + 3] = stbi__get8(s); + } + else { + if (!(s->img_n & 1)) + return stbi__err("tRNS with alpha", "Corrupt PNG"); + if (c.length != (stbi__uint32)s->img_n * 2) + return stbi__err("bad tRNS len", "Corrupt PNG"); + has_trans = 1; + if (z->depth == 16) { + for (k = 0; k < s->img_n; ++k) + tc16[k] = (stbi__uint16)stbi__get16be( + s); // copy the values as-is + } + else { + for (k = 0; k < s->img_n; ++k) + tc[k] = + (stbi_uc)(stbi__get16be(s) & 255) * + stbi__depth_scale_table + [z->depth]; // non 8-bit images will be larger + } + } + break; + } + + case STBI__PNG_TYPE('I', 'D', 'A', 'T'): { + if (first) + return stbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) + return stbi__err("no PLTE", "Corrupt PNG"); + if (scan == STBI__SCAN_header) { + s->img_n = pal_img_n; + return 1; + } + if ((int)(ioff + c.length) < (int)ioff) + return 0; + if (ioff + c.length > idata_limit) { + stbi__uint32 idata_limit_old = idata_limit; + stbi_uc* p; + if (idata_limit == 0) + idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (stbi_uc*)STBI_REALLOC_SIZED(z->idata, idata_limit_old, + idata_limit); + if (p == NULL) + return stbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!stbi__getn(s, z->idata + ioff, c.length)) + return stbi__err("outofdata", "Corrupt PNG"); + ioff += c.length; + break; + } + + case STBI__PNG_TYPE('I', 'E', 'N', 'D'): { + stbi__uint32 raw_len, bpl; + if (first) + return stbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) + return 1; + if (z->idata == NULL) + return stbi__err("no IDAT", "Corrupt PNG"); + // initial guess for decoded data size to avoid unnecessary reallocs + bpl = + (s->img_x * z->depth + 7) / 8; // bytes per line, per component + raw_len = bpl * s->img_y * s->img_n /* pixels */ + + s->img_y /* filter mode per row */; + z->expanded = + (stbi_uc*)stbi_zlib_decode_malloc_guesssize_headerflag( + (char*)z->idata, ioff, raw_len, (int*)&raw_len, !is_iphone); + if (z->expanded == NULL) + return 0; // zlib should set error + STBI_FREE(z->idata); + z->idata = NULL; + if ((req_comp == s->img_n + 1 && req_comp != 3 && !pal_img_n) || + has_trans) + s->img_out_n = s->img_n + 1; + else + s->img_out_n = s->img_n; + if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, + z->depth, color, interlace)) + return 0; + if (has_trans) { + if (z->depth == 16) { + if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) + return 0; + } + else { + if (!stbi__compute_transparency(z, tc, s->img_out_n)) + return 0; + } + } + if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) + stbi__de_iphone(z); + if (pal_img_n) { + // pal_img_n == 3 or 4 + s->img_n = pal_img_n; // record the actual colors we had + s->img_out_n = pal_img_n; + if (req_comp >= 3) + s->img_out_n = req_comp; + if (!stbi__expand_png_palette(z, palette, pal_len, + s->img_out_n)) + return 0; + } + else if (has_trans) { + // non-paletted image with tRNS -> source image has (constant) + // alpha + ++s->img_n; + } + STBI_FREE(z->expanded); + z->expanded = NULL; + return 1; + } + + default: + // if critical, fail + if (first) + return stbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { +#ifndef STBI_NO_FAILURE_STRINGS + // not threadsafe + static char invalid_chunk[] = "XXXX PNG chunk not known"; + invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); + invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); + invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); + invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); +#endif + return stbi__err(invalid_chunk, + "PNG not supported: unknown PNG chunk type"); + } + stbi__skip(s, c.length); + break; + } + // end of PNG chunk, read and skip CRC + stbi__get32be(s); + } +} + +static void* stbi__do_png(stbi__png* p, int* x, int* y, int* n, int req_comp, + stbi__result_info* ri) +{ + void* result = NULL; + if (req_comp < 0 || req_comp > 4) + return stbi__errpuc("bad req_comp", "Internal error"); + if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { + if (p->depth < 8) + ri->bits_per_channel = 8; + else + ri->bits_per_channel = p->depth; + result = p->out; + p->out = NULL; + if (req_comp && req_comp != p->s->img_out_n) { + if (ri->bits_per_channel == 8) + result = stbi__convert_format((unsigned char*)result, + p->s->img_out_n, req_comp, + p->s->img_x, p->s->img_y); + else + result = stbi__convert_format16((stbi__uint16*)result, + p->s->img_out_n, req_comp, + p->s->img_x, p->s->img_y); + p->s->img_out_n = req_comp; + if (result == NULL) + return result; + } + *x = p->s->img_x; + *y = p->s->img_y; + if (n) + *n = p->s->img_n; + } + STBI_FREE(p->out); + p->out = NULL; + STBI_FREE(p->expanded); + p->expanded = NULL; + STBI_FREE(p->idata); + p->idata = NULL; + + return result; +} + +static void* stbi__png_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri) +{ + stbi__png p; + p.s = s; + return stbi__do_png(&p, x, y, comp, req_comp, ri); +} + +static int stbi__png_test(stbi__context* s) +{ + int r; + r = stbi__check_png_header(s); + stbi__rewind(s); + return r; +} + +static int stbi__png_info_raw(stbi__png* p, int* x, int* y, int* comp) +{ + if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { + stbi__rewind(p->s); + return 0; + } + if (x) + *x = p->s->img_x; + if (y) + *y = p->s->img_y; + if (comp) + *comp = p->s->img_n; + return 1; +} + +static int stbi__png_info(stbi__context* s, int* x, int* y, int* comp) +{ + stbi__png p; + p.s = s; + return stbi__png_info_raw(&p, x, y, comp); +} + +static int stbi__png_is16(stbi__context* s) +{ + stbi__png p; + p.s = s; + if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) + return 0; + if (p.depth != 16) { + stbi__rewind(p.s); + return 0; + } + return 1; +} +#endif + +// Microsoft/Windows BMP image + +#ifndef STBI_NO_BMP +static int stbi__bmp_test_raw(stbi__context* s) +{ + int r; + int sz; + if (stbi__get8(s) != 'B') + return 0; + if (stbi__get8(s) != 'M') + return 0; + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + stbi__get32le(s); // discard data offset + sz = stbi__get32le(s); + r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); + return r; +} + +static int stbi__bmp_test(stbi__context* s) +{ + int r = stbi__bmp_test_raw(s); + stbi__rewind(s); + return r; +} + +// returns 0..31 for the highest set bit +static int stbi__high_bit(unsigned int z) +{ + int n = 0; + if (z == 0) + return -1; + if (z >= 0x10000) { + n += 16; + z >>= 16; + } + if (z >= 0x00100) { + n += 8; + z >>= 8; + } + if (z >= 0x00010) { + n += 4; + z >>= 4; + } + if (z >= 0x00004) { + n += 2; + z >>= 2; + } + if (z >= 0x00002) { + n += 1; + z >>= 1; + } + return n; +} + +static int stbi__bitcount(unsigned int a) +{ + a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 + a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 + a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits + a = (a + (a >> 8)); // max 16 per 8 bits + a = (a + (a >> 16)); // max 32 per 8 bits + return a & 0xff; +} + +// extract an arbitrarily-aligned N-bit value (N=bits) +// from v, and then make it 8-bits long and fractionally +// extend it to full full range. +static int stbi__shiftsigned(unsigned int v, int shift, int bits) +{ + static unsigned int mul_table[9] = { + 0, + 0xff /*0b11111111*/, + 0x55 /*0b01010101*/, + 0x49 /*0b01001001*/, + 0x11 /*0b00010001*/, + 0x21 /*0b00100001*/, + 0x41 /*0b01000001*/, + 0x81 /*0b10000001*/, + 0x01 /*0b00000001*/, + }; + static unsigned int shift_table[9] = { + 0, 0, 0, 1, 0, 2, 4, 6, 0, + }; + if (shift < 0) + v <<= -shift; + else + v >>= shift; + STBI_ASSERT(v >= 0 && v < 256); + v >>= (8 - bits); + STBI_ASSERT(bits >= 0 && bits <= 8); + return (int)((unsigned)v * mul_table[bits]) >> shift_table[bits]; +} + +typedef struct { + int bpp, offset, hsz; + unsigned int mr, mg, mb, ma, all_a; +} stbi__bmp_data; + +static void* stbi__bmp_parse_header(stbi__context* s, stbi__bmp_data* info) +{ + int hsz; + if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') + return stbi__errpuc("not BMP", "Corrupt BMP"); + stbi__get32le(s); // discard filesize + stbi__get16le(s); // discard reserved + stbi__get16le(s); // discard reserved + info->offset = stbi__get32le(s); + info->hsz = hsz = stbi__get32le(s); + info->mr = info->mg = info->mb = info->ma = 0; + + if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) + return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); + if (hsz == 12) { + s->img_x = stbi__get16le(s); + s->img_y = stbi__get16le(s); + } + else { + s->img_x = stbi__get32le(s); + s->img_y = stbi__get32le(s); + } + if (stbi__get16le(s) != 1) + return stbi__errpuc("bad BMP", "bad BMP"); + info->bpp = stbi__get16le(s); + if (hsz != 12) { + int compress = stbi__get32le(s); + if (compress == 1 || compress == 2) + return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); + stbi__get32le(s); // discard sizeof + stbi__get32le(s); // discard hres + stbi__get32le(s); // discard vres + stbi__get32le(s); // discard colorsused + stbi__get32le(s); // discard max important + if (hsz == 40 || hsz == 56) { + if (hsz == 56) { + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + stbi__get32le(s); + } + if (info->bpp == 16 || info->bpp == 32) { + if (compress == 0) { + if (info->bpp == 32) { + info->mr = 0xffu << 16; + info->mg = 0xffu << 8; + info->mb = 0xffu << 0; + info->ma = 0xffu << 24; + info->all_a = 0; // if all_a is 0 at end, then we loaded + // alpha channel but it was all 0 + } + else { + info->mr = 31u << 10; + info->mg = 31u << 5; + info->mb = 31u << 0; + } + } + else if (compress == 3) { + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + // not documented, but generated by photoshop and handled by + // mspaint + if (info->mr == info->mg && info->mg == info->mb) { + // ?!?!? + return stbi__errpuc("bad BMP", "bad BMP"); + } + } + else + return stbi__errpuc("bad BMP", "bad BMP"); + } + } + else { + int i; + if (hsz != 108 && hsz != 124) + return stbi__errpuc("bad BMP", "bad BMP"); + info->mr = stbi__get32le(s); + info->mg = stbi__get32le(s); + info->mb = stbi__get32le(s); + info->ma = stbi__get32le(s); + stbi__get32le(s); // discard color space + for (i = 0; i < 12; ++i) + stbi__get32le(s); // discard color space parameters + if (hsz == 124) { + stbi__get32le(s); // discard rendering intent + stbi__get32le(s); // discard offset of profile data + stbi__get32le(s); // discard size of profile data + stbi__get32le(s); // discard reserved + } + } + } + return (void*)1; +} + +static void* stbi__bmp_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri) +{ + stbi_uc* out; + unsigned int mr = 0, mg = 0, mb = 0, ma = 0, all_a; + stbi_uc pal[256][4]; + int psize = 0, i, j, width; + int flip_vertically, pad, target; + stbi__bmp_data info; + STBI_NOTUSED(ri); + + info.all_a = 255; + if (stbi__bmp_parse_header(s, &info) == NULL) + return NULL; // error code already set + + flip_vertically = ((int)s->img_y) > 0; + s->img_y = abs((int)s->img_y); + + mr = info.mr; + mg = info.mg; + mb = info.mb; + ma = info.ma; + all_a = info.all_a; + + if (info.hsz == 12) { + if (info.bpp < 24) + psize = (info.offset - 14 - 24) / 3; + } + else { + if (info.bpp < 16) + psize = (info.offset - 14 - info.hsz) >> 2; + } + + s->img_n = ma ? 4 : 3; + if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 + target = req_comp; + else + target = s->img_n; // if they want monochrome, we'll post-convert + + // sanity-check size + if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "Corrupt BMP"); + + out = (stbi_uc*)stbi__malloc_mad3(target, s->img_x, s->img_y, 0); + if (!out) + return stbi__errpuc("outofmem", "Out of memory"); + if (info.bpp < 16) { + int z = 0; + if (psize == 0 || psize > 256) { + STBI_FREE(out); + return stbi__errpuc("invalid", "Corrupt BMP"); + } + for (i = 0; i < psize; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + if (info.hsz != 12) + stbi__get8(s); + pal[i][3] = 255; + } + stbi__skip(s, info.offset - 14 - info.hsz - + psize * (info.hsz == 12 ? 3 : 4)); + if (info.bpp == 1) + width = (s->img_x + 7) >> 3; + else if (info.bpp == 4) + width = (s->img_x + 1) >> 1; + else if (info.bpp == 8) + width = s->img_x; + else { + STBI_FREE(out); + return stbi__errpuc("bad bpp", "Corrupt BMP"); + } + pad = (-width) & 3; + if (info.bpp == 1) { + for (j = 0; j < (int)s->img_y; ++j) { + int bit_offset = 7, v = stbi__get8(s); + for (i = 0; i < (int)s->img_x; ++i) { + int color = (v >> bit_offset) & 0x1; + out[z++] = pal[color][0]; + out[z++] = pal[color][1]; + out[z++] = pal[color][2]; + if (target == 4) + out[z++] = 255; + if (i + 1 == (int)s->img_x) + break; + if ((--bit_offset) < 0) { + bit_offset = 7; + v = stbi__get8(s); + } + } + stbi__skip(s, pad); + } + } + else { + for (j = 0; j < (int)s->img_y; ++j) { + for (i = 0; i < (int)s->img_x; i += 2) { + int v = stbi__get8(s), v2 = 0; + if (info.bpp == 4) { + v2 = v & 15; + v >>= 4; + } + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) + out[z++] = 255; + if (i + 1 == (int)s->img_x) + break; + v = (info.bpp == 8) ? stbi__get8(s) : v2; + out[z++] = pal[v][0]; + out[z++] = pal[v][1]; + out[z++] = pal[v][2]; + if (target == 4) + out[z++] = 255; + } + stbi__skip(s, pad); + } + } + } + else { + int rshift = 0, gshift = 0, bshift = 0, ashift = 0, rcount = 0, + gcount = 0, bcount = 0, acount = 0; + int z = 0; + int easy = 0; + stbi__skip(s, info.offset - 14 - info.hsz); + if (info.bpp == 24) + width = 3 * s->img_x; + else if (info.bpp == 16) + width = 2 * s->img_x; + else /* bpp = 32 and pad = 0 */ + width = 0; + pad = (-width) & 3; + if (info.bpp == 24) { + easy = 1; + } + else if (info.bpp == 32) { + if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && + ma == 0xff000000) + easy = 2; + } + if (!easy) { + if (!mr || !mg || !mb) { + STBI_FREE(out); + return stbi__errpuc("bad masks", "Corrupt BMP"); + } + // right shift amt to put high bit in position #7 + rshift = stbi__high_bit(mr) - 7; + rcount = stbi__bitcount(mr); + gshift = stbi__high_bit(mg) - 7; + gcount = stbi__bitcount(mg); + bshift = stbi__high_bit(mb) - 7; + bcount = stbi__bitcount(mb); + ashift = stbi__high_bit(ma) - 7; + acount = stbi__bitcount(ma); + } + for (j = 0; j < (int)s->img_y; ++j) { + if (easy) { + for (i = 0; i < (int)s->img_x; ++i) { + unsigned char a; + out[z + 2] = stbi__get8(s); + out[z + 1] = stbi__get8(s); + out[z + 0] = stbi__get8(s); + z += 3; + a = (easy == 2 ? stbi__get8(s) : 255); + all_a |= a; + if (target == 4) + out[z++] = a; + } + } + else { + int bpp = info.bpp; + for (i = 0; i < (int)s->img_x; ++i) { + stbi__uint32 v = (bpp == 16 ? (stbi__uint32)stbi__get16le(s) + : stbi__get32le(s)); + unsigned int a; + out[z++] = STBI__BYTECAST( + stbi__shiftsigned(v & mr, rshift, rcount)); + out[z++] = STBI__BYTECAST( + stbi__shiftsigned(v & mg, gshift, gcount)); + out[z++] = STBI__BYTECAST( + stbi__shiftsigned(v & mb, bshift, bcount)); + a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); + all_a |= a; + if (target == 4) + out[z++] = STBI__BYTECAST(a); + } + } + stbi__skip(s, pad); + } + } + + // if alpha channel is all 0s, replace with all 255s + if (target == 4 && all_a == 0) + for (i = 4 * s->img_x * s->img_y - 1; i >= 0; i -= 4) + out[i] = 255; + + if (flip_vertically) { + stbi_uc t; + for (j = 0; j < (int)s->img_y >> 1; ++j) { + stbi_uc* p1 = out + j * s->img_x * target; + stbi_uc* p2 = out + (s->img_y - 1 - j) * s->img_x * target; + for (i = 0; i < (int)s->img_x * target; ++i) { + t = p1[i]; + p1[i] = p2[i]; + p2[i] = t; + } + } + } + + if (req_comp && req_comp != target) { + out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); + if (out == NULL) + return out; // stbi__convert_format frees input on failure + } + + *x = s->img_x; + *y = s->img_y; + if (comp) + *comp = s->img_n; + return out; +} +#endif + +// Targa Truevision - TGA +// by Jonathan Dummer +#ifndef STBI_NO_TGA +// returns STBI_rgb or whatever, 0 on error +static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) +{ + // only RGB or RGBA (incl. 16bit) or grey allowed + if (is_rgb16) + *is_rgb16 = 0; + switch (bits_per_pixel) { + case 8: + return STBI_grey; + case 16: + if (is_grey) + return STBI_grey_alpha; + // fallthrough + case 15: + if (is_rgb16) + *is_rgb16 = 1; + return STBI_rgb; + case 24: // fallthrough + case 32: + return bits_per_pixel / 8; + default: + return 0; + } +} + +static int stbi__tga_info(stbi__context* s, int* x, int* y, int* comp) +{ + int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, + tga_colormap_bpp; + int sz, tga_colormap_type; + stbi__get8(s); // discard Offset + tga_colormap_type = stbi__get8(s); // colormap type + if (tga_colormap_type > 1) { + stbi__rewind(s); + return 0; // only RGB or indexed allowed + } + tga_image_type = stbi__get8(s); // image type + if (tga_colormap_type == 1) { // colormapped (paletted) image + if (tga_image_type != 1 && tga_image_type != 9) { + stbi__rewind(s); + return 0; + } + stbi__skip( + s, 4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 4); // skip image x and y origin + tga_colormap_bpp = sz; + } + else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE + if ((tga_image_type != 2) && (tga_image_type != 3) && + (tga_image_type != 10) && (tga_image_type != 11)) { + stbi__rewind(s); + return 0; // only RGB or grey allowed, +/- RLE + } + stbi__skip(s, 9); // skip colormap specification and image x/y origin + tga_colormap_bpp = 0; + } + tga_w = stbi__get16le(s); + if (tga_w < 1) { + stbi__rewind(s); + return 0; // test width + } + tga_h = stbi__get16le(s); + if (tga_h < 1) { + stbi__rewind(s); + return 0; // test height + } + tga_bits_per_pixel = stbi__get8(s); // bits per pixel + stbi__get8(s); // ignore alpha bits + if (tga_colormap_bpp != 0) { + if ((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { + // when using a colormap, tga_bits_per_pixel is the size of the + // indexes I don't think anything but 8 or 16bit indexes makes sense + stbi__rewind(s); + return 0; + } + tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); + } + else { + tga_comp = stbi__tga_get_comp( + tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), + NULL); + } + if (!tga_comp) { + stbi__rewind(s); + return 0; + } + if (x) + *x = tga_w; + if (y) + *y = tga_h; + if (comp) + *comp = tga_comp; + return 1; // seems to have passed everything +} + +static int stbi__tga_test(stbi__context* s) +{ + int res = 0; + int sz, tga_color_type; + stbi__get8(s); // discard Offset + tga_color_type = stbi__get8(s); // color type + if (tga_color_type > 1) + goto errorEnd; // only RGB or indexed allowed + sz = stbi__get8(s); // image type + if (tga_color_type == 1) { // colormapped (paletted) image + if (sz != 1 && sz != 9) + goto errorEnd; // colortype 1 demands image type 1 or 9 + stbi__skip( + s, 4); // skip index of first colormap entry and number of entries + sz = stbi__get8(s); // check bits per palette color entry + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) + goto errorEnd; + stbi__skip(s, 4); // skip image x and y origin + } + else { // "normal" image w/o colormap + if ((sz != 2) && (sz != 3) && (sz != 10) && (sz != 11)) + goto errorEnd; // only RGB or grey allowed, +/- RLE + stbi__skip(s, 9); // skip colormap specification and image x/y origin + } + if (stbi__get16le(s) < 1) + goto errorEnd; // test width + if (stbi__get16le(s) < 1) + goto errorEnd; // test height + sz = stbi__get8(s); // bits per pixel + if ((tga_color_type == 1) && (sz != 8) && (sz != 16)) + goto errorEnd; // for colormapped images, bpp is size of an index + if ((sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32)) + goto errorEnd; + + res = 1; // if we got this far, everything's good and we can return 1 + // instead of 0 + +errorEnd: + stbi__rewind(s); + return res; +} + +// read 16bit value and convert to 24bit RGB +static void stbi__tga_read_rgb16(stbi__context* s, stbi_uc* out) +{ + stbi__uint16 px = (stbi__uint16)stbi__get16le(s); + stbi__uint16 fiveBitMask = 31; + // we have 3 channels with 5bits each + int r = (px >> 10) & fiveBitMask; + int g = (px >> 5) & fiveBitMask; + int b = px & fiveBitMask; + // Note that this saves the data in RGB(A) order, so it doesn't need to be + // swapped later + out[0] = (stbi_uc)((r * 255) / 31); + out[1] = (stbi_uc)((g * 255) / 31); + out[2] = (stbi_uc)((b * 255) / 31); + + // some people claim that the most significant bit might be used for alpha + // (possibly if an alpha-bit is set in the "image descriptor byte") + // but that only made 16bit test images completely translucent.. + // so let's treat all 15 and 16bit TGAs as RGB with no alpha. +} + +static void* stbi__tga_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri) +{ + // read in the TGA header stuff + int tga_offset = stbi__get8(s); + int tga_indexed = stbi__get8(s); + int tga_image_type = stbi__get8(s); + int tga_is_RLE = 0; + int tga_palette_start = stbi__get16le(s); + int tga_palette_len = stbi__get16le(s); + int tga_palette_bits = stbi__get8(s); + int tga_x_origin = stbi__get16le(s); + int tga_y_origin = stbi__get16le(s); + int tga_width = stbi__get16le(s); + int tga_height = stbi__get16le(s); + int tga_bits_per_pixel = stbi__get8(s); + int tga_comp, tga_rgb16 = 0; + int tga_inverted = stbi__get8(s); + // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused + // (useless?) + // image data + unsigned char* tga_data; + unsigned char* tga_palette = NULL; + int i, j; + unsigned char raw_data[4] = {0}; + int RLE_count = 0; + int RLE_repeating = 0; + int read_next_pixel = 1; + STBI_NOTUSED(ri); + + // do a tiny bit of precessing + if (tga_image_type >= 8) { + tga_image_type -= 8; + tga_is_RLE = 1; + } + tga_inverted = 1 - ((tga_inverted >> 5) & 1); + + // If I'm paletted, then I'll use the number of bits from the palette + if (tga_indexed) + tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); + else + tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), + &tga_rgb16); + + if (!tga_comp) // shouldn't really happen, stbi__tga_test() should have + // ensured basic consistency + return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); + + // tga info + *x = tga_width; + *y = tga_height; + if (comp) + *comp = tga_comp; + + if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) + return stbi__errpuc("too large", "Corrupt TGA"); + + tga_data = + (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); + if (!tga_data) + return stbi__errpuc("outofmem", "Out of memory"); + + // skip to the data's starting position (offset usually = 0) + stbi__skip(s, tga_offset); + + if (!tga_indexed && !tga_is_RLE && !tga_rgb16) { + for (i = 0; i < tga_height; ++i) { + int row = tga_inverted ? tga_height - i - 1 : i; + stbi_uc* tga_row = tga_data + row * tga_width * tga_comp; + stbi__getn(s, tga_row, tga_width * tga_comp); + } + } + else { + // do I need to load a palette? + if (tga_indexed) { + // any data to skip? (offset usually = 0) + stbi__skip(s, tga_palette_start); + // load the palette + tga_palette = + (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); + if (!tga_palette) { + STBI_FREE(tga_data); + return stbi__errpuc("outofmem", "Out of memory"); + } + if (tga_rgb16) { + stbi_uc* pal_entry = tga_palette; + STBI_ASSERT(tga_comp == STBI_rgb); + for (i = 0; i < tga_palette_len; ++i) { + stbi__tga_read_rgb16(s, pal_entry); + pal_entry += tga_comp; + } + } + else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { + STBI_FREE(tga_data); + STBI_FREE(tga_palette); + return stbi__errpuc("bad palette", "Corrupt TGA"); + } + } + // load the data + for (i = 0; i < tga_width * tga_height; ++i) { + // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? + if (tga_is_RLE) { + if (RLE_count == 0) { + // yep, get the next byte as a RLE command + int RLE_cmd = stbi__get8(s); + RLE_count = 1 + (RLE_cmd & 127); + RLE_repeating = RLE_cmd >> 7; + read_next_pixel = 1; + } + else if (!RLE_repeating) { + read_next_pixel = 1; + } + } + else { + read_next_pixel = 1; + } + // OK, if I need to read a pixel, do it now + if (read_next_pixel) { + // load however much data we did have + if (tga_indexed) { + // read in index, then perform the lookup + int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) + : stbi__get16le(s); + if (pal_idx >= tga_palette_len) { + // invalid index + pal_idx = 0; + } + pal_idx *= tga_comp; + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = tga_palette[pal_idx + j]; + } + } + else if (tga_rgb16) { + STBI_ASSERT(tga_comp == STBI_rgb); + stbi__tga_read_rgb16(s, raw_data); + } + else { + // read in the data raw + for (j = 0; j < tga_comp; ++j) { + raw_data[j] = stbi__get8(s); + } + } + // clear the reading flag for the next pixel + read_next_pixel = 0; + } // end of reading a pixel + + // copy data + for (j = 0; j < tga_comp; ++j) + tga_data[i * tga_comp + j] = raw_data[j]; + + // in case we're in RLE mode, keep counting down + --RLE_count; + } + // do I need to invert the image? + if (tga_inverted) { + for (j = 0; j * 2 < tga_height; ++j) { + int index1 = j * tga_width * tga_comp; + int index2 = (tga_height - 1 - j) * tga_width * tga_comp; + for (i = tga_width * tga_comp; i > 0; --i) { + unsigned char temp = tga_data[index1]; + tga_data[index1] = tga_data[index2]; + tga_data[index2] = temp; + ++index1; + ++index2; + } + } + } + // clear my palette, if I had one + if (tga_palette != NULL) { + STBI_FREE(tga_palette); + } + } + + // swap RGB - if the source data was RGB16, it already is in the right order + if (tga_comp >= 3 && !tga_rgb16) { + unsigned char* tga_pixel = tga_data; + for (i = 0; i < tga_width * tga_height; ++i) { + unsigned char temp = tga_pixel[0]; + tga_pixel[0] = tga_pixel[2]; + tga_pixel[2] = temp; + tga_pixel += tga_comp; + } + } + + // convert to target component count + if (req_comp && req_comp != tga_comp) + tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, + tga_height); + + // the things I do to get rid of an error message, and yet keep + // Microsoft's C compilers happy... [8^( + tga_palette_start = tga_palette_len = tga_palette_bits = tga_x_origin = + tga_y_origin = 0; + // OK, done + return tga_data; +} +#endif + +// ************************************************************************************************* +// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, +// tweaked by STB + +#ifndef STBI_NO_PSD +static int stbi__psd_test(stbi__context* s) +{ + int r = (stbi__get32be(s) == 0x38425053); + stbi__rewind(s); + return r; +} + +static int stbi__psd_decode_rle(stbi__context* s, stbi_uc* p, int pixelCount) +{ + int count, nleft, len; + + count = 0; + while ((nleft = pixelCount - count) > 0) { + len = stbi__get8(s); + if (len == 128) { + // No-op. + } + else if (len < 128) { + // Copy next len+1 bytes literally. + len++; + if (len > nleft) + return 0; // corrupt data + count += len; + while (len) { + *p = stbi__get8(s); + p += 4; + len--; + } + } + else if (len > 128) { + stbi_uc val; + // Next -len+1 bytes in the dest are replicated from next source + // byte. (Interpret len as a negative 8-bit int.) + len = 257 - len; + if (len > nleft) + return 0; // corrupt data + val = stbi__get8(s); + count += len; + while (len) { + *p = val; + p += 4; + len--; + } + } + } + + return 1; +} + +static void* stbi__psd_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri, int bpc) +{ + int pixelCount; + int channelCount, compression; + int channel, i; + int bitdepth; + int w, h; + stbi_uc* out; + STBI_NOTUSED(ri); + + // Check identifier + if (stbi__get32be(s) != 0x38425053) // "8BPS" + return stbi__errpuc("not PSD", "Corrupt PSD image"); + + // Check file type version. + if (stbi__get16be(s) != 1) + return stbi__errpuc("wrong version", + "Unsupported version of PSD image"); + + // Skip 6 reserved bytes. + stbi__skip(s, 6); + + // Read the number of channels (R, G, B, A, etc). + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) + return stbi__errpuc("wrong channel count", + "Unsupported number of channels in PSD image"); + + // Read the rows and columns of the image. + h = stbi__get32be(s); + w = stbi__get32be(s); + + // Make sure the depth is 8 bits. + bitdepth = stbi__get16be(s); + if (bitdepth != 8 && bitdepth != 16) + return stbi__errpuc("unsupported bit depth", + "PSD bit depth is not 8 or 16 bit"); + + // Make sure the color mode is RGB. + // Valid options are: + // 0: Bitmap + // 1: Grayscale + // 2: Indexed color + // 3: RGB color + // 4: CMYK color + // 7: Multichannel + // 8: Duotone + // 9: Lab color + if (stbi__get16be(s) != 3) + return stbi__errpuc("wrong color format", + "PSD is not in RGB color format"); + + // Skip the Mode Data. (It's the palette for indexed color; other info for + // other modes.) + stbi__skip(s, stbi__get32be(s)); + + // Skip the image resources. (resolution, pen tool paths, etc) + stbi__skip(s, stbi__get32be(s)); + + // Skip the reserved data. + stbi__skip(s, stbi__get32be(s)); + + // Find out if the data is compressed. + // Known values: + // 0: no compression + // 1: RLE compressed + compression = stbi__get16be(s); + if (compression > 1) + return stbi__errpuc("bad compression", + "PSD has an unknown compression format"); + + // Check size + if (!stbi__mad3sizes_valid(4, w, h, 0)) + return stbi__errpuc("too large", "Corrupt PSD"); + + // Create the destination image. + + if (!compression && bitdepth == 16 && bpc == 16) { + out = (stbi_uc*)stbi__malloc_mad3(8, w, h, 0); + ri->bits_per_channel = 16; + } + else + out = (stbi_uc*)stbi__malloc(4 * w * h); + + if (!out) + return stbi__errpuc("outofmem", "Out of memory"); + pixelCount = w * h; + + // Initialize the data to zero. + // memset( out, 0, pixelCount * 4 ); + + // Finally, the image data. + if (compression) { + // RLE as used by .PSD and .TIFF + // Loop until you get the number of unpacked bytes you are expecting: + // Read the next source byte into n. + // If n is between 0 and 127 inclusive, copy the next n+1 bytes + // literally. Else if n is between -127 and -1 inclusive, copy the + // next byte -n+1 times. Else if n is 128, noop. + // Endloop + + // The RLE-compressed data is preceded by a 2-byte data count for each + // row in the data, which we're going to just skip. + stbi__skip(s, h * channelCount * 2); + + // Read the RLE data by channel. + for (channel = 0; channel < 4; channel++) { + stbi_uc* p; + + p = out + channel; + if (channel >= channelCount) { + // Fill this channel with default data. + for (i = 0; i < pixelCount; i++, p += 4) + *p = (channel == 3 ? 255 : 0); + } + else { + // Read the RLE data. + if (!stbi__psd_decode_rle(s, p, pixelCount)) { + STBI_FREE(out); + return stbi__errpuc("corrupt", "bad RLE data"); + } + } + } + } + else { + // We're at the raw image data. It's each channel in order (Red, Green, + // Blue, Alpha, ...) where each channel consists of an 8-bit (or 16-bit) + // value for each pixel in the image. + + // Read the data by channel. + for (channel = 0; channel < 4; channel++) { + if (channel >= channelCount) { + // Fill this channel with default data. + if (bitdepth == 16 && bpc == 16) { + stbi__uint16* q = ((stbi__uint16*)out) + channel; + stbi__uint16 val = channel == 3 ? 65535 : 0; + for (i = 0; i < pixelCount; i++, q += 4) + *q = val; + } + else { + stbi_uc* p = out + channel; + stbi_uc val = channel == 3 ? 255 : 0; + for (i = 0; i < pixelCount; i++, p += 4) + *p = val; + } + } + else { + if (ri->bits_per_channel == 16) { // output bpc + stbi__uint16* q = ((stbi__uint16*)out) + channel; + for (i = 0; i < pixelCount; i++, q += 4) + *q = (stbi__uint16)stbi__get16be(s); + } + else { + stbi_uc* p = out + channel; + if (bitdepth == 16) { // input bpc + for (i = 0; i < pixelCount; i++, p += 4) + *p = (stbi_uc)(stbi__get16be(s) >> 8); + } + else { + for (i = 0; i < pixelCount; i++, p += 4) + *p = stbi__get8(s); + } + } + } + } + } + + // remove weird white matte from PSD + if (channelCount >= 4) { + if (ri->bits_per_channel == 16) { + for (i = 0; i < w * h; ++i) { + stbi__uint16* pixel = (stbi__uint16*)out + 4 * i; + if (pixel[3] != 0 && pixel[3] != 65535) { + float a = pixel[3] / 65535.0f; + float ra = 1.0f / a; + float inv_a = 65535.0f * (1 - ra); + pixel[0] = (stbi__uint16)(pixel[0] * ra + inv_a); + pixel[1] = (stbi__uint16)(pixel[1] * ra + inv_a); + pixel[2] = (stbi__uint16)(pixel[2] * ra + inv_a); + } + } + } + else { + for (i = 0; i < w * h; ++i) { + unsigned char* pixel = out + 4 * i; + if (pixel[3] != 0 && pixel[3] != 255) { + float a = pixel[3] / 255.0f; + float ra = 1.0f / a; + float inv_a = 255.0f * (1 - ra); + pixel[0] = (unsigned char)(pixel[0] * ra + inv_a); + pixel[1] = (unsigned char)(pixel[1] * ra + inv_a); + pixel[2] = (unsigned char)(pixel[2] * ra + inv_a); + } + } + } + } + + // convert to desired output format + if (req_comp && req_comp != 4) { + if (ri->bits_per_channel == 16) + out = (stbi_uc*)stbi__convert_format16((stbi__uint16*)out, 4, + req_comp, w, h); + else + out = stbi__convert_format(out, 4, req_comp, w, h); + if (out == NULL) + return out; // stbi__convert_format frees input on failure + } + + if (comp) + *comp = 4; + *y = h; + *x = w; + + return out; +} +#endif + +// ************************************************************************************************* +// Softimage PIC loader +// by Tom Seddon +// +// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format +// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ + +#ifndef STBI_NO_PIC +static int stbi__pic_is4(stbi__context* s, const char* str) +{ + int i; + for (i = 0; i < 4; ++i) + if (stbi__get8(s) != (stbi_uc)str[i]) + return 0; + + return 1; +} + +static int stbi__pic_test_core(stbi__context* s) +{ + int i; + + if (!stbi__pic_is4(s, "\x53\x80\xF6\x34")) + return 0; + + for (i = 0; i < 84; ++i) + stbi__get8(s); + + if (!stbi__pic_is4(s, "PICT")) + return 0; + + return 1; +} + +typedef struct { + stbi_uc size, type, channel; +} stbi__pic_packet; + +static stbi_uc* stbi__readval(stbi__context* s, int channel, stbi_uc* dest) +{ + int mask = 0x80, i; + + for (i = 0; i < 4; ++i, mask >>= 1) { + if (channel & mask) { + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "PIC file too short"); + dest[i] = stbi__get8(s); + } + } + + return dest; +} + +static void stbi__copyval(int channel, stbi_uc* dest, const stbi_uc* src) +{ + int mask = 0x80, i; + + for (i = 0; i < 4; ++i, mask >>= 1) + if (channel & mask) + dest[i] = src[i]; +} + +static stbi_uc* stbi__pic_load_core(stbi__context* s, int width, int height, + int* comp, stbi_uc* result) +{ + int act_comp = 0, num_packets = 0, y, chained; + stbi__pic_packet packets[10]; + + // this will (should...) cater for even some bizarre stuff like having data + // for the same channel in multiple packets. + do { + stbi__pic_packet* packet; + + if (num_packets == sizeof(packets) / sizeof(packets[0])) + return stbi__errpuc("bad format", "too many packets"); + + packet = &packets[num_packets++]; + + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + + act_comp |= packet->channel; + + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "file too short (reading packets)"); + if (packet->size != 8) + return stbi__errpuc("bad format", "packet isn't 8bpp"); + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? + + for (y = 0; y < height; ++y) { + int packet_idx; + + for (packet_idx = 0; packet_idx < num_packets; ++packet_idx) { + stbi__pic_packet* packet = &packets[packet_idx]; + stbi_uc* dest = result + y * width * 4; + + switch (packet->type) { + default: + return stbi__errpuc("bad format", + "packet has bad compression type"); + + case 0: { // uncompressed + int x; + + for (x = 0; x < width; ++x, dest += 4) + if (!stbi__readval(s, packet->channel, dest)) + return 0; + break; + } + + case 1: // Pure RLE + { + int left = width, i; + + while (left > 0) { + stbi_uc count, value[4]; + + count = stbi__get8(s); + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", + "file too short (pure read count)"); + + if (count > left) + count = (stbi_uc)left; + + if (!stbi__readval(s, packet->channel, value)) + return 0; + + for (i = 0; i < count; ++i, dest += 4) + stbi__copyval(packet->channel, dest, value); + left -= count; + } + } break; + + case 2: { // Mixed RLE + int left = width; + while (left > 0) { + int count = stbi__get8(s), i; + if (stbi__at_eof(s)) + return stbi__errpuc( + "bad file", "file too short (mixed read count)"); + + if (count >= 128) { // Repeated + stbi_uc value[4]; + + if (count == 128) + count = stbi__get16be(s); + else + count -= 127; + if (count > left) + return stbi__errpuc("bad file", "scanline overrun"); + + if (!stbi__readval(s, packet->channel, value)) + return 0; + + for (i = 0; i < count; ++i, dest += 4) + stbi__copyval(packet->channel, dest, value); + } + else { // Raw + ++count; + if (count > left) + return stbi__errpuc("bad file", "scanline overrun"); + + for (i = 0; i < count; ++i, dest += 4) + if (!stbi__readval(s, packet->channel, dest)) + return 0; + } + left -= count; + } + break; + } + } + } + } + + return result; +} + +static void* stbi__pic_load(stbi__context* s, int* px, int* py, int* comp, + int req_comp, stbi__result_info* ri) +{ + stbi_uc* result; + int i, x, y, internal_comp; + STBI_NOTUSED(ri); + + if (!comp) + comp = &internal_comp; + + for (i = 0; i < 92; ++i) + stbi__get8(s); + + x = stbi__get16be(s); + y = stbi__get16be(s); + if (stbi__at_eof(s)) + return stbi__errpuc("bad file", "file too short (pic header)"); + if (!stbi__mad3sizes_valid(x, y, 4, 0)) + return stbi__errpuc("too large", "PIC image too large to decode"); + + stbi__get32be(s); // skip `ratio' + stbi__get16be(s); // skip `fields' + stbi__get16be(s); // skip `pad' + + // intermediate buffer is RGBA + result = (stbi_uc*)stbi__malloc_mad3(x, y, 4, 0); + memset(result, 0xff, x * y * 4); + + if (!stbi__pic_load_core(s, x, y, comp, result)) { + STBI_FREE(result); + result = 0; + } + *px = x; + *py = y; + if (req_comp == 0) + req_comp = *comp; + result = stbi__convert_format(result, 4, req_comp, x, y); + + return result; +} + +static int stbi__pic_test(stbi__context* s) +{ + int r = stbi__pic_test_core(s); + stbi__rewind(s); + return r; +} +#endif + +// ************************************************************************************************* +// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb + +#ifndef STBI_NO_GIF +typedef struct { + stbi__int16 prefix; + stbi_uc first; + stbi_uc suffix; +} stbi__gif_lzw; + +typedef struct { + int w, h; + stbi_uc* out; // output buffer (always 4 components) + stbi_uc* + background; // The current "background" as far as a gif is concerned + stbi_uc* history; + int flags, bgindex, ratio, transparent, eflags; + stbi_uc pal[256][4]; + stbi_uc lpal[256][4]; + stbi__gif_lzw codes[8192]; + stbi_uc* color_table; + int parse, step; + int lflags; + int start_x, start_y; + int max_x, max_y; + int cur_x, cur_y; + int line_size; + int delay; +} stbi__gif; + +static int stbi__gif_test_raw(stbi__context* s) +{ + int sz; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || + stbi__get8(s) != '8') + return 0; + sz = stbi__get8(s); + if (sz != '9' && sz != '7') + return 0; + if (stbi__get8(s) != 'a') + return 0; + return 1; +} + +static int stbi__gif_test(stbi__context* s) +{ + int r = stbi__gif_test_raw(s); + stbi__rewind(s); + return r; +} + +static void stbi__gif_parse_colortable(stbi__context* s, stbi_uc pal[256][4], + int num_entries, int transp) +{ + int i; + for (i = 0; i < num_entries; ++i) { + pal[i][2] = stbi__get8(s); + pal[i][1] = stbi__get8(s); + pal[i][0] = stbi__get8(s); + pal[i][3] = transp == i ? 0 : 255; + } +} + +static int stbi__gif_header(stbi__context* s, stbi__gif* g, int* comp, + int is_info) +{ + stbi_uc version; + if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || + stbi__get8(s) != '8') + return stbi__err("not GIF", "Corrupt GIF"); + + version = stbi__get8(s); + if (version != '7' && version != '9') + return stbi__err("not GIF", "Corrupt GIF"); + if (stbi__get8(s) != 'a') + return stbi__err("not GIF", "Corrupt GIF"); + + stbi__g_failure_reason = ""; + g->w = stbi__get16le(s); + g->h = stbi__get16le(s); + g->flags = stbi__get8(s); + g->bgindex = stbi__get8(s); + g->ratio = stbi__get8(s); + g->transparent = -1; + + if (comp != 0) + *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the + // comments + + if (is_info) + return 1; + + if (g->flags & 0x80) + stbi__gif_parse_colortable(s, g->pal, 2 << (g->flags & 7), -1); + + return 1; +} + +static int stbi__gif_info_raw(stbi__context* s, int* x, int* y, int* comp) +{ + stbi__gif* g = (stbi__gif*)stbi__malloc(sizeof(stbi__gif)); + if (!stbi__gif_header(s, g, comp, 1)) { + STBI_FREE(g); + stbi__rewind(s); + return 0; + } + if (x) + *x = g->w; + if (y) + *y = g->h; + STBI_FREE(g); + return 1; +} + +static void stbi__out_gif_code(stbi__gif* g, stbi__uint16 code) +{ + stbi_uc *p, *c; + int idx; + + // recurse to decode the prefixes, since the linked-list is backwards, + // and working backwards through an interleaved image would be nasty + if (g->codes[code].prefix >= 0) + stbi__out_gif_code(g, g->codes[code].prefix); + + if (g->cur_y >= g->max_y) + return; + + idx = g->cur_x + g->cur_y; + p = &g->out[idx]; + g->history[idx / 4] = 1; + + c = &g->color_table[g->codes[code].suffix * 4]; + if (c[3] > 128) { // don't render transparent pixels; + p[0] = c[2]; + p[1] = c[1]; + p[2] = c[0]; + p[3] = c[3]; + } + g->cur_x += 4; + + if (g->cur_x >= g->max_x) { + g->cur_x = g->start_x; + g->cur_y += g->step; + + while (g->cur_y >= g->max_y && g->parse > 0) { + g->step = (1 << g->parse) * g->line_size; + g->cur_y = g->start_y + (g->step >> 1); + --g->parse; + } + } +} + +static stbi_uc* stbi__process_gif_raster(stbi__context* s, stbi__gif* g) +{ + stbi_uc lzw_cs; + stbi__int32 len, init_code; + stbi__uint32 first; + stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; + stbi__gif_lzw* p; + + lzw_cs = stbi__get8(s); + if (lzw_cs > 12) + return NULL; + clear = 1 << lzw_cs; + first = 1; + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + bits = 0; + valid_bits = 0; + for (init_code = 0; init_code < clear; init_code++) { + g->codes[init_code].prefix = -1; + g->codes[init_code].first = (stbi_uc)init_code; + g->codes[init_code].suffix = (stbi_uc)init_code; + } + + // support no starting clear code + avail = clear + 2; + oldcode = -1; + + len = 0; + for (;;) { + if (valid_bits < codesize) { + if (len == 0) { + len = stbi__get8(s); // start new block + if (len == 0) + return g->out; + } + --len; + bits |= (stbi__int32)stbi__get8(s) << valid_bits; + valid_bits += 8; + } + else { + stbi__int32 code = bits & codemask; + bits >>= codesize; + valid_bits -= codesize; + // @OPTIMIZE: is there some way we can accelerate the non-clear + // path? + if (code == clear) { // clear code + codesize = lzw_cs + 1; + codemask = (1 << codesize) - 1; + avail = clear + 2; + oldcode = -1; + first = 0; + } + else if (code == clear + 1) { // end of stream code + stbi__skip(s, len); + while ((len = stbi__get8(s)) > 0) + stbi__skip(s, len); + return g->out; + } + else if (code <= avail) { + if (first) { + return stbi__errpuc("no clear code", "Corrupt GIF"); + } + + if (oldcode >= 0) { + p = &g->codes[avail++]; + if (avail > 8192) { + return stbi__errpuc("too many codes", "Corrupt GIF"); + } + + p->prefix = (stbi__int16)oldcode; + p->first = g->codes[oldcode].first; + p->suffix = + (code == avail) ? p->first : g->codes[code].first; + } + else if (code == avail) + return stbi__errpuc("illegal code in raster", + "Corrupt GIF"); + + stbi__out_gif_code(g, (stbi__uint16)code); + + if ((avail & codemask) == 0 && avail <= 0x0FFF) { + codesize++; + codemask = (1 << codesize) - 1; + } + + oldcode = code; + } + else { + return stbi__errpuc("illegal code in raster", "Corrupt GIF"); + } + } + } +} + +// this function is designed to support animated gifs, although stb_image +// doesn't support it two back is the image from two frames ago, used for a very +// specific disposal format +static stbi_uc* stbi__gif_load_next(stbi__context* s, stbi__gif* g, int* comp, + int req_comp, stbi_uc* two_back) +{ + int dispose; + int first_frame; + int pi; + int pcount; + STBI_NOTUSED(req_comp); + + // on first frame, any non-written pixels get the background colour + // (non-transparent) + first_frame = 0; + if (g->out == 0) { + if (!stbi__gif_header(s, g, comp, 0)) + return 0; // stbi__g_failure_reason set by stbi__gif_header + g->out = (stbi_uc*)stbi__malloc(4 * g->w * g->h); + g->background = (stbi_uc*)stbi__malloc(4 * g->w * g->h); + g->history = (stbi_uc*)stbi__malloc(g->w * g->h); + if (g->out == 0) + return stbi__errpuc("outofmem", "Out of memory"); + + // image is treated as "transparent" at the start - ie, nothing + // overwrites the current background; background colour is only used for + // pixels that are not rendered first frame, after that "background" + // color refers to the color that was there the previous frame. + memset(g->out, 0x00, 4 * g->w * g->h); + memset(g->background, 0x00, + 4 * g->w * g->h); // state of the background (starts transparent) + memset(g->history, 0x00, + g->w * g->h); // pixels that were affected previous frame + first_frame = 1; + } + else { + // second frame - how do we dispoase of the previous one? + dispose = (g->eflags & 0x1C) >> 2; + pcount = g->w * g->h; + + if ((dispose == 3) && (two_back == 0)) { + dispose = 2; // if I don't have an image to revert back to, default + // to the old background + } + + if (dispose == 3) { // use previous graphic + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy(&g->out[pi * 4], &two_back[pi * 4], 4); + } + } + } + else if (dispose == 2) { + // restore what was changed last frame to background before that + // frame; + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi]) { + memcpy(&g->out[pi * 4], &g->background[pi * 4], 4); + } + } + } + else { + // This is a non-disposal case eithe way, so just + // leave the pixels as is, and they will become the new background + // 1: do not dispose + // 0: not specified. + } + + // background is what out is after the undoing of the previou frame; + memcpy(g->background, g->out, 4 * g->w * g->h); + } + + // clear my history; + memset(g->history, 0x00, + g->w * g->h); // pixels that were affected previous frame + + for (;;) { + int tag = stbi__get8(s); + switch (tag) { + case 0x2C: /* Image Descriptor */ + { + stbi__int32 x, y, w, h; + stbi_uc* o; + + x = stbi__get16le(s); + y = stbi__get16le(s); + w = stbi__get16le(s); + h = stbi__get16le(s); + if (((x + w) > (g->w)) || ((y + h) > (g->h))) + return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); + + g->line_size = g->w * 4; + g->start_x = x * 4; + g->start_y = y * g->line_size; + g->max_x = g->start_x + w * 4; + g->max_y = g->start_y + h * g->line_size; + g->cur_x = g->start_x; + g->cur_y = g->start_y; + + g->lflags = stbi__get8(s); + + if (g->lflags & 0x40) { + g->step = 8 * g->line_size; // first interlaced spacing + g->parse = 3; + } + else { + g->step = g->line_size; + g->parse = 0; + } + + if (g->lflags & 0x80) { + stbi__gif_parse_colortable(s, g->lpal, 2 << (g->lflags & 7), + g->eflags & 0x01 ? g->transparent + : -1); + g->color_table = (stbi_uc*)g->lpal; + } + else if (g->flags & 0x80) { + g->color_table = (stbi_uc*)g->pal; + } + else + return stbi__errpuc("missing color table", "Corrupt GIF"); + + o = stbi__process_gif_raster(s, g); + if (o == NULL) + return NULL; + + // if this was the first frame, + pcount = g->w * g->h; + if (first_frame && (g->bgindex > 0)) { + // if first frame, any pixel not drawn to gets the background + // color + for (pi = 0; pi < pcount; ++pi) { + if (g->history[pi] == 0) { + g->pal[g->bgindex][3] = + 255; // just in case it was made transparent, undo + // that; It will be reset next frame if need + // be; + memcpy(&g->out[pi * 4], &g->pal[g->bgindex], 4); + } + } + } + + return o; + } + + case 0x21: // Comment Extension. + { + int len; + int ext = stbi__get8(s); + if (ext == 0xF9) { // Graphic Control Extension. + len = stbi__get8(s); + if (len == 4) { + g->eflags = stbi__get8(s); + g->delay = + 10 * stbi__get16le(s); // delay - 1/100th of a second, + // saving as 1/1000ths. + + // unset old transparent + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 255; + } + if (g->eflags & 0x01) { + g->transparent = stbi__get8(s); + if (g->transparent >= 0) { + g->pal[g->transparent][3] = 0; + } + } + else { + // don't need transparent + stbi__skip(s, 1); + g->transparent = -1; + } + } + else { + stbi__skip(s, len); + break; + } + } + while ((len = stbi__get8(s)) != 0) { + stbi__skip(s, len); + } + break; + } + + case 0x3B: // gif stream termination code + return (stbi_uc*)s; // using '1' causes warning on some compilers + + default: + return stbi__errpuc("unknown code", "Corrupt GIF"); + } + } +} + +static void* stbi__load_gif_main(stbi__context* s, int** delays, int* x, int* y, + int* z, int* comp, int req_comp) +{ + if (stbi__gif_test(s)) { + int layers = 0; + stbi_uc* u = 0; + stbi_uc* out = 0; + stbi_uc* two_back = 0; + stbi__gif g; + int stride; + memset(&g, 0, sizeof(g)); + if (delays) { + *delays = 0; + } + + do { + u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); + if (u == (stbi_uc*)s) + u = 0; // end of animated gif marker + + if (u) { + *x = g.w; + *y = g.h; + ++layers; + stride = g.w * g.h * 4; + + if (out) { + out = (stbi_uc*)STBI_REALLOC(out, layers * stride); + if (delays) { + *delays = + (int*)STBI_REALLOC(*delays, sizeof(int) * layers); + } + } + else { + out = (stbi_uc*)stbi__malloc(layers * stride); + if (delays) { + *delays = (int*)stbi__malloc(layers * sizeof(int)); + } + } + memcpy(out + ((layers - 1) * stride), u, stride); + if (layers >= 2) { + two_back = out - 2 * stride; + } + + if (delays) { + (*delays)[layers - 1U] = g.delay; + } + } + } while (u != 0); + + // free temp buffer; + STBI_FREE(g.out); + STBI_FREE(g.history); + STBI_FREE(g.background); + + // do the final conversion after loading everything; + if (req_comp && req_comp != 4) + out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); + + *z = layers; + return out; + } + else { + return stbi__errpuc("not GIF", "Image was not as a gif type."); + } +} + +static void* stbi__gif_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri) +{ + stbi_uc* u = 0; + stbi__gif g; + memset(&g, 0, sizeof(g)); + STBI_NOTUSED(ri); + + u = stbi__gif_load_next(s, &g, comp, req_comp, 0); + if (u == (stbi_uc*)s) + u = 0; // end of animated gif marker + if (u) { + *x = g.w; + *y = g.h; + + // moved conversion to after successful load so that the same + // can be done for multiple frames. + if (req_comp && req_comp != 4) + u = stbi__convert_format(u, 4, req_comp, g.w, g.h); + } + + // free buffers needed for multiple frame loading; + STBI_FREE(g.history); + STBI_FREE(g.background); + + return u; +} + +static int stbi__gif_info(stbi__context* s, int* x, int* y, int* comp) +{ + return stbi__gif_info_raw(s, x, y, comp); +} +#endif + +// ************************************************************************************************* +// Radiance RGBE HDR loader +// originally by Nicolas Schulz +#ifndef STBI_NO_HDR +static int stbi__hdr_test_core(stbi__context* s, const char* signature) +{ + int i; + for (i = 0; signature[i]; ++i) + if (stbi__get8(s) != signature[i]) + return 0; + stbi__rewind(s); + return 1; +} + +static int stbi__hdr_test(stbi__context* s) +{ + int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); + stbi__rewind(s); + if (!r) { + r = stbi__hdr_test_core(s, "#?RGBE\n"); + stbi__rewind(s); + } + return r; +} + +#define STBI__HDR_BUFLEN 1024 +static char* stbi__hdr_gettoken(stbi__context* z, char* buffer) +{ + int len = 0; + char c = '\0'; + + c = (char)stbi__get8(z); + + while (!stbi__at_eof(z) && c != '\n') { + buffer[len++] = c; + if (len == STBI__HDR_BUFLEN - 1) { + // flush to end of line + while (!stbi__at_eof(z) && stbi__get8(z) != '\n') + ; + break; + } + c = (char)stbi__get8(z); + } + + buffer[len] = 0; + return buffer; +} + +static void stbi__hdr_convert(float* output, stbi_uc* input, int req_comp) +{ + if (input[3] != 0) { + float f1; + // Exponent + f1 = (float)ldexp(1.0f, input[3] - (int)(128 + 8)); + if (req_comp <= 2) + output[0] = (input[0] + input[1] + input[2]) * f1 / 3; + else { + output[0] = input[0] * f1; + output[1] = input[1] * f1; + output[2] = input[2] * f1; + } + if (req_comp == 2) + output[1] = 1; + if (req_comp == 4) + output[3] = 1; + } + else { + switch (req_comp) { + case 4: + output[3] = 1; /* fallthrough */ + case 3: + output[0] = output[1] = output[2] = 0; + break; + case 2: + output[1] = 1; /* fallthrough */ + case 1: + output[0] = 0; + break; + } + } +} + +static float* stbi__hdr_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri) +{ + char buffer[STBI__HDR_BUFLEN]; + char* token; + int valid = 0; + int width, height; + stbi_uc* scanline; + float* hdr_data; + int len; + unsigned char count, value; + int i, j, k, c1, c2, z; + const char* headerToken; + STBI_NOTUSED(ri); + + // Check identifier + headerToken = stbi__hdr_gettoken(s, buffer); + if (strcmp(headerToken, "#?RADIANCE") != 0 && + strcmp(headerToken, "#?RGBE") != 0) + return stbi__errpf("not HDR", "Corrupt HDR image"); + + // Parse header + for (;;) { + token = stbi__hdr_gettoken(s, buffer); + if (token[0] == 0) + break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) + valid = 1; + } + + if (!valid) + return stbi__errpf("unsupported format", "Unsupported HDR format"); + + // Parse width and height + // can't use sscanf() if we're not using stdio! + token = stbi__hdr_gettoken(s, buffer); + if (strncmp(token, "-Y ", 3)) + return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + height = (int)strtol(token, &token, 10); + while (*token == ' ') + ++token; + if (strncmp(token, "+X ", 3)) + return stbi__errpf("unsupported data layout", "Unsupported HDR format"); + token += 3; + width = (int)strtol(token, NULL, 10); + + *x = width; + *y = height; + + if (comp) + *comp = 3; + if (req_comp == 0) + req_comp = 3; + + if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) + return stbi__errpf("too large", "HDR image is too large"); + + // Read data + hdr_data = + (float*)stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); + if (!hdr_data) + return stbi__errpf("outofmem", "Out of memory"); + + // Load image data + // image data is stored as some number of sca + if (width < 8 || width >= 32768) { + // Read flat data + for (j = 0; j < height; ++j) { + for (i = 0; i < width; ++i) { + stbi_uc rgbe[4]; + main_decode_loop: + stbi__getn(s, rgbe, 4); + stbi__hdr_convert(hdr_data + j * width * req_comp + + i * req_comp, + rgbe, req_comp); + } + } + } + else { + // Read RLE-encoded data + scanline = NULL; + + for (j = 0; j < height; ++j) { + c1 = stbi__get8(s); + c2 = stbi__get8(s); + len = stbi__get8(s); + if (c1 != 2 || c2 != 2 || (len & 0x80)) { + // not run-length encoded, so we have to actually use THIS data + // as a decoded pixel (note this can't be a valid pixel--one of + // RGB must be >= 128) + stbi_uc rgbe[4]; + rgbe[0] = (stbi_uc)c1; + rgbe[1] = (stbi_uc)c2; + rgbe[2] = (stbi_uc)len; + rgbe[3] = (stbi_uc)stbi__get8(s); + stbi__hdr_convert(hdr_data, rgbe, req_comp); + i = 1; + j = 0; + STBI_FREE(scanline); + goto main_decode_loop; // yes, this makes no sense + } + len <<= 8; + len |= stbi__get8(s); + if (len != width) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf("invalid decoded scanline length", + "corrupt HDR"); + } + if (scanline == NULL) { + scanline = (stbi_uc*)stbi__malloc_mad2(width, 4, 0); + if (!scanline) { + STBI_FREE(hdr_data); + return stbi__errpf("outofmem", "Out of memory"); + } + } + + for (k = 0; k < 4; ++k) { + int nleft; + i = 0; + while ((nleft = width - i) > 0) { + count = stbi__get8(s); + if (count > 128) { + // Run + value = stbi__get8(s); + count -= 128; + if (count > nleft) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf("corrupt", + "bad RLE data in HDR"); + } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = value; + } + else { + // Dump + if (count > nleft) { + STBI_FREE(hdr_data); + STBI_FREE(scanline); + return stbi__errpf("corrupt", + "bad RLE data in HDR"); + } + for (z = 0; z < count; ++z) + scanline[i++ * 4 + k] = stbi__get8(s); + } + } + } + for (i = 0; i < width; ++i) + stbi__hdr_convert(hdr_data + (j * width + i) * req_comp, + scanline + i * 4, req_comp); + } + if (scanline) + STBI_FREE(scanline); + } + + return hdr_data; +} + +static int stbi__hdr_info(stbi__context* s, int* x, int* y, int* comp) +{ + char buffer[STBI__HDR_BUFLEN]; + char* token; + int valid = 0; + int dummy; + + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + + if (stbi__hdr_test(s) == 0) { + stbi__rewind(s); + return 0; + } + + for (;;) { + token = stbi__hdr_gettoken(s, buffer); + if (token[0] == 0) + break; + if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) + valid = 1; + } + + if (!valid) { + stbi__rewind(s); + return 0; + } + token = stbi__hdr_gettoken(s, buffer); + if (strncmp(token, "-Y ", 3)) { + stbi__rewind(s); + return 0; + } + token += 3; + *y = (int)strtol(token, &token, 10); + while (*token == ' ') + ++token; + if (strncmp(token, "+X ", 3)) { + stbi__rewind(s); + return 0; + } + token += 3; + *x = (int)strtol(token, NULL, 10); + *comp = 3; + return 1; +} +#endif // STBI_NO_HDR + +#ifndef STBI_NO_BMP +static int stbi__bmp_info(stbi__context* s, int* x, int* y, int* comp) +{ + void* p; + stbi__bmp_data info; + + info.all_a = 255; + p = stbi__bmp_parse_header(s, &info); + stbi__rewind(s); + if (p == NULL) + return 0; + if (x) + *x = s->img_x; + if (y) + *y = s->img_y; + if (comp) + *comp = info.ma ? 4 : 3; + return 1; +} +#endif + +#ifndef STBI_NO_PSD +static int stbi__psd_info(stbi__context* s, int* x, int* y, int* comp) +{ + int channelCount, dummy, depth; + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind(s); + return 0; + } + *y = stbi__get32be(s); + *x = stbi__get32be(s); + depth = stbi__get16be(s); + if (depth != 8 && depth != 16) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 3) { + stbi__rewind(s); + return 0; + } + *comp = 4; + return 1; +} + +static int stbi__psd_is16(stbi__context* s) +{ + int channelCount, depth; + if (stbi__get32be(s) != 0x38425053) { + stbi__rewind(s); + return 0; + } + if (stbi__get16be(s) != 1) { + stbi__rewind(s); + return 0; + } + stbi__skip(s, 6); + channelCount = stbi__get16be(s); + if (channelCount < 0 || channelCount > 16) { + stbi__rewind(s); + return 0; + } + (void)stbi__get32be(s); + (void)stbi__get32be(s); + depth = stbi__get16be(s); + if (depth != 16) { + stbi__rewind(s); + return 0; + } + return 1; +} +#endif + +#ifndef STBI_NO_PIC +static int stbi__pic_info(stbi__context* s, int* x, int* y, int* comp) +{ + int act_comp = 0, num_packets = 0, chained, dummy; + stbi__pic_packet packets[10]; + + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + + if (!stbi__pic_is4(s, "\x53\x80\xF6\x34")) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 88); + + *x = stbi__get16be(s); + *y = stbi__get16be(s); + if (stbi__at_eof(s)) { + stbi__rewind(s); + return 0; + } + if ((*x) != 0 && (1 << 28) / (*x) < (*y)) { + stbi__rewind(s); + return 0; + } + + stbi__skip(s, 8); + + do { + stbi__pic_packet* packet; + + if (num_packets == sizeof(packets) / sizeof(packets[0])) + return 0; + + packet = &packets[num_packets++]; + chained = stbi__get8(s); + packet->size = stbi__get8(s); + packet->type = stbi__get8(s); + packet->channel = stbi__get8(s); + act_comp |= packet->channel; + + if (stbi__at_eof(s)) { + stbi__rewind(s); + return 0; + } + if (packet->size != 8) { + stbi__rewind(s); + return 0; + } + } while (chained); + + *comp = (act_comp & 0x10 ? 4 : 3); + + return 1; +} +#endif + +// ************************************************************************************************* +// Portable Gray Map and Portable Pixel Map loader +// by Ken Miller +// +// PGM: http://netpbm.sourceforge.net/doc/pgm.html +// PPM: http://netpbm.sourceforge.net/doc/ppm.html +// +// Known limitations: +// Does not support comments in the header section +// Does not support ASCII image data (formats P2 and P3) +// Does not support 16-bit-per-channel + +#ifndef STBI_NO_PNM + +static int stbi__pnm_test(stbi__context* s) +{ + char p, t; + p = (char)stbi__get8(s); + t = (char)stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + return 1; +} + +static void* stbi__pnm_load(stbi__context* s, int* x, int* y, int* comp, + int req_comp, stbi__result_info* ri) +{ + stbi_uc* out; + STBI_NOTUSED(ri); + + if (!stbi__pnm_info(s, (int*)&s->img_x, (int*)&s->img_y, (int*)&s->img_n)) + return 0; + + *x = s->img_x; + *y = s->img_y; + if (comp) + *comp = s->img_n; + + if (!stbi__mad3sizes_valid(s->img_n, s->img_x, s->img_y, 0)) + return stbi__errpuc("too large", "PNM too large"); + + out = (stbi_uc*)stbi__malloc_mad3(s->img_n, s->img_x, s->img_y, 0); + if (!out) + return stbi__errpuc("outofmem", "Out of memory"); + stbi__getn(s, out, s->img_n * s->img_x * s->img_y); + + if (req_comp && req_comp != s->img_n) { + out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); + if (out == NULL) + return out; // stbi__convert_format frees input on failure + } + return out; +} + +static int stbi__pnm_isspace(char c) +{ + return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || + c == '\r'; +} + +static void stbi__pnm_skip_whitespace(stbi__context* s, char* c) +{ + for (;;) { + while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) + *c = (char)stbi__get8(s); + + if (stbi__at_eof(s) || *c != '#') + break; + + while (!stbi__at_eof(s) && *c != '\n' && *c != '\r') + *c = (char)stbi__get8(s); + } +} + +static int stbi__pnm_isdigit(char c) { return c >= '0' && c <= '9'; } + +static int stbi__pnm_getinteger(stbi__context* s, char* c) +{ + int value = 0; + + while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { + value = value * 10 + (*c - '0'); + *c = (char)stbi__get8(s); + } + + return value; +} + +static int stbi__pnm_info(stbi__context* s, int* x, int* y, int* comp) +{ + int maxv, dummy; + char c, p, t; + + if (!x) + x = &dummy; + if (!y) + y = &dummy; + if (!comp) + comp = &dummy; + + stbi__rewind(s); + + // Get identifier + p = (char)stbi__get8(s); + t = (char)stbi__get8(s); + if (p != 'P' || (t != '5' && t != '6')) { + stbi__rewind(s); + return 0; + } + + *comp = + (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm + + c = (char)stbi__get8(s); + stbi__pnm_skip_whitespace(s, &c); + + *x = stbi__pnm_getinteger(s, &c); // read width + stbi__pnm_skip_whitespace(s, &c); + + *y = stbi__pnm_getinteger(s, &c); // read height + stbi__pnm_skip_whitespace(s, &c); + + maxv = stbi__pnm_getinteger(s, &c); // read max value + + if (maxv > 255) + return stbi__err("max value > 255", "PPM image not 8-bit"); + else + return 1; +} +#endif + +static int stbi__info_main(stbi__context* s, int* x, int* y, int* comp) +{ +#ifndef STBI_NO_JPEG + if (stbi__jpeg_info(s, x, y, comp)) + return 1; +#endif + +#ifndef STBI_NO_PNG + if (stbi__png_info(s, x, y, comp)) + return 1; +#endif + +#ifndef STBI_NO_GIF + if (stbi__gif_info(s, x, y, comp)) + return 1; +#endif + +#ifndef STBI_NO_BMP + if (stbi__bmp_info(s, x, y, comp)) + return 1; +#endif + +#ifndef STBI_NO_PSD + if (stbi__psd_info(s, x, y, comp)) + return 1; +#endif + +#ifndef STBI_NO_PIC + if (stbi__pic_info(s, x, y, comp)) + return 1; +#endif + +#ifndef STBI_NO_PNM + if (stbi__pnm_info(s, x, y, comp)) + return 1; +#endif + +#ifndef STBI_NO_HDR + if (stbi__hdr_info(s, x, y, comp)) + return 1; +#endif + +// test tga last because it's a crappy test! +#ifndef STBI_NO_TGA + if (stbi__tga_info(s, x, y, comp)) + return 1; +#endif + return stbi__err("unknown image type", + "Image not of any known type, or corrupt"); +} + +static int stbi__is_16_main(stbi__context* s) +{ +#ifndef STBI_NO_PNG + if (stbi__png_is16(s)) + return 1; +#endif + +#ifndef STBI_NO_PSD + if (stbi__psd_is16(s)) + return 1; +#endif + + return 0; +} + +#ifndef STBI_NO_STDIO +STBIDEF int stbi_info(char const* filename, int* x, int* y, int* comp) +{ + FILE* f = stbi__fopen(filename, "rb"); + int result; + if (!f) + return stbi__err("can't fopen", "Unable to open file"); + result = stbi_info_from_file(f, x, y, comp); + fclose(f); + return result; +} + +STBIDEF int stbi_info_from_file(FILE* f, int* x, int* y, int* comp) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__info_main(&s, x, y, comp); + fseek(f, pos, SEEK_SET); + return r; +} + +STBIDEF int stbi_is_16_bit(char const* filename) +{ + FILE* f = stbi__fopen(filename, "rb"); + int result; + if (!f) + return stbi__err("can't fopen", "Unable to open file"); + result = stbi_is_16_bit_from_file(f); + fclose(f); + return result; +} + +STBIDEF int stbi_is_16_bit_from_file(FILE* f) +{ + int r; + stbi__context s; + long pos = ftell(f); + stbi__start_file(&s, f); + r = stbi__is_16_main(&s); + fseek(f, pos, SEEK_SET); + return r; +} +#endif // !STBI_NO_STDIO + +STBIDEF int stbi_info_from_memory(stbi_uc const* buffer, int len, int* x, + int* y, int* comp) +{ + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__info_main(&s, x, y, comp); +} + +STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const* c, void* user, + int* x, int* y, int* comp) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)c, user); + return stbi__info_main(&s, x, y, comp); +} + +STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const* buffer, int len) +{ + stbi__context s; + stbi__start_mem(&s, buffer, len); + return stbi__is_16_main(&s); +} + +STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const* c, + void* user) +{ + stbi__context s; + stbi__start_callbacks(&s, (stbi_io_callbacks*)c, user); + return stbi__is_16_main(&s); +} + +#endif // STB_IMAGE_IMPLEMENTATION + +/* + revision history: + 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and + platform ifdefs 2.19 (2018-02-11) fix warning 2.18 (2018-01-30) fix + warnings 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug + 1-bit BMP + *_is_16_bit api + avoid warnings + 2.16 (2017-07-23) all functions have 16-bit variants; + STBI_NO_STDIO works again; + compilation fixes; + fix rounding in unpremultiply; + optimize vertical flip; + disable raw_len validation; + documentation fixes + 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; + warning fixes; disable run-time SSE detection on gcc; + uniform handling of optional "return" values; + thread-safe initialization of zlib tables + 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet + JPGs 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now 2.12 + (2016-04-02) fix typo in 2.11 PSD fix that caused crashes 2.11 (2016-04-02) + allocate large structures on the stack remove white matting for transparent + PSD fix reported channel count for PNG & BMP re-enable SSE2 in non-gcc 64-bit + support RGB-formatted JPEG + read 16-bit PNGs (only as 8-bit) + 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED + 2.09 (2016-01-16) allow comments in PNM files + 16-bit-per-pixel TGA (not bit-per-component) + info() for TGA could break due to .hdr handling + info() for BMP to shares code instead of sloppy parse + can use STBI_REALLOC_SIZED if allocator doesn't support + realloc code cleanup 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD + as RGBA 2.07 (2015-09-13) fix compiler warnings partial animated GIF support + limited 16-bpc PSD support + #ifdef unused functions + bug with < 92 byte PIC,PNM,HDR,TGA + 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value + 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning + 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit + 2.03 (2015-04-12) extra corruption checking (mmozeiko) + stbi_set_flip_vertically_on_load (nguillemot) + fix NEON support; fix mingw support + 2.02 (2015-01-19) fix incorrect assert, fix warning + 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit + without -msse2 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG 2.00 + (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) progressive + JPEG (stb) PGM/PPM support (Ken Miller) STBI_MALLOC,STBI_REALLOC,STBI_FREE + GIF bugfix -- seemingly never worked + STBI_NO_*, STBI_ONLY_* + 1.48 (2014-12-14) fix incorrectly-named assert() + 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar + Cornut & stb) optimize PNG (ryg) fix bug in interlaced PNG with + user-specified channel count (stb) 1.46 (2014-08-26) fix broken tRNS chunk + (colorkey-style transparency) in non-paletted PNG 1.45 (2014-08-16) fix + MSVC-ARM internal compiler error by wrapping malloc 1.44 (2014-08-07) + various warning fixes from Ronny Chevalier + 1.43 (2014-07-15) + fix MSVC-only compiler problem in code changed in 1.42 + 1.42 (2014-07-09) + don't define _CRT_SECURE_NO_WARNINGS (affects user code) + fixes to stbi__cleanup_jpeg path + added STBI_ASSERT to avoid requiring assert.h + 1.41 (2014-06-25) + fix search&replace from 1.36 that messed up comments/error + messages 1.40 (2014-06-22) fix gcc struct-initialization warning 1.39 + (2014-06-15) fix to TGA optimization when req_comp != number of components in + TGA; fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my + test suite) add support for BMP version 5 (more ignored fields) 1.38 + (2014-06-06) suppress MSVC warnings on integer casts truncating values fix + accidental rename of 'skip' field of I/O 1.37 (2014-06-04) remove duplicate + typedef 1.36 (2014-06-03) convert to header file single-file library if + de-iphone isn't set, load iphone images color-swapped instead of returning + NULL 1.35 (2014-05-27) various warnings fix broken STBI_SIMD path fix bug + where stbi_load_from_file no longer left file pointer in correct place fix + broken non-easy path for 32-bit BMP (possibly never used) TGA optimization by + Arseny Kapoulkine 1.34 (unknown) use STBI_NOTUSED in + stbi__resample_row_generic(), fix one more leak in tga failure case 1.33 + (2011-07-14) make stbi_is_hdr work in STBI_NO_HDR (as specified), minor + compiler-friendly improvements 1.32 (2011-07-13) support for "info" function + for all supported filetypes (SpartanJ) 1.31 (2011-06-20) a few more leak + fixes, bug in PNG handling (SpartanJ) 1.30 (2011-06-11) added ability to + load files via callbacks to accomidate custom input streams (Ben Wenger) + removed deprecated format-specific test/load functions + removed support for installable file formats (stbi_loader) -- + would have been broken for IO callbacks anyway error cases in bmp and tga + give messages and don't leak (Raymond Barbiero, grisha) fix inefficiency in + decoding 32-bit BMP (David Woo) 1.29 (2010-08-16) various warning fixes from + Aurelien Pocheville 1.28 (2010-08-01) fix bug in GIF palette transparency + (SpartanJ) 1.27 (2010-08-01) cast-to-stbi_uc to fix warnings 1.26 + (2010-07-24) fix bug in file buffering for PNG reported by SpartanJ 1.25 + (2010-07-17) refix trans_data warning (Won Chun) 1.24 (2010-07-12) perf + improvements reading from files on platforms with lock-heavy fgetc() minor + perf improvements for jpeg deprecated type-specific functions so we'll get + feedback if they're needed attempt to fix trans_data warning (Won Chun) 1.23 + fixed bug in iPhone support 1.22 (2010-07-10) removed image *writing* + support stbi_info support from Jetro Lauha GIF support from Jean-Marc Lienher + iPhone PNG-extensions from James Brown + warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. + Janez (U+017D)emva) 1.21 fix use of 'stbi_uc' in header (reported by jon + blow) 1.20 added support for Softimage PIC, by Tom Seddon 1.19 bug in + interlaced PNG corruption check (found by ryg) 1.18 (2008-08-02) fix a + threading bug (local mutable static) 1.17 support interlaced PNG 1.16 + major bugfix - stbi__convert_format converted one too many pixels 1.15 + initialize some fields for thread safety 1.14 fix threadsafe conversion + bug header-file-only version (#define STBI_HEADER_FILE_ONLY before including) + 1.13 threadsafe + 1.12 const qualifiers in the API + 1.11 Support installable IDCT, colorspace conversion routines + 1.10 Fixes for 64-bit (don't use "unsigned long") + optimized upsampling by Fabian "ryg" Giesen + 1.09 Fix format-conversion for PSD code (bad global variables!) + 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz + 1.07 attempt to fix C++ warning/errors again + 1.06 attempt to fix C++ warning/errors again + 1.05 fix TGA loading to return correct *comp and use good luminance + calc 1.04 default float alpha is 1, not 255; use 'void *' for + stbi_image_free 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR 1.02 support + for (subset of) HDR files, float interface for preferred access to them 1.01 + fix bug: possible bug in handling right-side up bmps... not sure fix bug: the + stbi__bmp_load() and stbi__tga_load() functions didn't work at all 1.00 + interface to zlib that skips zlib header 0.99 correct handling of alpha in + palette 0.98 TGA loader by lonesock; dynamically add loaders (untested) + 0.97 jpeg errors on too large a file; also catch another malloc failure + 0.96 fix detection of invalid v value - particleman@mollyrocket forum + 0.95 during header scan, seek to markers in case of padding + 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same + 0.93 handle jpegtran output; verbose errors + 0.92 read 4,8,16,24,32-bit BMP files of several formats + 0.91 output 24-bit Windows 3.0 BMP files + 0.90 fix a few more warnings; bump version number to approach 1.0 + 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd + 0.60 fix compiling as c++ + 0.59 fix warnings: merge Dave Moore's -Wall fixes + 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian + 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but + less than 16 available 0.56 fix bug: zlib uncompressed mode len vs. nlen + 0.55 fix bug: restart_interval not initialized to 0 + 0.54 allow NULL for 'int *comp' + 0.53 fix bug in png 3->4; speedup png decoding + 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments + 0.51 obey req_comp requests, 1-component jpegs return as 1-component, + on 'test' only check type, not whether we support this variant + 0.50 (2006-11-19) + first released version +*/ + +/* +------------------------------------------------------------------------------ +This software is available under 2 licenses -- choose whichever you prefer. +------------------------------------------------------------------------------ +ALTERNATIVE A - MIT License +Copyright (c) 2017 Sean Barrett +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +------------------------------------------------------------------------------ +ALTERNATIVE B - Public Domain (www.unlicense.org) +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +------------------------------------------------------------------------------ +*/ \ No newline at end of file diff --git a/src/viewer3d/gltf/tiny_gltf.h b/src/viewer3d/gltf/tiny_gltf.h new file mode 100644 index 00000000..252ef782 --- /dev/null +++ b/src/viewer3d/gltf/tiny_gltf.h @@ -0,0 +1,8381 @@ +// +// Header-only tiny glTF 2.0 loader and serializer. +// +// +// The MIT License (MIT) +// +// Copyright (c) 2015 - Present Syoyo Fujita, Aurélien Chatelain and many +// contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +// Version: +// - v2.6.3 Fix GLB file with empty BIN chunk was not handled. PR#382 and +// PR#383. +// - v2.6.2 Fix out-of-bounds access of accessors. PR#379. +// - v2.6.1 Better GLB validation check when loading. +// - v2.6.0 Support serializing sparse accessor(Thanks to @fynv). +// Disable expanding file path for security(no use of awkward +// `wordexp` anymore). +// - v2.5.0 Add SetPreserveImageChannels() option to load image data as is. +// - v2.4.3 Fix null object output when material has all default +// parameters. +// - v2.4.2 Decode percent-encoded URI. +// - v2.4.1 Fix some glTF object class does not have `extensions` and/or +// `extras` property. +// - v2.4.0 Experimental RapidJSON and C++14 support(Thanks to @jrkoone). +// - v2.3.1 Set default value of minFilter and magFilter in Sampler to -1. +// - v2.3.0 Modified Material representation according to glTF 2.0 schema +// (and introduced TextureInfo class) +// Change the behavior of `Value::IsNumber`. It return true either the +// value is int or real. +// - v2.2.0 Add loading 16bit PNG support. Add Sparse accessor support(Thanks +// to @Ybalrid) +// - v2.1.0 Add draco compression. +// - v2.0.1 Add comparison feature(Thanks to @Selmar). +// - v2.0.0 glTF 2.0!. +// +// Tiny glTF loader is using following third party libraries: +// +// - jsonhpp: C++ JSON library. +// - base64: base64 decode/encode library. +// - stb_image: Image loading library. +// +#ifndef TINY_GLTF_H_ +#define TINY_GLTF_H_ + +#include +#include +#include // std::fabs +#include +#include +#include +#include +#include +#include +#include + +// Auto-detect C++14 standard version +#if !defined(TINYGLTF_USE_CPP14) && defined(__cplusplus) && \ + (__cplusplus >= 201402L) +#define TINYGLTF_USE_CPP14 +#endif + +#ifndef TINYGLTF_USE_CPP14 +#include +#endif + +#ifdef __ANDROID__ +#ifdef TINYGLTF_ANDROID_LOAD_FROM_ASSETS +#include +#endif +#endif + +#ifdef __GNUC__ +#if (__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ <= 8)) +#define TINYGLTF_NOEXCEPT +#else +#define TINYGLTF_NOEXCEPT noexcept +#endif +#else +#define TINYGLTF_NOEXCEPT noexcept +#endif + +#define DEFAULT_METHODS(x) \ + ~x() = default; \ + x(const x&) = default; \ + x(x&&) TINYGLTF_NOEXCEPT = default; \ + x& operator=(const x&) = default; \ + x& operator=(x&&) TINYGLTF_NOEXCEPT = default; + +namespace tinygltf { + +#define TINYGLTF_MODE_POINTS (0) +#define TINYGLTF_MODE_LINE (1) +#define TINYGLTF_MODE_LINE_LOOP (2) +#define TINYGLTF_MODE_LINE_STRIP (3) +#define TINYGLTF_MODE_TRIANGLES (4) +#define TINYGLTF_MODE_TRIANGLE_STRIP (5) +#define TINYGLTF_MODE_TRIANGLE_FAN (6) + +#define TINYGLTF_COMPONENT_TYPE_BYTE (5120) +#define TINYGLTF_COMPONENT_TYPE_UNSIGNED_BYTE (5121) +#define TINYGLTF_COMPONENT_TYPE_SHORT (5122) +#define TINYGLTF_COMPONENT_TYPE_UNSIGNED_SHORT (5123) +#define TINYGLTF_COMPONENT_TYPE_INT (5124) +#define TINYGLTF_COMPONENT_TYPE_UNSIGNED_INT (5125) +#define TINYGLTF_COMPONENT_TYPE_FLOAT (5126) +#define TINYGLTF_COMPONENT_TYPE_DOUBLE \ + (5130) // OpenGL double type. Note that some of glTF 2.0 validator does not + // support double type even the schema seems allow any value of + // integer: + // https://github.com/KhronosGroup/glTF/blob/b9884a2fd45130b4d673dd6c8a706ee21ee5c5f7/specification/2.0/schema/accessor.schema.json#L22 + +#define TINYGLTF_TEXTURE_FILTER_NEAREST (9728) +#define TINYGLTF_TEXTURE_FILTER_LINEAR (9729) +#define TINYGLTF_TEXTURE_FILTER_NEAREST_MIPMAP_NEAREST (9984) +#define TINYGLTF_TEXTURE_FILTER_LINEAR_MIPMAP_NEAREST (9985) +#define TINYGLTF_TEXTURE_FILTER_NEAREST_MIPMAP_LINEAR (9986) +#define TINYGLTF_TEXTURE_FILTER_LINEAR_MIPMAP_LINEAR (9987) + +#define TINYGLTF_TEXTURE_WRAP_REPEAT (10497) +#define TINYGLTF_TEXTURE_WRAP_CLAMP_TO_EDGE (33071) +#define TINYGLTF_TEXTURE_WRAP_MIRRORED_REPEAT (33648) + +// Redeclarations of the above for technique.parameters. +#define TINYGLTF_PARAMETER_TYPE_BYTE (5120) +#define TINYGLTF_PARAMETER_TYPE_UNSIGNED_BYTE (5121) +#define TINYGLTF_PARAMETER_TYPE_SHORT (5122) +#define TINYGLTF_PARAMETER_TYPE_UNSIGNED_SHORT (5123) +#define TINYGLTF_PARAMETER_TYPE_INT (5124) +#define TINYGLTF_PARAMETER_TYPE_UNSIGNED_INT (5125) +#define TINYGLTF_PARAMETER_TYPE_FLOAT (5126) + +#define TINYGLTF_PARAMETER_TYPE_FLOAT_VEC2 (35664) +#define TINYGLTF_PARAMETER_TYPE_FLOAT_VEC3 (35665) +#define TINYGLTF_PARAMETER_TYPE_FLOAT_VEC4 (35666) + +#define TINYGLTF_PARAMETER_TYPE_INT_VEC2 (35667) +#define TINYGLTF_PARAMETER_TYPE_INT_VEC3 (35668) +#define TINYGLTF_PARAMETER_TYPE_INT_VEC4 (35669) + +#define TINYGLTF_PARAMETER_TYPE_BOOL (35670) +#define TINYGLTF_PARAMETER_TYPE_BOOL_VEC2 (35671) +#define TINYGLTF_PARAMETER_TYPE_BOOL_VEC3 (35672) +#define TINYGLTF_PARAMETER_TYPE_BOOL_VEC4 (35673) + +#define TINYGLTF_PARAMETER_TYPE_FLOAT_MAT2 (35674) +#define TINYGLTF_PARAMETER_TYPE_FLOAT_MAT3 (35675) +#define TINYGLTF_PARAMETER_TYPE_FLOAT_MAT4 (35676) + +#define TINYGLTF_PARAMETER_TYPE_SAMPLER_2D (35678) + +// End parameter types + +#define TINYGLTF_TYPE_VEC2 (2) +#define TINYGLTF_TYPE_VEC3 (3) +#define TINYGLTF_TYPE_VEC4 (4) +#define TINYGLTF_TYPE_MAT2 (32 + 2) +#define TINYGLTF_TYPE_MAT3 (32 + 3) +#define TINYGLTF_TYPE_MAT4 (32 + 4) +#define TINYGLTF_TYPE_SCALAR (64 + 1) +#define TINYGLTF_TYPE_VECTOR (64 + 4) +#define TINYGLTF_TYPE_MATRIX (64 + 16) + +#define TINYGLTF_IMAGE_FORMAT_JPEG (0) +#define TINYGLTF_IMAGE_FORMAT_PNG (1) +#define TINYGLTF_IMAGE_FORMAT_BMP (2) +#define TINYGLTF_IMAGE_FORMAT_GIF (3) + +#define TINYGLTF_TEXTURE_FORMAT_ALPHA (6406) +#define TINYGLTF_TEXTURE_FORMAT_RGB (6407) +#define TINYGLTF_TEXTURE_FORMAT_RGBA (6408) +#define TINYGLTF_TEXTURE_FORMAT_LUMINANCE (6409) +#define TINYGLTF_TEXTURE_FORMAT_LUMINANCE_ALPHA (6410) + +#define TINYGLTF_TEXTURE_TARGET_TEXTURE2D (3553) +#define TINYGLTF_TEXTURE_TYPE_UNSIGNED_BYTE (5121) + +#define TINYGLTF_TARGET_ARRAY_BUFFER (34962) +#define TINYGLTF_TARGET_ELEMENT_ARRAY_BUFFER (34963) + +#define TINYGLTF_SHADER_TYPE_VERTEX_SHADER (35633) +#define TINYGLTF_SHADER_TYPE_FRAGMENT_SHADER (35632) + +#define TINYGLTF_DOUBLE_EPS (1.e-12) +#define TINYGLTF_DOUBLE_EQUAL(a, b) (std::fabs((b) - (a)) < TINYGLTF_DOUBLE_EPS) + +#ifdef __ANDROID__ +#ifdef TINYGLTF_ANDROID_LOAD_FROM_ASSETS +#ifdef TINYGLTF_IMPLEMENTATION +AAssetManager* asset_manager = nullptr; +#else +extern AAssetManager* asset_manager; +#endif +#endif +#endif + +typedef enum { + NULL_TYPE, + REAL_TYPE, + INT_TYPE, + BOOL_TYPE, + STRING_TYPE, + ARRAY_TYPE, + BINARY_TYPE, + OBJECT_TYPE +} Type; + +static inline int32_t GetComponentSizeInBytes(uint32_t componentType) +{ + if (componentType == TINYGLTF_COMPONENT_TYPE_BYTE) { + return 1; + } + else if (componentType == TINYGLTF_COMPONENT_TYPE_UNSIGNED_BYTE) { + return 1; + } + else if (componentType == TINYGLTF_COMPONENT_TYPE_SHORT) { + return 2; + } + else if (componentType == TINYGLTF_COMPONENT_TYPE_UNSIGNED_SHORT) { + return 2; + } + else if (componentType == TINYGLTF_COMPONENT_TYPE_INT) { + return 4; + } + else if (componentType == TINYGLTF_COMPONENT_TYPE_UNSIGNED_INT) { + return 4; + } + else if (componentType == TINYGLTF_COMPONENT_TYPE_FLOAT) { + return 4; + } + else if (componentType == TINYGLTF_COMPONENT_TYPE_DOUBLE) { + return 8; + } + else { + // Unknown component type + return -1; + } +} + +static inline int32_t GetNumComponentsInType(uint32_t ty) +{ + if (ty == TINYGLTF_TYPE_SCALAR) { + return 1; + } + else if (ty == TINYGLTF_TYPE_VEC2) { + return 2; + } + else if (ty == TINYGLTF_TYPE_VEC3) { + return 3; + } + else if (ty == TINYGLTF_TYPE_VEC4) { + return 4; + } + else if (ty == TINYGLTF_TYPE_MAT2) { + return 4; + } + else if (ty == TINYGLTF_TYPE_MAT3) { + return 9; + } + else if (ty == TINYGLTF_TYPE_MAT4) { + return 16; + } + else { + // Unknown component type + return -1; + } +} + +// TODO(syoyo): Move these functions to TinyGLTF class +bool IsDataURI(const std::string& in); +bool DecodeDataURI(std::vector* out, std::string& mime_type, + const std::string& in, size_t reqBytes, bool checkSize); + +#ifdef __clang__ +#pragma clang diagnostic push +// Suppress warning for : static Value null_value +#pragma clang diagnostic ignored "-Wexit-time-destructors" +#pragma clang diagnostic ignored "-Wpadded" +#endif + +// Simple class to represent JSON object +class Value { +public: + typedef std::vector Array; + typedef std::map Object; + + Value() + : type_(NULL_TYPE), int_value_(0), real_value_(0.0), + boolean_value_(false) + { + } + + explicit Value(bool b) : type_(BOOL_TYPE) { boolean_value_ = b; } + explicit Value(int i) : type_(INT_TYPE) + { + int_value_ = i; + real_value_ = i; + } + explicit Value(double n) : type_(REAL_TYPE) { real_value_ = n; } + explicit Value(const std::string& s) : type_(STRING_TYPE) + { + string_value_ = s; + } + explicit Value(std::string&& s) + : type_(STRING_TYPE), string_value_(std::move(s)) + { + } + explicit Value(const unsigned char* p, size_t n) : type_(BINARY_TYPE) + { + binary_value_.resize(n); + memcpy(binary_value_.data(), p, n); + } + explicit Value(std::vector&& v) noexcept + : type_(BINARY_TYPE), binary_value_(std::move(v)) + { + } + explicit Value(const Array& a) : type_(ARRAY_TYPE) { array_value_ = a; } + explicit Value(Array&& a) noexcept + : type_(ARRAY_TYPE), array_value_(std::move(a)) + { + } + + explicit Value(const Object& o) : type_(OBJECT_TYPE) { object_value_ = o; } + explicit Value(Object&& o) noexcept + : type_(OBJECT_TYPE), object_value_(std::move(o)) + { + } + + DEFAULT_METHODS(Value) + + char Type() const { return static_cast(type_); } + + bool IsBool() const { return (type_ == BOOL_TYPE); } + + bool IsInt() const { return (type_ == INT_TYPE); } + + bool IsNumber() const + { + return (type_ == REAL_TYPE) || (type_ == INT_TYPE); + } + + bool IsReal() const { return (type_ == REAL_TYPE); } + + bool IsString() const { return (type_ == STRING_TYPE); } + + bool IsBinary() const { return (type_ == BINARY_TYPE); } + + bool IsArray() const { return (type_ == ARRAY_TYPE); } + + bool IsObject() const { return (type_ == OBJECT_TYPE); } + + // Use this function if you want to have number value as double. + double GetNumberAsDouble() const + { + if (type_ == INT_TYPE) { + return double(int_value_); + } + else { + return real_value_; + } + } + + // Use this function if you want to have number value as int. + // TODO(syoyo): Support int value larger than 32 bits + int GetNumberAsInt() const + { + if (type_ == REAL_TYPE) { + return int(real_value_); + } + else { + return int_value_; + } + } + + // Accessor + template const T& Get() const; + template T& Get(); + + // Lookup value from an array + const Value& Get(int idx) const + { + static Value null_value; + assert(IsArray()); + assert(idx >= 0); + return (static_cast(idx) < array_value_.size()) + ? array_value_[static_cast(idx)] + : null_value; + } + + // Lookup value from a key-value pair + const Value& Get(const std::string& key) const + { + static Value null_value; + assert(IsObject()); + Object::const_iterator it = object_value_.find(key); + return (it != object_value_.end()) ? it->second : null_value; + } + + size_t ArrayLen() const + { + if (!IsArray()) + return 0; + return array_value_.size(); + } + + // Valid only for object type. + bool Has(const std::string& key) const + { + if (!IsObject()) + return false; + Object::const_iterator it = object_value_.find(key); + return (it != object_value_.end()) ? true : false; + } + + // List keys + std::vector Keys() const + { + std::vector keys; + if (!IsObject()) + return keys; // empty + + for (Object::const_iterator it = object_value_.begin(); + it != object_value_.end(); ++it) { + keys.push_back(it->first); + } + + return keys; + } + + size_t Size() const { return (IsArray() ? ArrayLen() : Keys().size()); } + + bool operator==(const tinygltf::Value& other) const; + +protected: + int type_ = NULL_TYPE; + + int int_value_ = 0; + double real_value_ = 0.0; + std::string string_value_; + std::vector binary_value_; + Array array_value_; + Object object_value_; + bool boolean_value_ = false; +}; + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#define TINYGLTF_VALUE_GET(ctype, var) \ + template <> inline const ctype& Value::Get() const { return var; } \ + template <> inline ctype& Value::Get() { return var; } +TINYGLTF_VALUE_GET(bool, boolean_value_) +TINYGLTF_VALUE_GET(double, real_value_) +TINYGLTF_VALUE_GET(int, int_value_) +TINYGLTF_VALUE_GET(std::string, string_value_) +TINYGLTF_VALUE_GET(std::vector, binary_value_) +TINYGLTF_VALUE_GET(Value::Array, array_value_) +TINYGLTF_VALUE_GET(Value::Object, object_value_) +#undef TINYGLTF_VALUE_GET + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat" +#pragma clang diagnostic ignored "-Wpadded" +#endif + +/// Aggregate object for representing a color +using ColorValue = std::array; + +// === legacy interface ==== +// TODO(syoyo): Deprecate `Parameter` class. +struct Parameter { + bool bool_value = false; + bool has_number_value = false; + std::string string_value; + std::vector number_array; + std::map json_double_value; + double number_value = 0.0; + + // context sensitive methods. depending the type of the Parameter you are + // accessing, these are either valid or not + // If this parameter represent a texture map in a material, will return the + // texture index + + /// Return the index of a texture if this Parameter is a texture map. + /// Returned value is only valid if the parameter represent a texture from a + /// material + int TextureIndex() const + { + const auto it = json_double_value.find("index"); + if (it != std::end(json_double_value)) { + return int(it->second); + } + return -1; + } + + /// Return the index of a texture coordinate set if this Parameter is a + /// texture map. Returned value is only valid if the parameter represent a + /// texture from a material + int TextureTexCoord() const + { + const auto it = json_double_value.find("texCoord"); + if (it != std::end(json_double_value)) { + return int(it->second); + } + // As per the spec, if texCoord is omitted, this parameter is 0 + return 0; + } + + /// Return the scale of a texture if this Parameter is a normal texture map. + /// Returned value is only valid if the parameter represent a normal texture + /// from a material + double TextureScale() const + { + const auto it = json_double_value.find("scale"); + if (it != std::end(json_double_value)) { + return it->second; + } + // As per the spec, if scale is omitted, this parameter is 1 + return 1; + } + + /// Return the strength of a texture if this Parameter is a an occlusion + /// map. Returned value is only valid if the parameter represent an + /// occlusion map from a material + double TextureStrength() const + { + const auto it = json_double_value.find("strength"); + if (it != std::end(json_double_value)) { + return it->second; + } + // As per the spec, if strength is omitted, this parameter is 1 + return 1; + } + + /// Material factor, like the roughness or metalness of a material + /// Returned value is only valid if the parameter represent a texture from a + /// material + double Factor() const { return number_value; } + + /// Return the color of a material + /// Returned value is only valid if the parameter represent a texture from a + /// material + ColorValue ColorFactor() const + { + return {{// this aggregate initialize the std::array object, and uses + // C++11 RVO. + number_array[0], number_array[1], number_array[2], + (number_array.size() > 3 ? number_array[3] : 1.0)}}; + } + + Parameter() = default; + DEFAULT_METHODS(Parameter) + bool operator==(const Parameter&) const; +}; + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +typedef std::map ParameterMap; +typedef std::map ExtensionMap; + +struct AnimationChannel { + int sampler; // required + int target_node; // required (index of the node to target) + std::string target_path; // required in ["translation", "rotation", "scale", + // "weights"] + Value extras; + ExtensionMap extensions; + ExtensionMap target_extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + std::string target_extensions_json_string; + + AnimationChannel() : sampler(-1), target_node(-1) {} + DEFAULT_METHODS(AnimationChannel) + bool operator==(const AnimationChannel&) const; +}; + +struct AnimationSampler { + int input; // required + int output; // required + std::string interpolation; // "LINEAR", "STEP","CUBICSPLINE" or user defined + // string. default "LINEAR" + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + AnimationSampler() : input(-1), output(-1), interpolation("LINEAR") {} + DEFAULT_METHODS(AnimationSampler) + bool operator==(const AnimationSampler&) const; +}; + +struct Animation { + std::string name; + std::vector channels; + std::vector samplers; + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + Animation() = default; + DEFAULT_METHODS(Animation) + bool operator==(const Animation&) const; +}; + +struct Skin { + std::string name; + int inverseBindMatrices; // required here but not in the spec + int skeleton; // The index of the node used as a skeleton root + std::vector joints; // Indices of skeleton nodes + + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + Skin() + { + inverseBindMatrices = -1; + skeleton = -1; + } + DEFAULT_METHODS(Skin) + bool operator==(const Skin&) const; +}; + +struct Sampler { + std::string name; + // glTF 2.0 spec does not define default value for `minFilter` and + // `magFilter`. Set -1 in TinyGLTF(issue #186) + int minFilter = + -1; // optional. -1 = no filter defined. ["NEAREST", "LINEAR", + // "NEAREST_MIPMAP_NEAREST", "LINEAR_MIPMAP_NEAREST", + // "NEAREST_MIPMAP_LINEAR", "LINEAR_MIPMAP_LINEAR"] + int magFilter = + -1; // optional. -1 = no filter defined. ["NEAREST", "LINEAR"] + int wrapS = + TINYGLTF_TEXTURE_WRAP_REPEAT; // ["CLAMP_TO_EDGE", "MIRRORED_REPEAT", + // "REPEAT"], default "REPEAT" + int wrapT = + TINYGLTF_TEXTURE_WRAP_REPEAT; // ["CLAMP_TO_EDGE", "MIRRORED_REPEAT", + // "REPEAT"], default "REPEAT" + // int wrapR = TINYGLTF_TEXTURE_WRAP_REPEAT; // TinyGLTF extension. + // currently not used. + + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + Sampler() + : minFilter(-1), magFilter(-1), wrapS(TINYGLTF_TEXTURE_WRAP_REPEAT), + wrapT(TINYGLTF_TEXTURE_WRAP_REPEAT) + { + } + DEFAULT_METHODS(Sampler) + bool operator==(const Sampler&) const; +}; + +struct Image { + std::string name; + int width; + int height; + int component; + int bits; // bit depth per channel. 8(byte), 16 or 32. + int pixel_type; // pixel type(TINYGLTF_COMPONENT_TYPE_***). usually + // UBYTE(bits = 8) or USHORT(bits = 16) + std::vector image; + int bufferView; // (required if no uri) + std::string mimeType; // (required if no uri) ["image/jpeg", "image/png", + // "image/bmp", "image/gif"] + std::string uri; // (required if no mimeType) uri is not decoded(e.g. + // whitespace may be represented as %20) + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + // When this flag is true, data is stored to `image` in as-is format(e.g. + // jpeg compressed for "image/jpeg" mime) This feature is good if you use + // custom image loader function. (e.g. delayed decoding of images for faster + // glTF parsing) Default parser for Image does not provide as-is loading + // feature at the moment. (You can manipulate this by providing your own + // LoadImageData function) + bool as_is; + + Image() : as_is(false) + { + bufferView = -1; + width = -1; + height = -1; + component = -1; + bits = -1; + pixel_type = -1; + } + DEFAULT_METHODS(Image) + + bool operator==(const Image&) const; +}; + +struct Texture { + std::string name; + + int sampler; + int source; + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + Texture() : sampler(-1), source(-1) {} + DEFAULT_METHODS(Texture) + + bool operator==(const Texture&) const; +}; + +struct TextureInfo { + int index = -1; // required. + int texCoord; // The set index of texture's TEXCOORD attribute used for + // texture coordinate mapping. + + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + TextureInfo() : index(-1), texCoord(0) {} + DEFAULT_METHODS(TextureInfo) + bool operator==(const TextureInfo&) const; +}; + +struct NormalTextureInfo { + int index = -1; // required + int texCoord; // The set index of texture's TEXCOORD attribute used for + // texture coordinate mapping. + double scale; // scaledNormal = normalize(( + // * 2.0 - 1.0) * vec3(, , 1.0)) + + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + NormalTextureInfo() : index(-1), texCoord(0), scale(1.0) {} + DEFAULT_METHODS(NormalTextureInfo) + bool operator==(const NormalTextureInfo&) const; +}; + +struct OcclusionTextureInfo { + int index = -1; // required + int texCoord; // The set index of texture's TEXCOORD attribute used for + // texture coordinate mapping. + double strength; // occludedColor = lerp(color, color * , ) + + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + OcclusionTextureInfo() : index(-1), texCoord(0), strength(1.0) {} + DEFAULT_METHODS(OcclusionTextureInfo) + bool operator==(const OcclusionTextureInfo&) const; +}; + +// pbrMetallicRoughness class defined in glTF 2.0 spec. +struct PbrMetallicRoughness { + std::vector baseColorFactor; // len = 4. default [1,1,1,1] + TextureInfo baseColorTexture; + double metallicFactor; // default 1 + double roughnessFactor; // default 1 + TextureInfo metallicRoughnessTexture; + + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + PbrMetallicRoughness() + : baseColorFactor(std::vector{1.0, 1.0, 1.0, 1.0}), + metallicFactor(1.0), roughnessFactor(1.0) + { + } + DEFAULT_METHODS(PbrMetallicRoughness) + bool operator==(const PbrMetallicRoughness&) const; +}; + +// Each extension should be stored in a ParameterMap. +// members not in the values could be included in the ParameterMap +// to keep a single material model +struct Material { + std::string name; + + std::vector emissiveFactor; // length 3. default [0, 0, 0] + std::string alphaMode; // default "OPAQUE" + double alphaCutoff; // default 0.5 + bool doubleSided; // default false; + + PbrMetallicRoughness pbrMetallicRoughness; + + NormalTextureInfo normalTexture; + OcclusionTextureInfo occlusionTexture; + TextureInfo emissiveTexture; + + // For backward compatibility + // TODO(syoyo): Remove `values` and `additionalValues` in the next release. + ParameterMap values; + ParameterMap additionalValues; + + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + Material() : alphaMode("OPAQUE"), alphaCutoff(0.5), doubleSided(false) {} + DEFAULT_METHODS(Material) + + bool operator==(const Material&) const; +}; + +struct BufferView { + std::string name; + int buffer{-1}; // Required + size_t byteOffset{0}; // minimum 0, default 0 + size_t byteLength{0}; // required, minimum 1. 0 = invalid + size_t byteStride{0}; // minimum 4, maximum 252 (multiple of 4), default 0 = + // understood to be tightly packed + int target{0}; // ["ARRAY_BUFFER", "ELEMENT_ARRAY_BUFFER"] for vertex + // indices or attribs. Could be 0 for other data + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + bool dracoDecoded{false}; // Flag indicating this has been draco decoded + + BufferView() + : buffer(-1), byteOffset(0), byteLength(0), byteStride(0), target(0), + dracoDecoded(false) + { + } + DEFAULT_METHODS(BufferView) + bool operator==(const BufferView&) const; +}; + +struct Accessor { + int bufferView; // optional in spec but required here since sparse accessor + // are not supported + std::string name; + size_t byteOffset; + bool normalized; // optional. + int componentType; // (required) One of TINYGLTF_COMPONENT_TYPE_*** + size_t count; // required + int type; // (required) One of TINYGLTF_TYPE_*** .. + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + std::vector + minValues; // optional. integer value is promoted to double + std::vector + maxValues; // optional. integer value is promoted to double + + struct { + int count; + bool isSparse; + struct { + int byteOffset; + int bufferView; + int componentType; // a TINYGLTF_COMPONENT_TYPE_ value + } indices; + struct { + int bufferView; + int byteOffset; + } values; + } sparse; + + /// + /// Utility function to compute byteStride for a given bufferView object. + /// Returns -1 upon invalid glTF value or parameter configuration. + /// + int ByteStride(const BufferView& bufferViewObject) const + { + if (bufferViewObject.byteStride == 0) { + // Assume data is tightly packed. + int componentSizeInBytes = + GetComponentSizeInBytes(static_cast(componentType)); + if (componentSizeInBytes <= 0) { + return -1; + } + + int numComponents = + GetNumComponentsInType(static_cast(type)); + if (numComponents <= 0) { + return -1; + } + + return componentSizeInBytes * numComponents; + } + else { + // Check if byteStride is a multiple of the size of the accessor's + // component type. + int componentSizeInBytes = + GetComponentSizeInBytes(static_cast(componentType)); + if (componentSizeInBytes <= 0) { + return -1; + } + + if ((bufferViewObject.byteStride % + uint32_t(componentSizeInBytes)) != 0) { + return -1; + } + return static_cast(bufferViewObject.byteStride); + } + + // unreachable return 0; + } + + Accessor() + : bufferView(-1), byteOffset(0), normalized(false), componentType(-1), + count(0), type(-1) + { + sparse.isSparse = false; + } + DEFAULT_METHODS(Accessor) + bool operator==(const tinygltf::Accessor&) const; +}; + +struct PerspectiveCamera { + double aspectRatio; // min > 0 + double yfov; // required. min > 0 + double zfar; // min > 0 + double znear; // required. min > 0 + + PerspectiveCamera() + : aspectRatio(0.0), yfov(0.0), + zfar(0.0) // 0 = use infinite projection matrix + , + znear(0.0) + { + } + DEFAULT_METHODS(PerspectiveCamera) + bool operator==(const PerspectiveCamera&) const; + + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; +}; + +struct OrthographicCamera { + double xmag; // required. must not be zero. + double ymag; // required. must not be zero. + double zfar; // required. `zfar` must be greater than `znear`. + double znear; // required + + OrthographicCamera() : xmag(0.0), ymag(0.0), zfar(0.0), znear(0.0) {} + DEFAULT_METHODS(OrthographicCamera) + bool operator==(const OrthographicCamera&) const; + + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; +}; + +struct Camera { + std::string type; // required. "perspective" or "orthographic" + std::string name; + + PerspectiveCamera perspective; + OrthographicCamera orthographic; + + Camera() {} + DEFAULT_METHODS(Camera) + bool operator==(const Camera&) const; + + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; +}; + +struct Primitive { + std::map attributes; // (required) A dictionary object of + // integer, where each integer + // is the index of the accessor + // containing an attribute. + int material; // The index of the material to apply to this primitive + // when rendering. + int indices; // The index of the accessor that contains the indices. + int mode; // one of TINYGLTF_MODE_*** + std::vector> targets; // array of morph targets, + // where each target is a dict with attributes in ["POSITION, "NORMAL", + // "TANGENT"] pointing + // to their corresponding accessors + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + Primitive() + { + material = -1; + indices = -1; + mode = -1; + } + DEFAULT_METHODS(Primitive) + bool operator==(const Primitive&) const; +}; + +struct Mesh { + std::string name; + std::vector primitives; + std::vector weights; // weights to be applied to the Morph Targets + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + Mesh() = default; + DEFAULT_METHODS(Mesh) + bool operator==(const Mesh&) const; +}; + +class Node { +public: + Node() : camera(-1), skin(-1), mesh(-1) {} + + DEFAULT_METHODS(Node) + + bool operator==(const Node&) const; + + int camera; // the index of the camera referenced by this node + + std::string name; + int skin; + int mesh; + std::vector children; + std::vector rotation; // length must be 0 or 4 + std::vector scale; // length must be 0 or 3 + std::vector translation; // length must be 0 or 3 + std::vector matrix; // length must be 0 or 16 + std::vector weights; // The weights of the instantiated Morph Target + + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; +}; + +struct Buffer { + std::string name; + std::vector data; + std::string uri; // considered as required here but not in the spec (need to + // clarify) uri is not decoded(e.g. whitespace may be + // represented as %20) + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + Buffer() = default; + DEFAULT_METHODS(Buffer) + bool operator==(const Buffer&) const; +}; + +struct Asset { + std::string version = "2.0"; // required + std::string generator; + std::string minVersion; + std::string copyright; + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + Asset() = default; + DEFAULT_METHODS(Asset) + bool operator==(const Asset&) const; +}; + +struct Scene { + std::string name; + std::vector nodes; + + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; + + Scene() = default; + DEFAULT_METHODS(Scene) + bool operator==(const Scene&) const; +}; + +struct SpotLight { + double innerConeAngle; + double outerConeAngle; + + SpotLight() : innerConeAngle(0.0), outerConeAngle(0.7853981634) {} + DEFAULT_METHODS(SpotLight) + bool operator==(const SpotLight&) const; + + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; +}; + +struct Light { + std::string name; + std::vector color; + double intensity{1.0}; + std::string type; + double range{0.0}; // 0.0 = infinite + SpotLight spot; + + Light() : intensity(1.0), range(0.0) {} + DEFAULT_METHODS(Light) + + bool operator==(const Light&) const; + + ExtensionMap extensions; + Value extras; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; +}; + +class Model { +public: + Model() = default; + DEFAULT_METHODS(Model) + + bool operator==(const Model&) const; + + std::vector accessors; + std::vector animations; + std::vector buffers; + std::vector bufferViews; + std::vector materials; + std::vector meshes; + std::vector nodes; + std::vector textures; + std::vector images; + std::vector skins; + std::vector samplers; + std::vector cameras; + std::vector scenes; + std::vector lights; + + int defaultScene = -1; + std::vector extensionsUsed; + std::vector extensionsRequired; + + Asset asset; + + Value extras; + ExtensionMap extensions; + + // Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled. + std::string extras_json_string; + std::string extensions_json_string; +}; + +enum SectionCheck { + NO_REQUIRE = 0x00, + REQUIRE_VERSION = 0x01, + REQUIRE_SCENE = 0x02, + REQUIRE_SCENES = 0x04, + REQUIRE_NODES = 0x08, + REQUIRE_ACCESSORS = 0x10, + REQUIRE_BUFFERS = 0x20, + REQUIRE_BUFFER_VIEWS = 0x40, + REQUIRE_ALL = 0x7f +}; + +/// +/// LoadImageDataFunction type. Signature for custom image loading callbacks. +/// +typedef bool (*LoadImageDataFunction)(Image*, const int, std::string*, + std::string*, int, int, + const unsigned char*, int, + void* user_pointer); + +/// +/// WriteImageDataFunction type. Signature for custom image writing callbacks. +/// +typedef bool (*WriteImageDataFunction)(const std::string*, const std::string*, + Image*, bool, void*); + +#ifndef TINYGLTF_NO_STB_IMAGE +// Declaration of default image loader callback +bool LoadImageData(Image* image, const int image_idx, std::string* err, + std::string* warn, int req_width, int req_height, + const unsigned char* bytes, int size, void*); +#endif + +#ifndef TINYGLTF_NO_STB_IMAGE_WRITE +// Declaration of default image writer callback +bool WriteImageData(const std::string* basepath, const std::string* filename, + Image* image, bool embedImages, void*); +#endif + +/// +/// FilExistsFunction type. Signature for custom filesystem callbacks. +/// +typedef bool (*FileExistsFunction)(const std::string& abs_filename, void*); + +/// +/// ExpandFilePathFunction type. Signature for custom filesystem callbacks. +/// +typedef std::string (*ExpandFilePathFunction)(const std::string&, void*); + +/// +/// ReadWholeFileFunction type. Signature for custom filesystem callbacks. +/// +typedef bool (*ReadWholeFileFunction)(std::vector*, std::string*, + const std::string&, void*); + +/// +/// WriteWholeFileFunction type. Signature for custom filesystem callbacks. +/// +typedef bool (*WriteWholeFileFunction)(std::string*, const std::string&, + const std::vector&, + void*); + +/// +/// A structure containing all required filesystem callbacks and a pointer to +/// their user data. +/// +struct FsCallbacks { + FileExistsFunction FileExists; + ExpandFilePathFunction ExpandFilePath; + ReadWholeFileFunction ReadWholeFile; + WriteWholeFileFunction WriteWholeFile; + + void* user_data; // An argument that is passed to all fs callbacks +}; + +#ifndef TINYGLTF_NO_FS +// Declaration of default filesystem callbacks + +bool FileExists(const std::string& abs_filename, void*); + +/// +/// Expand file path(e.g. `~` to home directory on posix, `%APPDATA%` to +/// `C:\\Users\\tinygltf\\AppData`) +/// +/// @param[in] filepath File path string. Assume UTF-8 +/// @param[in] userdata User data. Set to `nullptr` if you don't need it. +/// +std::string ExpandFilePath(const std::string& filepath, void* userdata); + +bool ReadWholeFile(std::vector* out, std::string* err, + const std::string& filepath, void*); + +bool WriteWholeFile(std::string* err, const std::string& filepath, + const std::vector& contents, void*); +#endif + +/// +/// glTF Parser/Serializer context. +/// +class TinyGLTF { +public: +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat" +#endif + + TinyGLTF() : bin_data_(nullptr), bin_size_(0), is_binary_(false) {} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + + ~TinyGLTF() {} + + /// + /// Loads glTF ASCII asset from a file. + /// Set warning message to `warn` for example it fails to load asserts. + /// Returns false and set error string to `err` if there's an error. + /// + bool LoadASCIIFromFile(Model* model, std::string* err, std::string* warn, + const std::string& filename, + unsigned int check_sections = REQUIRE_VERSION); + + /// + /// Loads glTF ASCII asset from string(memory). + /// `length` = strlen(str); + /// `base_dir` is a search path of glTF asset(e.g. images). Path Must be an + /// expanded path (e.g. no tilde(`~`), no environment variables). Set + /// warning message to `warn` for example it fails to load asserts. Returns + /// false and set error string to `err` if there's an error. + /// + bool LoadASCIIFromString(Model* model, std::string* err, std::string* warn, + const char* str, const unsigned int length, + const std::string& base_dir, + unsigned int check_sections = REQUIRE_VERSION); + + /// + /// Loads glTF binary asset from a file. + /// Set warning message to `warn` for example it fails to load asserts. + /// Returns false and set error string to `err` if there's an error. + /// + bool LoadBinaryFromFile(Model* model, std::string* err, std::string* warn, + const std::string& filename, + unsigned int check_sections = REQUIRE_VERSION); + + /// + /// Loads glTF binary asset from memory. + /// `length` = strlen(str); + /// `base_dir` is a search path of glTF asset(e.g. images). Path Must be an + /// expanded path (e.g. no tilde(`~`), no environment variables). + /// Set warning message to `warn` for example it fails to load asserts. + /// Returns false and set error string to `err` if there's an error. + /// + bool LoadBinaryFromMemory(Model* model, std::string* err, std::string* warn, + const unsigned char* bytes, + const unsigned int length, + const std::string& base_dir = "", + unsigned int check_sections = REQUIRE_VERSION); + + /// + /// Write glTF to stream, buffers and images will be embedded + /// + bool WriteGltfSceneToStream(Model* model, std::ostream& stream, + bool prettyPrint, bool writeBinary); + + /// + /// Write glTF to file. + /// + bool WriteGltfSceneToFile(Model* model, const std::string& filename, + bool embedImages, bool embedBuffers, + bool prettyPrint, bool writeBinary); + + /// + /// Set callback to use for loading image data + /// + void SetImageLoader(LoadImageDataFunction LoadImageData, void* user_data); + + /// + /// Unset(remove) callback of loading image data + /// + void RemoveImageLoader(); + + /// + /// Set callback to use for writing image data + /// + void SetImageWriter(WriteImageDataFunction WriteImageData, void* user_data); + + /// + /// Set callbacks to use for filesystem (fs) access and their user data + /// + void SetFsCallbacks(FsCallbacks callbacks); + + /// + /// Set serializing default values(default = false). + /// When true, default values are force serialized to .glTF. + /// This may be helpful if you want to serialize a full description of glTF + /// data. + /// + /// TODO(LTE): Supply parsing option as function arguments to + /// `LoadASCIIFromFile()` and others, not by a class method + /// + void SetSerializeDefaultValues(const bool enabled) + { + serialize_default_values_ = enabled; + } + + bool GetSerializeDefaultValues() const { return serialize_default_values_; } + + /// + /// Store original JSON string for `extras` and `extensions`. + /// This feature will be useful when the user want to reconstruct custom + /// data structure from JSON string. + /// + void SetStoreOriginalJSONForExtrasAndExtensions(const bool enabled) + { + store_original_json_for_extras_and_extensions_ = enabled; + } + + bool GetStoreOriginalJSONForExtrasAndExtensions() const + { + return store_original_json_for_extras_and_extensions_; + } + + /// + /// Specify whether preserve image channels when loading images or not. + /// (Not effective when the user supplies their own LoadImageData callbacks) + /// + void SetPreserveImageChannels(bool onoff) + { + preserve_image_channels_ = onoff; + } + + bool GetPreserveImageChannels() const { return preserve_image_channels_; } + +private: + /// + /// Loads glTF asset from string(memory). + /// `length` = strlen(str); + /// Set warning message to `warn` for example it fails to load asserts + /// Returns false and set error string to `err` if there's an error. + /// + bool LoadFromString(Model* model, std::string* err, std::string* warn, + const char* str, const unsigned int length, + const std::string& base_dir, + unsigned int check_sections); + + const unsigned char* bin_data_ = nullptr; + size_t bin_size_ = 0; + bool is_binary_ = false; + + bool serialize_default_values_ = false; ///< Serialize default values? + + bool store_original_json_for_extras_and_extensions_ = false; + + bool preserve_image_channels_ = false; /// Default false(expand channels to + /// RGBA) for backward compatibility. + + // Warning & error messages + std::string warn_; + std::string err_; + + FsCallbacks fs = { +#ifndef TINYGLTF_NO_FS + &tinygltf::FileExists, &tinygltf::ExpandFilePath, + &tinygltf::ReadWholeFile, &tinygltf::WriteWholeFile, + + nullptr // Fs callback user data +#else + nullptr, nullptr, nullptr, nullptr, + + nullptr // Fs callback user data +#endif + }; + + LoadImageDataFunction LoadImageData = +#ifndef TINYGLTF_NO_STB_IMAGE + &tinygltf::LoadImageData; +#else + nullptr; +#endif + void* load_image_user_data_{nullptr}; + bool user_image_loader_{false}; + + WriteImageDataFunction WriteImageData = +#ifndef TINYGLTF_NO_STB_IMAGE_WRITE + &tinygltf::WriteImageData; +#else + nullptr; +#endif + void* write_image_user_data_{nullptr}; +}; + +#ifdef __clang__ +#pragma clang diagnostic pop // -Wpadded +#endif + +} // namespace tinygltf + +#endif // TINY_GLTF_H_ + +#if defined(TINYGLTF_IMPLEMENTATION) || defined(__INTELLISENSE__) +#include +//#include +#ifndef TINYGLTF_NO_FS +#include +#include +#endif +#include + +#ifdef __clang__ +// Disable some warnings for external files. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wfloat-equal" +#pragma clang diagnostic ignored "-Wexit-time-destructors" +#pragma clang diagnostic ignored "-Wconversion" +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wglobal-constructors" +#if __has_warning("-Wreserved-id-macro") +#pragma clang diagnostic ignored "-Wreserved-id-macro" +#endif +#pragma clang diagnostic ignored "-Wdisabled-macro-expansion" +#pragma clang diagnostic ignored "-Wpadded" +#pragma clang diagnostic ignored "-Wc++98-compat" +#pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#pragma clang diagnostic ignored "-Wswitch-enum" +#pragma clang diagnostic ignored "-Wimplicit-fallthrough" +#pragma clang diagnostic ignored "-Wweak-vtables" +#pragma clang diagnostic ignored "-Wcovered-switch-default" +#if __has_warning("-Wdouble-promotion") +#pragma clang diagnostic ignored "-Wdouble-promotion" +#endif +#if __has_warning("-Wcomma") +#pragma clang diagnostic ignored "-Wcomma" +#endif +#if __has_warning("-Wzero-as-null-pointer-constant") +#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" +#endif +#if __has_warning("-Wcast-qual") +#pragma clang diagnostic ignored "-Wcast-qual" +#endif +#if __has_warning("-Wmissing-variable-declarations") +#pragma clang diagnostic ignored "-Wmissing-variable-declarations" +#endif +#if __has_warning("-Wmissing-prototypes") +#pragma clang diagnostic ignored "-Wmissing-prototypes" +#endif +#if __has_warning("-Wcast-align") +#pragma clang diagnostic ignored "-Wcast-align" +#endif +#if __has_warning("-Wnewline-eof") +#pragma clang diagnostic ignored "-Wnewline-eof" +#endif +#if __has_warning("-Wunused-parameter") +#pragma clang diagnostic ignored "-Wunused-parameter" +#endif +#if __has_warning("-Wmismatched-tags") +#pragma clang diagnostic ignored "-Wmismatched-tags" +#endif +#if __has_warning("-Wextra-semi-stmt") +#pragma clang diagnostic ignored "-Wextra-semi-stmt" +#endif +#endif + +// Disable GCC warnings +#ifdef __GNUC__ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wtype-limits" +#endif // __GNUC__ + +#ifndef TINYGLTF_NO_INCLUDE_JSON +#ifndef TINYGLTF_USE_RAPIDJSON +#include "json.hpp" +#else +#ifndef TINYGLTF_NO_INCLUDE_RAPIDJSON +#include "document.h" +#include "prettywriter.h" +#include "rapidjson.h" +#include "stringbuffer.h" +#include "writer.h" +#endif +#endif +#endif + +#ifdef TINYGLTF_ENABLE_DRACO +#include "draco/compression/decode.h" +#include "draco/core/decoder_buffer.h" +#endif + +#ifndef TINYGLTF_NO_STB_IMAGE +#ifndef TINYGLTF_NO_INCLUDE_STB_IMAGE +#include "stb_image.h" +#endif +#endif + +#ifndef TINYGLTF_NO_STB_IMAGE_WRITE +#ifndef TINYGLTF_NO_INCLUDE_STB_IMAGE_WRITE +#include "stb_image_write.h" +#endif +#endif + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#ifdef __GNUC__ +#pragma GCC diagnostic pop +#endif + +#ifdef _WIN32 + +// issue 143. +// Define NOMINMAX to avoid min/max defines, +// but undef it after included Windows.h +#ifndef NOMINMAX +#define TINYGLTF_INTERNAL_NOMINMAX +#define NOMINMAX +#endif + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#define TINYGLTF_INTERNAL_WIN32_LEAN_AND_MEAN +#endif +#ifndef __MINGW32__ +#include // include API for expanding a file path +#else +#include +#endif + +#ifdef TINYGLTF_INTERNAL_WIN32_LEAN_AND_MEAN +#undef WIN32_LEAN_AND_MEAN +#endif + +#if defined(TINYGLTF_INTERNAL_NOMINMAX) +#undef NOMINMAX +#endif + +#if defined(__GLIBCXX__) // mingw + +#include // _O_RDONLY + +#include // fstream (all sorts of IO stuff) + stdio_filebuf (=streambuf) + +#endif + +#elif !defined(__ANDROID__) && !defined(__OpenBSD__) +//#include +#endif + +#if defined(__sparcv9) || defined(__powerpc__) +// Big endian +#else +#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU +#define TINYGLTF_LITTLE_ENDIAN 1 +#endif +#endif + +namespace { +#ifdef TINYGLTF_USE_RAPIDJSON + +#ifdef TINYGLTF_USE_RAPIDJSON_CRTALLOCATOR +// This uses the RapidJSON CRTAllocator. It is thread safe and multiple +// documents may be active at once. +using json = + rapidjson::GenericValue, rapidjson::CrtAllocator>; +using json_const_iterator = json::ConstMemberIterator; +using json_const_array_iterator = json const*; +using JsonDocument = + rapidjson::GenericDocument, rapidjson::CrtAllocator>; +rapidjson::CrtAllocator s_CrtAllocator; // stateless and thread safe +rapidjson::CrtAllocator& GetAllocator() { return s_CrtAllocator; } +#else +// This uses the default RapidJSON MemoryPoolAllocator. It is very fast, but +// not thread safe. Only a single JsonDocument may be active at any one time, +// meaning only a single gltf load/save can be active any one time. +using json = rapidjson::Value; +using json_const_iterator = json::ConstMemberIterator; +using json_const_array_iterator = json const*; +rapidjson::Document* s_pActiveDocument = nullptr; +rapidjson::Document::AllocatorType& GetAllocator() +{ + assert(s_pActiveDocument); // Root json node must be JsonDocument type + return s_pActiveDocument->GetAllocator(); +} + +#ifdef __clang__ +#pragma clang diagnostic push +// Suppress JsonDocument(JsonDocument &&rhs) noexcept +#pragma clang diagnostic ignored "-Wunused-member-function" +#endif + +struct JsonDocument : public rapidjson::Document { + JsonDocument() + { + assert(s_pActiveDocument == + nullptr); // When using default allocator, only one document can + // be active at a time, if you need multiple active at + // once, define TINYGLTF_USE_RAPIDJSON_CRTALLOCATOR + s_pActiveDocument = this; + } + JsonDocument(const JsonDocument&) = delete; + JsonDocument(JsonDocument&& rhs) noexcept + : rapidjson::Document(std::move(rhs)) + { + s_pActiveDocument = this; + rhs.isNil = true; + } + ~JsonDocument() + { + if (!isNil) { + s_pActiveDocument = nullptr; + } + } + +private: + bool isNil = false; +}; + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#endif // TINYGLTF_USE_RAPIDJSON_CRTALLOCATOR + +#else +using nlohmann::json; +using json_const_iterator = json::const_iterator; +using json_const_array_iterator = json_const_iterator; +using JsonDocument = json; +#endif + +void JsonParse(JsonDocument& doc, const char* str, size_t length, + bool throwExc = false) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + (void)throwExc; + doc.Parse(str, length); +#else + doc = json::parse(str, str + length, nullptr, throwExc); +#endif +} +} // namespace + +#ifdef __APPLE__ +#include "TargetConditionals.h" +#endif + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++98-compat" +#endif + +namespace tinygltf { + +/// +/// Internal LoadImageDataOption struct. +/// This struct is passed through `user_pointer` in LoadImageData. +/// The struct is not passed when the user supply their own LoadImageData +/// callbacks. +/// +struct LoadImageDataOption { + // true: preserve image channels(e.g. load as RGB image if the image has RGB + // channels) default `false`(channels are expanded to RGBA for backward + // compatibility). + bool preserve_channels{false}; +}; + +// Equals function for Value, for recursivity +static bool Equals(const tinygltf::Value& one, const tinygltf::Value& other) +{ + if (one.Type() != other.Type()) + return false; + + switch (one.Type()) { + case NULL_TYPE: + return true; + case BOOL_TYPE: + return one.Get() == other.Get(); + case REAL_TYPE: + return TINYGLTF_DOUBLE_EQUAL(one.Get(), other.Get()); + case INT_TYPE: + return one.Get() == other.Get(); + case OBJECT_TYPE: { + auto oneObj = one.Get(); + auto otherObj = other.Get(); + if (oneObj.size() != otherObj.size()) + return false; + for (auto& it : oneObj) { + auto otherIt = otherObj.find(it.first); + if (otherIt == otherObj.end()) + return false; + + if (!Equals(it.second, otherIt->second)) + return false; + } + return true; + } + case ARRAY_TYPE: { + if (one.Size() != other.Size()) + return false; + for (int i = 0; i < int(one.Size()); ++i) + if (!Equals(one.Get(i), other.Get(i))) + return false; + return true; + } + case STRING_TYPE: + return one.Get() == other.Get(); + case BINARY_TYPE: + return one.Get>() == + other.Get>(); + default: { + // unhandled type + return false; + } + } +} + +// Equals function for std::vector using TINYGLTF_DOUBLE_EPSILON +static bool Equals(const std::vector& one, + const std::vector& other) +{ + if (one.size() != other.size()) + return false; + for (int i = 0; i < int(one.size()); ++i) { + if (!TINYGLTF_DOUBLE_EQUAL(one[size_t(i)], other[size_t(i)])) + return false; + } + return true; +} + +bool Accessor::operator==(const Accessor& other) const +{ + return this->bufferView == other.bufferView && + this->byteOffset == other.byteOffset && + this->componentType == other.componentType && + this->count == other.count && this->extensions == other.extensions && + this->extras == other.extras && + Equals(this->maxValues, other.maxValues) && + Equals(this->minValues, other.minValues) && + this->name == other.name && this->normalized == other.normalized && + this->type == other.type; +} +bool Animation::operator==(const Animation& other) const +{ + return this->channels == other.channels && + this->extensions == other.extensions && + this->extras == other.extras && this->name == other.name && + this->samplers == other.samplers; +} +bool AnimationChannel::operator==(const AnimationChannel& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && + this->target_node == other.target_node && + this->target_path == other.target_path && + this->sampler == other.sampler; +} +bool AnimationSampler::operator==(const AnimationSampler& other) const +{ + return this->extras == other.extras && + this->extensions == other.extensions && this->input == other.input && + this->interpolation == other.interpolation && + this->output == other.output; +} +bool Asset::operator==(const Asset& other) const +{ + return this->copyright == other.copyright && + this->extensions == other.extensions && + this->extras == other.extras && this->generator == other.generator && + this->minVersion == other.minVersion && + this->version == other.version; +} +bool Buffer::operator==(const Buffer& other) const +{ + return this->data == other.data && this->extensions == other.extensions && + this->extras == other.extras && this->name == other.name && + this->uri == other.uri; +} +bool BufferView::operator==(const BufferView& other) const +{ + return this->buffer == other.buffer && + this->byteLength == other.byteLength && + this->byteOffset == other.byteOffset && + this->byteStride == other.byteStride && this->name == other.name && + this->target == other.target && + this->extensions == other.extensions && + this->extras == other.extras && + this->dracoDecoded == other.dracoDecoded; +} +bool Camera::operator==(const Camera& other) const +{ + return this->name == other.name && this->extensions == other.extensions && + this->extras == other.extras && + this->orthographic == other.orthographic && + this->perspective == other.perspective && this->type == other.type; +} +bool Image::operator==(const Image& other) const +{ + return this->bufferView == other.bufferView && + this->component == other.component && + this->extensions == other.extensions && + this->extras == other.extras && this->height == other.height && + this->image == other.image && this->mimeType == other.mimeType && + this->name == other.name && this->uri == other.uri && + this->width == other.width; +} +bool Light::operator==(const Light& other) const +{ + return Equals(this->color, other.color) && this->name == other.name && + this->type == other.type; +} +bool Material::operator==(const Material& other) const +{ + return (this->pbrMetallicRoughness == other.pbrMetallicRoughness) && + (this->normalTexture == other.normalTexture) && + (this->occlusionTexture == other.occlusionTexture) && + (this->emissiveTexture == other.emissiveTexture) && + Equals(this->emissiveFactor, other.emissiveFactor) && + (this->alphaMode == other.alphaMode) && + TINYGLTF_DOUBLE_EQUAL(this->alphaCutoff, other.alphaCutoff) && + (this->doubleSided == other.doubleSided) && + (this->extensions == other.extensions) && + (this->extras == other.extras) && (this->values == other.values) && + (this->additionalValues == other.additionalValues) && + (this->name == other.name); +} +bool Mesh::operator==(const Mesh& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && this->name == other.name && + Equals(this->weights, other.weights) && + this->primitives == other.primitives; +} +bool Model::operator==(const Model& other) const +{ + return this->accessors == other.accessors && + this->animations == other.animations && this->asset == other.asset && + this->buffers == other.buffers && + this->bufferViews == other.bufferViews && + this->cameras == other.cameras && + this->defaultScene == other.defaultScene && + this->extensions == other.extensions && + this->extensionsRequired == other.extensionsRequired && + this->extensionsUsed == other.extensionsUsed && + this->extras == other.extras && this->images == other.images && + this->lights == other.lights && this->materials == other.materials && + this->meshes == other.meshes && this->nodes == other.nodes && + this->samplers == other.samplers && this->scenes == other.scenes && + this->skins == other.skins && this->textures == other.textures; +} +bool Node::operator==(const Node& other) const +{ + return this->camera == other.camera && this->children == other.children && + this->extensions == other.extensions && + this->extras == other.extras && Equals(this->matrix, other.matrix) && + this->mesh == other.mesh && this->name == other.name && + Equals(this->rotation, other.rotation) && + Equals(this->scale, other.scale) && this->skin == other.skin && + Equals(this->translation, other.translation) && + Equals(this->weights, other.weights); +} +bool SpotLight::operator==(const SpotLight& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && + TINYGLTF_DOUBLE_EQUAL(this->innerConeAngle, other.innerConeAngle) && + TINYGLTF_DOUBLE_EQUAL(this->outerConeAngle, other.outerConeAngle); +} +bool OrthographicCamera::operator==(const OrthographicCamera& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && + TINYGLTF_DOUBLE_EQUAL(this->xmag, other.xmag) && + TINYGLTF_DOUBLE_EQUAL(this->ymag, other.ymag) && + TINYGLTF_DOUBLE_EQUAL(this->zfar, other.zfar) && + TINYGLTF_DOUBLE_EQUAL(this->znear, other.znear); +} +bool Parameter::operator==(const Parameter& other) const +{ + if (this->bool_value != other.bool_value || + this->has_number_value != other.has_number_value) + return false; + + if (!TINYGLTF_DOUBLE_EQUAL(this->number_value, other.number_value)) + return false; + + if (this->json_double_value.size() != other.json_double_value.size()) + return false; + for (auto& it : this->json_double_value) { + auto otherIt = other.json_double_value.find(it.first); + if (otherIt == other.json_double_value.end()) + return false; + + if (!TINYGLTF_DOUBLE_EQUAL(it.second, otherIt->second)) + return false; + } + + if (!Equals(this->number_array, other.number_array)) + return false; + + if (this->string_value != other.string_value) + return false; + + return true; +} +bool PerspectiveCamera::operator==(const PerspectiveCamera& other) const +{ + return TINYGLTF_DOUBLE_EQUAL(this->aspectRatio, other.aspectRatio) && + this->extensions == other.extensions && + this->extras == other.extras && + TINYGLTF_DOUBLE_EQUAL(this->yfov, other.yfov) && + TINYGLTF_DOUBLE_EQUAL(this->zfar, other.zfar) && + TINYGLTF_DOUBLE_EQUAL(this->znear, other.znear); +} +bool Primitive::operator==(const Primitive& other) const +{ + return this->attributes == other.attributes && + this->extras == other.extras && this->indices == other.indices && + this->material == other.material && this->mode == other.mode && + this->targets == other.targets; +} +bool Sampler::operator==(const Sampler& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && this->magFilter == other.magFilter && + this->minFilter == other.minFilter && this->name == other.name && + this->wrapS == other.wrapS && this->wrapT == other.wrapT; + + // this->wrapR == other.wrapR +} +bool Scene::operator==(const Scene& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && this->name == other.name && + this->nodes == other.nodes; +} +bool Skin::operator==(const Skin& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && + this->inverseBindMatrices == other.inverseBindMatrices && + this->joints == other.joints && this->name == other.name && + this->skeleton == other.skeleton; +} +bool Texture::operator==(const Texture& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && this->name == other.name && + this->sampler == other.sampler && this->source == other.source; +} +bool TextureInfo::operator==(const TextureInfo& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && this->index == other.index && + this->texCoord == other.texCoord; +} +bool NormalTextureInfo::operator==(const NormalTextureInfo& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && this->index == other.index && + this->texCoord == other.texCoord && + TINYGLTF_DOUBLE_EQUAL(this->scale, other.scale); +} +bool OcclusionTextureInfo::operator==(const OcclusionTextureInfo& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && this->index == other.index && + this->texCoord == other.texCoord && + TINYGLTF_DOUBLE_EQUAL(this->strength, other.strength); +} +bool PbrMetallicRoughness::operator==(const PbrMetallicRoughness& other) const +{ + return this->extensions == other.extensions && + this->extras == other.extras && + (this->baseColorTexture == other.baseColorTexture) && + (this->metallicRoughnessTexture == other.metallicRoughnessTexture) && + Equals(this->baseColorFactor, other.baseColorFactor) && + TINYGLTF_DOUBLE_EQUAL(this->metallicFactor, other.metallicFactor) && + TINYGLTF_DOUBLE_EQUAL(this->roughnessFactor, other.roughnessFactor); +} +bool Value::operator==(const Value& other) const +{ + return Equals(*this, other); +} + +static void swap4(unsigned int* val) +{ +#ifdef TINYGLTF_LITTLE_ENDIAN + (void)val; +#else + unsigned int tmp = *val; + unsigned char* dst = reinterpret_cast(val); + unsigned char* src = reinterpret_cast(&tmp); + + dst[0] = src[3]; + dst[1] = src[2]; + dst[2] = src[1]; + dst[3] = src[0]; +#endif +} + +static std::string JoinPath(const std::string& path0, const std::string& path1) +{ + if (path0.empty()) { + return path1; + } + else { + // check '/' + char lastChar = *path0.rbegin(); + if (lastChar != '/') { + return path0 + std::string("/") + path1; + } + else { + return path0 + path1; + } + } +} + +static std::string FindFile(const std::vector& paths, + const std::string& filepath, FsCallbacks* fs) +{ + if (fs == nullptr || fs->ExpandFilePath == nullptr || + fs->FileExists == nullptr) { + // Error, fs callback[s] missing + return std::string(); + } + + for (size_t i = 0; i < paths.size(); i++) { + std::string absPath = + fs->ExpandFilePath(JoinPath(paths[i], filepath), fs->user_data); + if (fs->FileExists(absPath, fs->user_data)) { + return absPath; + } + } + + return std::string(); +} + +static std::string GetFilePathExtension(const std::string& FileName) +{ + if (FileName.find_last_of(".") != std::string::npos) + return FileName.substr(FileName.find_last_of(".") + 1); + return ""; +} + +static std::string GetBaseDir(const std::string& filepath) +{ + if (filepath.find_last_of("/\\") != std::string::npos) + return filepath.substr(0, filepath.find_last_of("/\\")); + return ""; +} + +static std::string GetBaseFilename(const std::string& filepath) +{ + auto idx = filepath.find_last_of("/\\"); + if (idx != std::string::npos) + return filepath.substr(idx + 1); + return filepath; +} + +std::string base64_encode(unsigned char const*, unsigned int len); +std::string base64_decode(std::string const& s); + +/* + base64.cpp and base64.h + + Copyright (C) 2004-2008 René Nyffenegger + + This source code is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this source code must not be misrepresented; you must not + claim that you wrote the original source code. If you use this source code + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original source code. + + 3. This notice may not be removed or altered from any source distribution. + + René Nyffenegger rene.nyffenegger@adp-gmbh.ch + +*/ + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wsign-conversion" +#pragma clang diagnostic ignored "-Wconversion" +#endif + +static inline bool is_base64(unsigned char c) +{ + return (isalnum(c) || (c == '+') || (c == '/')); +} + +std::string base64_encode(unsigned char const* bytes_to_encode, + unsigned int in_len) +{ + std::string ret; + int i = 0; + int j = 0; + unsigned char char_array_3[3]; + unsigned char char_array_4[4]; + + const char* base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + + while (in_len--) { + char_array_3[i++] = *(bytes_to_encode++); + if (i == 3) { + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + + ((char_array_3[2] & 0xc0) >> 6); + char_array_4[3] = char_array_3[2] & 0x3f; + + for (i = 0; (i < 4); i++) + ret += base64_chars[char_array_4[i]]; + i = 0; + } + } + + if (i) { + for (j = i; j < 3; j++) + char_array_3[j] = '\0'; + + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = + ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = + ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + + for (j = 0; (j < i + 1); j++) + ret += base64_chars[char_array_4[j]]; + + while ((i++ < 3)) + ret += '='; + } + + return ret; +} + +std::string base64_decode(std::string const& encoded_string) +{ + int in_len = static_cast(encoded_string.size()); + int i = 0; + int j = 0; + int in_ = 0; + unsigned char char_array_4[4], char_array_3[3]; + std::string ret; + + const std::string base64_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + + while (in_len-- && (encoded_string[in_] != '=') && + is_base64(encoded_string[in_])) { + char_array_4[i++] = encoded_string[in_]; + in_++; + if (i == 4) { + for (i = 0; i < 4; i++) + char_array_4[i] = static_cast( + base64_chars.find(char_array_4[i])); + + char_array_3[0] = + (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (i = 0; (i < 3); i++) + ret += char_array_3[i]; + i = 0; + } + } + + if (i) { + for (j = i; j < 4; j++) + char_array_4[j] = 0; + + for (j = 0; j < 4; j++) + char_array_4[j] = + static_cast(base64_chars.find(char_array_4[j])); + + char_array_3[0] = + (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = + ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (j = 0; (j < i - 1); j++) + ret += char_array_3[j]; + } + + return ret; +} +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +// https://github.com/syoyo/tinygltf/issues/228 +// TODO(syoyo): Use uriparser https://uriparser.github.io/ for stricter Uri +// decoding? +// +// Uri Decoding from DLIB +// http://dlib.net/dlib/server/server_http.cpp.html +// --- dlib begin ------------------------------------------------------------ +// Copyright (C) 2003 Davis E. King (davis@dlib.net) +// License: Boost Software License +// Boost Software License - Version 1.0 - August 17th, 2003 + +// Permission is hereby granted, free of charge, to any person or organization +// obtaining a copy of the software and accompanying documentation covered by +// this license (the "Software") to use, reproduce, display, distribute, +// execute, and transmit the Software, and to prepare derivative works of the +// Software, and to permit third-parties to whom the Software is furnished to +// do so, all subject to the following: +// The copyright notices in the Software and this entire statement, including +// the above license grant, this restriction and the following disclaimer, +// must be included in all copies of the Software, in whole or in part, and +// all derivative works of the Software, unless such copies or derivative +// works are solely in the form of machine-executable object code generated by +// a source language processor. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. +// +namespace dlib { + +inline unsigned char from_hex(unsigned char ch) +{ + if (ch <= '9' && ch >= '0') + ch -= '0'; + else if (ch <= 'f' && ch >= 'a') + ch -= 'a' - 10; + else if (ch <= 'F' && ch >= 'A') + ch -= 'A' - 10; + else + ch = 0; + return ch; +} + +static const std::string urldecode(const std::string& str) +{ + using namespace std; + string result; + string::size_type i; + for (i = 0; i < str.size(); ++i) { + if (str[i] == '+') { + result += ' '; + } + else if (str[i] == '%' && str.size() > i + 2) { + const unsigned char ch1 = + from_hex(static_cast(str[i + 1])); + const unsigned char ch2 = + from_hex(static_cast(str[i + 2])); + const unsigned char ch = + static_cast((ch1 << 4) | ch2); + result += static_cast(ch); + i += 2; + } + else { + result += str[i]; + } + } + return result; +} + +} // namespace dlib +// --- dlib end -------------------------------------------------------------- + +static bool LoadExternalFile(std::vector* out, std::string* err, + std::string* warn, const std::string& filename, + const std::string& basedir, bool required, + size_t reqBytes, bool checkSize, FsCallbacks* fs) +{ + if (fs == nullptr || fs->FileExists == nullptr || + fs->ExpandFilePath == nullptr || fs->ReadWholeFile == nullptr) { + // This is a developer error, assert() ? + if (err) { + (*err) += "FS callback[s] not set\n"; + } + return false; + } + + std::string* failMsgOut = required ? err : warn; + + out->clear(); + + std::vector paths; + paths.push_back(basedir); + paths.push_back("."); + + std::string filepath = FindFile(paths, filename, fs); + if (filepath.empty() || filename.empty()) { + if (failMsgOut) { + (*failMsgOut) += "File not found : " + filename + "\n"; + } + return false; + } + + std::vector buf; + std::string fileReadErr; + bool fileRead = + fs->ReadWholeFile(&buf, &fileReadErr, filepath, fs->user_data); + if (!fileRead) { + if (failMsgOut) { + (*failMsgOut) += + "File read error : " + filepath + " : " + fileReadErr + "\n"; + } + return false; + } + + size_t sz = buf.size(); + if (sz == 0) { + if (failMsgOut) { + (*failMsgOut) += "File is empty : " + filepath + "\n"; + } + return false; + } + + if (checkSize) { + if (reqBytes == sz) { + out->swap(buf); + return true; + } + else { + std::stringstream ss; + ss << "File size mismatch : " << filepath << ", requestedBytes " + << reqBytes << ", but got " << sz << std::endl; + if (failMsgOut) { + (*failMsgOut) += ss.str(); + } + return false; + } + } + + out->swap(buf); + return true; +} + +void TinyGLTF::SetImageLoader(LoadImageDataFunction func, void* user_data) +{ + LoadImageData = func; + load_image_user_data_ = user_data; + user_image_loader_ = true; +} + +void TinyGLTF::RemoveImageLoader() +{ + LoadImageData = +#ifndef TINYGLTF_NO_STB_IMAGE + &tinygltf::LoadImageData; +#else + nullptr; +#endif + + load_image_user_data_ = nullptr; + user_image_loader_ = false; +} + +#ifndef TINYGLTF_NO_STB_IMAGE +bool LoadImageData(Image* image, const int image_idx, std::string* err, + std::string* warn, int req_width, int req_height, + const unsigned char* bytes, int size, void* user_data) +{ + (void)warn; + + LoadImageDataOption option; + if (user_data) { + option = *reinterpret_cast(user_data); + } + + int w = 0, h = 0, comp = 0, req_comp = 0; + + unsigned char* data = nullptr; + + // preserve_channels true: Use channels stored in the image file. + // false: force 32-bit textures for common Vulkan compatibility. It appears + // that some GPU drivers do not support 24-bit images for Vulkan + req_comp = option.preserve_channels ? 0 : 4; + int bits = 8; + int pixel_type = TINYGLTF_COMPONENT_TYPE_UNSIGNED_BYTE; + + // It is possible that the image we want to load is a 16bit per channel + // image We are going to attempt to load it as 16bit per channel, and if it + // worked, set the image data accordingly. We are casting the returned + // pointer into unsigned char, because we are representing "bytes". But we + // are updating the Image metadata to signal that this image uses 2 bytes + // (16bits) per channel: + if (stbi_is_16_bit_from_memory(bytes, size)) { + data = reinterpret_cast( + stbi_load_16_from_memory(bytes, size, &w, &h, &comp, req_comp)); + if (data) { + bits = 16; + pixel_type = TINYGLTF_COMPONENT_TYPE_UNSIGNED_SHORT; + } + } + + // at this point, if data is still NULL, it means that the image wasn't + // 16bit per channel, we are going to load it as a normal 8bit per channel + // image as we used to do: + // if image cannot be decoded, ignore parsing and keep it by its path + // don't break in this case + // FIXME we should only enter this function if the image is embedded. If + // image->uri references + // an image file, it should be left as it is. Image loading should not be + // mandatory (to support other formats) + if (!data) + data = stbi_load_from_memory(bytes, size, &w, &h, &comp, req_comp); + if (!data) { + // NOTE: you can use `warn` instead of `err` + if (err) { + (*err) += "Unknown image format. STB cannot decode image data for " + "image[" + + std::to_string(image_idx) + "] name = \"" + image->name + + "\".\n"; + } + return false; + } + + if ((w < 1) || (h < 1)) { + stbi_image_free(data); + if (err) { + (*err) += "Invalid image data for image[" + + std::to_string(image_idx) + "] name = \"" + image->name + + "\"\n"; + } + return false; + } + + if (req_width > 0) { + if (req_width != w) { + stbi_image_free(data); + if (err) { + (*err) += "Image width mismatch for image[" + + std::to_string(image_idx) + "] name = \"" + + image->name + "\"\n"; + } + return false; + } + } + + if (req_height > 0) { + if (req_height != h) { + stbi_image_free(data); + if (err) { + (*err) += "Image height mismatch. for image[" + + std::to_string(image_idx) + "] name = \"" + + image->name + "\"\n"; + } + return false; + } + } + + if (req_comp != 0) { + // loaded data has `req_comp` channels(components) + comp = req_comp; + } + + image->width = w; + image->height = h; + image->component = comp; + image->bits = bits; + image->pixel_type = pixel_type; + image->image.resize(static_cast(w * h * comp) * size_t(bits / 8)); + std::copy(data, data + w * h * comp * (bits / 8), image->image.begin()); + stbi_image_free(data); + + return true; +} +#endif + +void TinyGLTF::SetImageWriter(WriteImageDataFunction func, void* user_data) +{ + WriteImageData = func; + write_image_user_data_ = user_data; +} + +#ifndef TINYGLTF_NO_STB_IMAGE_WRITE +static void WriteToMemory_stbi(void* context, void* data, int size) +{ + std::vector* buffer = + reinterpret_cast*>(context); + + unsigned char* pData = reinterpret_cast(data); + + buffer->insert(buffer->end(), pData, pData + size); +} + +bool WriteImageData(const std::string* basepath, const std::string* filename, + Image* image, bool embedImages, void* fsPtr) +{ + const std::string ext = GetFilePathExtension(*filename); + + // Write image to temporary buffer + std::string header; + std::vector data; + + if (ext == "png") { + if ((image->bits != 8) || + (image->pixel_type != TINYGLTF_COMPONENT_TYPE_UNSIGNED_BYTE)) { + // Unsupported pixel format + return false; + } + + if (!stbi_write_png_to_func(WriteToMemory_stbi, &data, image->width, + image->height, image->component, + &image->image[0], 0)) { + return false; + } + header = "data:image/png;base64,"; + } + else if (ext == "jpg") { + if (!stbi_write_jpg_to_func(WriteToMemory_stbi, &data, image->width, + image->height, image->component, + &image->image[0], 100)) { + return false; + } + header = "data:image/jpeg;base64,"; + } + else if (ext == "bmp") { + if (!stbi_write_bmp_to_func(WriteToMemory_stbi, &data, image->width, + image->height, image->component, + &image->image[0])) { + return false; + } + header = "data:image/bmp;base64,"; + } + else if (!embedImages) { + // Error: can't output requested format to file + return false; + } + + if (embedImages) { + // Embed base64-encoded image into URI + if (data.size()) { + image->uri = + header + + base64_encode(&data[0], static_cast(data.size())); + } + else { + // Throw error? + } + } + else { + // Write image to disc + FsCallbacks* fs = reinterpret_cast(fsPtr); + if ((fs != nullptr) && (fs->WriteWholeFile != nullptr)) { + const std::string imagefilepath = JoinPath(*basepath, *filename); + std::string writeError; + if (!fs->WriteWholeFile(&writeError, imagefilepath, data, + fs->user_data)) { + // Could not write image file to disc; Throw error ? + return false; + } + } + else { + // Throw error? + } + image->uri = *filename; + } + + return true; +} +#endif + +void TinyGLTF::SetFsCallbacks(FsCallbacks callbacks) { fs = callbacks; } + +#ifdef _WIN32 +static inline std::wstring UTF8ToWchar(const std::string& str) +{ + int wstr_size = MultiByteToWideChar(CP_UTF8, 0, str.data(), (int)str.size(), + nullptr, 0); + std::wstring wstr((size_t)wstr_size, 0); + MultiByteToWideChar(CP_UTF8, 0, str.data(), (int)str.size(), &wstr[0], + (int)wstr.size()); + return wstr; +} + +static inline std::string WcharToUTF8(const std::wstring& wstr) +{ + int str_size = + WideCharToMultiByte(CP_UTF8, 0, wstr.data(), (int)wstr.size(), nullptr, + 0, nullptr, nullptr); + std::string str((size_t)str_size, 0); + WideCharToMultiByte(CP_UTF8, 0, wstr.data(), (int)wstr.size(), &str[0], + (int)str.size(), nullptr, nullptr); + return str; +} +#endif + +#ifndef TINYGLTF_NO_FS +// Default implementations of filesystem functions + +bool FileExists(const std::string& abs_filename, void*) +{ + bool ret; +#ifdef TINYGLTF_ANDROID_LOAD_FROM_ASSETS + if (asset_manager) { + AAsset* asset = AAssetManager_open(asset_manager, abs_filename.c_str(), + AASSET_MODE_STREAMING); + if (!asset) { + return false; + } + AAsset_close(asset); + ret = true; + } + else { + return false; + } +#else +#ifdef _WIN32 +#if defined(_MSC_VER) || defined(__GLIBCXX__) || defined(_LIBCPP_VERSION) + FILE* fp = nullptr; + errno_t err = _wfopen_s(&fp, UTF8ToWchar(abs_filename).c_str(), L"rb"); + if (err != 0) { + return false; + } +#else + FILE* fp = nullptr; + errno_t err = fopen_s(&fp, abs_filename.c_str(), "rb"); + if (err != 0) { + return false; + } +#endif + +#else + FILE* fp = fopen(abs_filename.c_str(), "rb"); +#endif + if (fp) { + ret = true; + fclose(fp); + } + else { + ret = false; + } +#endif + + return ret; +} + +std::string ExpandFilePath(const std::string& filepath, void*) +{ + // https://github.com/syoyo/tinygltf/issues/368 + // + // No file path expansion in built-in FS function anymore, since glTF URI + // should not contain tilde('~') and environment variables, and for security + // reason(`wordexp`). + // + // Users need to supply `base_dir`(in `LoadASCIIFromString`, + // `LoadBinaryFromMemory`) in expanded absolute path. + + return filepath; + +#if 0 +#ifdef _WIN32 + // Assume input `filepath` is encoded in UTF-8 + std::wstring wfilepath = UTF8ToWchar(filepath); + DWORD wlen = ExpandEnvironmentStringsW(wfilepath.c_str(), nullptr, 0); + wchar_t *wstr = new wchar_t[wlen]; + ExpandEnvironmentStringsW(wfilepath.c_str(), wstr, wlen); + + std::wstring ws(wstr); + delete[] wstr; + return WcharToUTF8(ws); + +#else + +#if defined(TARGET_OS_IPHONE) || defined(TARGET_IPHONE_SIMULATOR) || \ + defined(__ANDROID__) || defined(__EMSCRIPTEN__) || defined(__OpenBSD__) + // no expansion + std::string s = filepath; +#else + std::string s; + wordexp_t p; + + if (filepath.empty()) { + return ""; + } + + // Quote the string to keep any spaces in filepath intact. + std::string quoted_path = "\"" + filepath + "\""; + // char** w; + int ret = wordexp(quoted_path.c_str(), &p, 0); + if (ret) { + // err + s = filepath; + return s; + } + + // Use first element only. + if (p.we_wordv) { + s = std::string(p.we_wordv[0]); + wordfree(&p); + } else { + s = filepath; + } + +#endif + + return s; +#endif +#endif +} + +bool ReadWholeFile(std::vector* out, std::string* err, + const std::string& filepath, void*) +{ +#ifdef TINYGLTF_ANDROID_LOAD_FROM_ASSETS + if (asset_manager) { + AAsset* asset = AAssetManager_open(asset_manager, filepath.c_str(), + AASSET_MODE_STREAMING); + if (!asset) { + if (err) { + (*err) += "File open error : " + filepath + "\n"; + } + return false; + } + size_t size = AAsset_getLength(asset); + if (size == 0) { + if (err) { + (*err) += "Invalid file size : " + filepath + + " (does the path point to a directory?)"; + } + return false; + } + out->resize(size); + AAsset_read(asset, reinterpret_cast(&out->at(0)), size); + AAsset_close(asset); + return true; + } + else { + if (err) { + (*err) += "No asset manager specified : " + filepath + "\n"; + } + return false; + } +#else +#ifdef _WIN32 +#if defined(__GLIBCXX__) // mingw + int file_descriptor = + _wopen(UTF8ToWchar(filepath).c_str(), _O_RDONLY | _O_BINARY); + __gnu_cxx::stdio_filebuf wfile_buf(file_descriptor, + std::ios_base::in); + std::istream f(&wfile_buf); +#elif defined(_MSC_VER) || defined(_LIBCPP_VERSION) + // For libcxx, assume _LIBCPP_HAS_OPEN_WITH_WCHAR is defined to accept + // `wchar_t *` + std::ifstream f(UTF8ToWchar(filepath).c_str(), std::ifstream::binary); +#else + // Unknown compiler/runtime + std::ifstream f(filepath.c_str(), std::ifstream::binary); +#endif +#else + std::ifstream f(filepath.c_str(), std::ifstream::binary); +#endif + if (!f) { + if (err) { + (*err) += "File open error : " + filepath + "\n"; + } + return false; + } + + f.seekg(0, f.end); + size_t sz = static_cast(f.tellg()); + f.seekg(0, f.beg); + + if (int64_t(sz) < 0) { + if (err) { + (*err) += "Invalid file size : " + filepath + + " (does the path point to a directory?)"; + } + return false; + } + else if (sz == 0) { + if (err) { + (*err) += "File is empty : " + filepath + "\n"; + } + return false; + } + + out->resize(sz); + f.read(reinterpret_cast(&out->at(0)), + static_cast(sz)); + + return true; +#endif +} + +bool WriteWholeFile(std::string* err, const std::string& filepath, + const std::vector& contents, void*) +{ +#ifdef _WIN32 +#if defined(__GLIBCXX__) // mingw + int file_descriptor = _wopen(UTF8ToWchar(filepath).c_str(), + _O_CREAT | _O_WRONLY | _O_TRUNC | _O_BINARY); + __gnu_cxx::stdio_filebuf wfile_buf( + file_descriptor, std::ios_base::out | std::ios_base::binary); + std::ostream f(&wfile_buf); +#elif defined(_MSC_VER) + std::ofstream f(UTF8ToWchar(filepath).c_str(), std::ofstream::binary); +#else // clang? + std::ofstream f(filepath.c_str(), std::ofstream::binary); +#endif +#else + std::ofstream f(filepath.c_str(), std::ofstream::binary); +#endif + if (!f) { + if (err) { + (*err) += "File open error for writing : " + filepath + "\n"; + } + return false; + } + + f.write(reinterpret_cast(&contents.at(0)), + static_cast(contents.size())); + if (!f) { + if (err) { + (*err) += "File write error: " + filepath + "\n"; + } + return false; + } + + return true; +} + +#endif // TINYGLTF_NO_FS + +static std::string MimeToExt(const std::string& mimeType) +{ + if (mimeType == "image/jpeg") { + return "jpg"; + } + else if (mimeType == "image/png") { + return "png"; + } + else if (mimeType == "image/bmp") { + return "bmp"; + } + else if (mimeType == "image/gif") { + return "gif"; + } + + return ""; +} + +static void UpdateImageObject(Image& image, std::string& baseDir, int index, + bool embedImages, + WriteImageDataFunction* WriteImageData = nullptr, + void* user_data = nullptr) +{ + std::string filename; + std::string ext; + // If image has uri, use it as a filename + if (image.uri.size()) { + filename = GetBaseFilename(image.uri); + ext = GetFilePathExtension(filename); + } + else if (image.bufferView != -1) { + // If there's no URI and the data exists in a buffer, + // don't change properties or write images + } + else if (image.name.size()) { + ext = MimeToExt(image.mimeType); + // Otherwise use name as filename + filename = image.name + "." + ext; + } + else { + ext = MimeToExt(image.mimeType); + // Fallback to index of image as filename + filename = std::to_string(index) + "." + ext; + } + + // If callback is set, modify image data object + if (*WriteImageData != nullptr && !filename.empty()) { + std::string uri; + (*WriteImageData)(&baseDir, &filename, &image, embedImages, user_data); + } +} + +bool IsDataURI(const std::string& in) +{ + std::string header = "data:application/octet-stream;base64,"; + if (in.find(header) == 0) { + return true; + } + + header = "data:image/jpeg;base64,"; + if (in.find(header) == 0) { + return true; + } + + header = "data:image/png;base64,"; + if (in.find(header) == 0) { + return true; + } + + header = "data:image/bmp;base64,"; + if (in.find(header) == 0) { + return true; + } + + header = "data:image/gif;base64,"; + if (in.find(header) == 0) { + return true; + } + + header = "data:text/plain;base64,"; + if (in.find(header) == 0) { + return true; + } + + header = "data:application/gltf-buffer;base64,"; + if (in.find(header) == 0) { + return true; + } + + return false; +} + +bool DecodeDataURI(std::vector* out, std::string& mime_type, + const std::string& in, size_t reqBytes, bool checkSize) +{ + std::string header = "data:application/octet-stream;base64,"; + std::string data; + if (in.find(header) == 0) { + data = base64_decode(in.substr(header.size())); // cut mime string. + } + + if (data.empty()) { + header = "data:image/jpeg;base64,"; + if (in.find(header) == 0) { + mime_type = "image/jpeg"; + data = base64_decode(in.substr(header.size())); // cut mime string. + } + } + + if (data.empty()) { + header = "data:image/png;base64,"; + if (in.find(header) == 0) { + mime_type = "image/png"; + data = base64_decode(in.substr(header.size())); // cut mime string. + } + } + + if (data.empty()) { + header = "data:image/bmp;base64,"; + if (in.find(header) == 0) { + mime_type = "image/bmp"; + data = base64_decode(in.substr(header.size())); // cut mime string. + } + } + + if (data.empty()) { + header = "data:image/gif;base64,"; + if (in.find(header) == 0) { + mime_type = "image/gif"; + data = base64_decode(in.substr(header.size())); // cut mime string. + } + } + + if (data.empty()) { + header = "data:text/plain;base64,"; + if (in.find(header) == 0) { + mime_type = "text/plain"; + data = base64_decode(in.substr(header.size())); + } + } + + if (data.empty()) { + header = "data:application/gltf-buffer;base64,"; + if (in.find(header) == 0) { + data = base64_decode(in.substr(header.size())); + } + } + + // TODO(syoyo): Allow empty buffer? #229 + if (data.empty()) { + return false; + } + + if (checkSize) { + if (data.size() != reqBytes) { + return false; + } + out->resize(reqBytes); + } + else { + out->resize(data.size()); + } + std::copy(data.begin(), data.end(), out->begin()); + return true; +} + +namespace { +bool GetInt(const json& o, int& val) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + if (!o.IsDouble()) { + if (o.IsInt()) { + val = o.GetInt(); + return true; + } + else if (o.IsUint()) { + val = static_cast(o.GetUint()); + return true; + } + else if (o.IsInt64()) { + val = static_cast(o.GetInt64()); + return true; + } + else if (o.IsUint64()) { + val = static_cast(o.GetUint64()); + return true; + } + } + + return false; +#else + auto type = o.type(); + + if ((type == json::value_t::number_integer) || + (type == json::value_t::number_unsigned)) { + val = static_cast(o.get()); + return true; + } + + return false; +#endif +} + +#ifdef TINYGLTF_USE_RAPIDJSON +bool GetDouble(const json& o, double& val) +{ + if (o.IsDouble()) { + val = o.GetDouble(); + return true; + } + + return false; +} +#endif + +bool GetNumber(const json& o, double& val) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + if (o.IsNumber()) { + val = o.GetDouble(); + return true; + } + + return false; +#else + if (o.is_number()) { + val = o.get(); + return true; + } + + return false; +#endif +} + +bool GetString(const json& o, std::string& val) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + if (o.IsString()) { + val = o.GetString(); + return true; + } + + return false; +#else + if (o.type() == json::value_t::string) { + val = o.get(); + return true; + } + + return false; +#endif +} + +bool IsArray(const json& o) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + return o.IsArray(); +#else + return o.is_array(); +#endif +} + +json_const_array_iterator ArrayBegin(const json& o) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + return o.Begin(); +#else + return o.begin(); +#endif +} + +json_const_array_iterator ArrayEnd(const json& o) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + return o.End(); +#else + return o.end(); +#endif +} + +bool IsObject(const json& o) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + return o.IsObject(); +#else + return o.is_object(); +#endif +} + +json_const_iterator ObjectBegin(const json& o) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + return o.MemberBegin(); +#else + return o.begin(); +#endif +} + +json_const_iterator ObjectEnd(const json& o) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + return o.MemberEnd(); +#else + return o.end(); +#endif +} + +// Making this a const char* results in a pointer to a temporary when +// TINYGLTF_USE_RAPIDJSON is off. +std::string GetKey(json_const_iterator& it) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + return it->name.GetString(); +#else + return it.key().c_str(); +#endif +} + +bool FindMember(const json& o, const char* member, json_const_iterator& it) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + if (!o.IsObject()) { + return false; + } + it = o.FindMember(member); + return it != o.MemberEnd(); +#else + it = o.find(member); + return it != o.end(); +#endif +} + +const json& GetValue(json_const_iterator& it) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + return it->value; +#else + return it.value(); +#endif +} + +std::string JsonToString(const json& o, int spacing = -1) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + using namespace rapidjson; + StringBuffer buffer; + if (spacing == -1) { + Writer writer(buffer); + // TODO: Better error handling. + // https://github.com/syoyo/tinygltf/issues/332 + if (!o.Accept(writer)) { + return "tiny_gltf::JsonToString() failed rapidjson conversion"; + } + } + else { + PrettyWriter writer(buffer); + writer.SetIndent(' ', uint32_t(spacing)); + if (!o.Accept(writer)) { + return "tiny_gltf::JsonToString() failed rapidjson conversion"; + } + } + return buffer.GetString(); +#else + return o.dump(spacing); +#endif +} + +} // namespace + +static bool ParseJsonAsValue(Value* ret, const json& o) +{ + Value val{}; +#ifdef TINYGLTF_USE_RAPIDJSON + using rapidjson::Type; + switch (o.GetType()) { + case Type::kObjectType: { + Value::Object value_object; + for (auto it = o.MemberBegin(); it != o.MemberEnd(); ++it) { + Value entry; + ParseJsonAsValue(&entry, it->value); + if (entry.Type() != NULL_TYPE) + value_object.emplace(GetKey(it), std::move(entry)); + } + if (value_object.size() > 0) + val = Value(std::move(value_object)); + } break; + case Type::kArrayType: { + Value::Array value_array; + value_array.reserve(o.Size()); + for (auto it = o.Begin(); it != o.End(); ++it) { + Value entry; + ParseJsonAsValue(&entry, *it); + if (entry.Type() != NULL_TYPE) + value_array.emplace_back(std::move(entry)); + } + if (value_array.size() > 0) + val = Value(std::move(value_array)); + } break; + case Type::kStringType: + val = Value(std::string(o.GetString())); + break; + case Type::kFalseType: + case Type::kTrueType: + val = Value(o.GetBool()); + break; + case Type::kNumberType: + if (!o.IsDouble()) { + int i = 0; + GetInt(o, i); + val = Value(i); + } + else { + double d = 0.0; + GetDouble(o, d); + val = Value(d); + } + break; + case Type::kNullType: + break; + // all types are covered, so no `case default` + } +#else + switch (o.type()) { + case json::value_t::object: { + Value::Object value_object; + for (auto it = o.begin(); it != o.end(); it++) { + Value entry; + ParseJsonAsValue(&entry, it.value()); + if (entry.Type() != NULL_TYPE) + value_object.emplace(it.key(), std::move(entry)); + } + if (value_object.size() > 0) + val = Value(std::move(value_object)); + } break; + case json::value_t::array: { + Value::Array value_array; + value_array.reserve(o.size()); + for (auto it = o.begin(); it != o.end(); it++) { + Value entry; + ParseJsonAsValue(&entry, it.value()); + if (entry.Type() != NULL_TYPE) + value_array.emplace_back(std::move(entry)); + } + if (value_array.size() > 0) + val = Value(std::move(value_array)); + } break; + case json::value_t::string: + val = Value(o.get()); + break; + case json::value_t::boolean: + val = Value(o.get()); + break; + case json::value_t::number_integer: + case json::value_t::number_unsigned: + val = Value(static_cast(o.get())); + break; + case json::value_t::number_float: + val = Value(o.get()); + break; + case json::value_t::null: + case json::value_t::discarded: + case json::value_t::binary: + // default: + break; + } +#endif + const bool isNotNull = val.Type() != NULL_TYPE; + + if (ret) + *ret = std::move(val); + + return isNotNull; +} + +static bool ParseExtrasProperty(Value* ret, const json& o) +{ + json_const_iterator it; + if (!FindMember(o, "extras", it)) { + return false; + } + + return ParseJsonAsValue(ret, GetValue(it)); +} + +static bool ParseBooleanProperty(bool* ret, std::string* err, const json& o, + const std::string& property, + const bool required, + const std::string& parent_node = "") +{ + json_const_iterator it; + if (!FindMember(o, property.c_str(), it)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is missing"; + if (!parent_node.empty()) { + (*err) += " in " + parent_node; + } + (*err) += ".\n"; + } + } + return false; + } + + auto& value = GetValue(it); + + bool isBoolean; + bool boolValue = false; +#ifdef TINYGLTF_USE_RAPIDJSON + isBoolean = value.IsBool(); + if (isBoolean) { + boolValue = value.GetBool(); + } +#else + isBoolean = value.is_boolean(); + if (isBoolean) { + boolValue = value.get(); + } +#endif + if (!isBoolean) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is not a bool type.\n"; + } + } + return false; + } + + if (ret) { + (*ret) = boolValue; + } + + return true; +} + +static bool ParseIntegerProperty(int* ret, std::string* err, const json& o, + const std::string& property, + const bool required, + const std::string& parent_node = "") +{ + json_const_iterator it; + if (!FindMember(o, property.c_str(), it)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is missing"; + if (!parent_node.empty()) { + (*err) += " in " + parent_node; + } + (*err) += ".\n"; + } + } + return false; + } + + int intValue; + bool isInt = GetInt(GetValue(it), intValue); + if (!isInt) { + if (required) { + if (err) { + (*err) += + "'" + property + "' property is not an integer type.\n"; + } + } + return false; + } + + if (ret) { + (*ret) = intValue; + } + + return true; +} + +static bool ParseUnsignedProperty(size_t* ret, std::string* err, const json& o, + const std::string& property, + const bool required, + const std::string& parent_node = "") +{ + json_const_iterator it; + if (!FindMember(o, property.c_str(), it)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is missing"; + if (!parent_node.empty()) { + (*err) += " in " + parent_node; + } + (*err) += ".\n"; + } + } + return false; + } + + auto& value = GetValue(it); + + size_t uValue = 0; + bool isUValue; +#ifdef TINYGLTF_USE_RAPIDJSON + isUValue = false; + if (value.IsUint()) { + uValue = value.GetUint(); + isUValue = true; + } + else if (value.IsUint64()) { + uValue = value.GetUint64(); + isUValue = true; + } +#else + isUValue = value.is_number_unsigned(); + if (isUValue) { + uValue = value.get(); + } +#endif + if (!isUValue) { + if (required) { + if (err) { + (*err) += + "'" + property + "' property is not a positive integer.\n"; + } + } + return false; + } + + if (ret) { + (*ret) = uValue; + } + + return true; +} + +static bool ParseNumberProperty(double* ret, std::string* err, const json& o, + const std::string& property, + const bool required, + const std::string& parent_node = "") +{ + json_const_iterator it; + + if (!FindMember(o, property.c_str(), it)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is missing"; + if (!parent_node.empty()) { + (*err) += " in " + parent_node; + } + (*err) += ".\n"; + } + } + return false; + } + + double numberValue; + bool isNumber = GetNumber(GetValue(it), numberValue); + + if (!isNumber) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is not a number type.\n"; + } + } + return false; + } + + if (ret) { + (*ret) = numberValue; + } + + return true; +} + +static bool ParseNumberArrayProperty(std::vector* ret, std::string* err, + const json& o, const std::string& property, + bool required, + const std::string& parent_node = "") +{ + json_const_iterator it; + if (!FindMember(o, property.c_str(), it)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is missing"; + if (!parent_node.empty()) { + (*err) += " in " + parent_node; + } + (*err) += ".\n"; + } + } + return false; + } + + if (!IsArray(GetValue(it))) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is not an array"; + if (!parent_node.empty()) { + (*err) += " in " + parent_node; + } + (*err) += ".\n"; + } + } + return false; + } + + ret->clear(); + auto end = ArrayEnd(GetValue(it)); + for (auto i = ArrayBegin(GetValue(it)); i != end; ++i) { + double numberValue; + const bool isNumber = GetNumber(*i, numberValue); + if (!isNumber) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is not a number.\n"; + if (!parent_node.empty()) { + (*err) += " in " + parent_node; + } + (*err) += ".\n"; + } + } + return false; + } + ret->push_back(numberValue); + } + + return true; +} + +static bool ParseIntegerArrayProperty(std::vector* ret, std::string* err, + const json& o, + const std::string& property, + bool required, + const std::string& parent_node = "") +{ + json_const_iterator it; + if (!FindMember(o, property.c_str(), it)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is missing"; + if (!parent_node.empty()) { + (*err) += " in " + parent_node; + } + (*err) += ".\n"; + } + } + return false; + } + + if (!IsArray(GetValue(it))) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is not an array"; + if (!parent_node.empty()) { + (*err) += " in " + parent_node; + } + (*err) += ".\n"; + } + } + return false; + } + + ret->clear(); + auto end = ArrayEnd(GetValue(it)); + for (auto i = ArrayBegin(GetValue(it)); i != end; ++i) { + int numberValue; + bool isNumber = GetInt(*i, numberValue); + if (!isNumber) { + if (required) { + if (err) { + (*err) += + "'" + property + "' property is not an integer type.\n"; + if (!parent_node.empty()) { + (*err) += " in " + parent_node; + } + (*err) += ".\n"; + } + } + return false; + } + ret->push_back(numberValue); + } + + return true; +} + +static bool ParseStringProperty(std::string* ret, std::string* err, + const json& o, const std::string& property, + bool required, + const std::string& parent_node = std::string()) +{ + json_const_iterator it; + if (!FindMember(o, property.c_str(), it)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is missing"; + if (parent_node.empty()) { + (*err) += ".\n"; + } + else { + (*err) += " in `" + parent_node + "'.\n"; + } + } + } + return false; + } + + std::string strValue; + if (!GetString(GetValue(it), strValue)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is not a string type.\n"; + } + } + return false; + } + + if (ret) { + (*ret) = std::move(strValue); + } + + return true; +} + +static bool ParseStringIntegerProperty(std::map* ret, + std::string* err, const json& o, + const std::string& property, + bool required, + const std::string& parent = "") +{ + json_const_iterator it; + if (!FindMember(o, property.c_str(), it)) { + if (required) { + if (err) { + if (!parent.empty()) { + (*err) += "'" + property + "' property is missing in " + + parent + ".\n"; + } + else { + (*err) += "'" + property + "' property is missing.\n"; + } + } + } + return false; + } + + const json& dict = GetValue(it); + + // Make sure we are dealing with an object / dictionary. + if (!IsObject(dict)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is not an object.\n"; + } + } + return false; + } + + ret->clear(); + + json_const_iterator dictIt(ObjectBegin(dict)); + json_const_iterator dictItEnd(ObjectEnd(dict)); + + for (; dictIt != dictItEnd; ++dictIt) { + int intVal; + if (!GetInt(GetValue(dictIt), intVal)) { + if (required) { + if (err) { + (*err) += + "'" + property + "' value is not an integer type.\n"; + } + } + return false; + } + + // Insert into the list. + (*ret)[GetKey(dictIt)] = intVal; + } + return true; +} + +static bool ParseJSONProperty(std::map* ret, + std::string* err, const json& o, + const std::string& property, bool required) +{ + json_const_iterator it; + if (!FindMember(o, property.c_str(), it)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is missing. \n'"; + } + } + return false; + } + + const json& obj = GetValue(it); + + if (!IsObject(obj)) { + if (required) { + if (err) { + (*err) += "'" + property + "' property is not a JSON object.\n"; + } + } + return false; + } + + ret->clear(); + + json_const_iterator it2(ObjectBegin(obj)); + json_const_iterator itEnd(ObjectEnd(obj)); + for (; it2 != itEnd; ++it2) { + double numVal; + if (GetNumber(GetValue(it2), numVal)) + ret->emplace(std::string(GetKey(it2)), numVal); + } + + return true; +} + +static bool ParseParameterProperty(Parameter* param, std::string* err, + const json& o, const std::string& prop, + bool required) +{ + // A parameter value can either be a string or an array of either a boolean + // or a number. Booleans of any kind aren't supported here. Granted, it + // complicates the Parameter structure and breaks it semantically in the + // sense that the client probably works off the assumption that if the + // string is empty the vector is used, etc. Would a tagged union work? + if (ParseStringProperty(¶m->string_value, err, o, prop, false)) { + // Found string property. + return true; + } + else if (ParseNumberArrayProperty(¶m->number_array, err, o, prop, + false)) { + // Found a number array. + return true; + } + else if (ParseNumberProperty(¶m->number_value, err, o, prop, false)) { + param->has_number_value = true; + return true; + } + else if (ParseJSONProperty(¶m->json_double_value, err, o, prop, + false)) { + return true; + } + else if (ParseBooleanProperty(¶m->bool_value, err, o, prop, false)) { + return true; + } + else { + if (required) { + if (err) { + (*err) += + "parameter must be a string or number / number array.\n"; + } + } + return false; + } +} + +static bool ParseExtensionsProperty(ExtensionMap* ret, std::string* err, + const json& o) +{ + (void)err; + + json_const_iterator it; + if (!FindMember(o, "extensions", it)) { + return false; + } + + auto& obj = GetValue(it); + if (!IsObject(obj)) { + return false; + } + ExtensionMap extensions; + json_const_iterator extIt = ObjectBegin(obj); // it.value().begin(); + json_const_iterator extEnd = ObjectEnd(obj); + for (; extIt != extEnd; ++extIt) { + auto& itObj = GetValue(extIt); + if (!IsObject(itObj)) + continue; + std::string key(GetKey(extIt)); + if (!ParseJsonAsValue(&extensions[key], itObj)) { + if (!key.empty()) { + // create empty object so that an extension object is still of + // type object + extensions[key] = Value{Value::Object{}}; + } + } + } + if (ret) { + (*ret) = std::move(extensions); + } + return true; +} + +static bool ParseAsset(Asset* asset, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions) +{ + ParseStringProperty(&asset->version, err, o, "version", true, "Asset"); + ParseStringProperty(&asset->generator, err, o, "generator", false, "Asset"); + ParseStringProperty(&asset->minVersion, err, o, "minVersion", false, + "Asset"); + ParseStringProperty(&asset->copyright, err, o, "copyright", false, "Asset"); + + ParseExtensionsProperty(&asset->extensions, err, o); + + // Unity exporter version is added as extra here + ParseExtrasProperty(&(asset->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + asset->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + asset->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool ParseImage(Image* image, const int image_idx, std::string* err, + std::string* warn, const json& o, + bool store_original_json_for_extras_and_extensions, + const std::string& basedir, FsCallbacks* fs, + LoadImageDataFunction* LoadImageData = nullptr, + void* load_image_user_data = nullptr) +{ + // A glTF image must either reference a bufferView or an image uri + + // schema says oneOf [`bufferView`, `uri`] + // TODO(syoyo): Check the type of each parameters. + json_const_iterator it; + bool hasBufferView = FindMember(o, "bufferView", it); + bool hasURI = FindMember(o, "uri", it); + + ParseStringProperty(&image->name, err, o, "name", false); + + if (hasBufferView && hasURI) { + // Should not both defined. + if (err) { + (*err) += "Only one of `bufferView` or `uri` should be defined, " + "but both are " + "defined for image[" + + std::to_string(image_idx) + "] name = \"" + image->name + + "\"\n"; + } + return false; + } + + if (!hasBufferView && !hasURI) { + if (err) { + (*err) += + "Neither required `bufferView` nor `uri` defined for image[" + + std::to_string(image_idx) + "] name = \"" + image->name + + "\"\n"; + } + return false; + } + + ParseExtensionsProperty(&image->extensions, err, o); + ParseExtrasProperty(&image->extras, o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator eit; + if (FindMember(o, "extensions", eit)) { + image->extensions_json_string = JsonToString(GetValue(eit)); + } + } + { + json_const_iterator eit; + if (FindMember(o, "extras", eit)) { + image->extras_json_string = JsonToString(GetValue(eit)); + } + } + } + + if (hasBufferView) { + int bufferView = -1; + if (!ParseIntegerProperty(&bufferView, err, o, "bufferView", true)) { + if (err) { + (*err) += "Failed to parse `bufferView` for image[" + + std::to_string(image_idx) + "] name = \"" + + image->name + "\"\n"; + } + return false; + } + + std::string mime_type; + ParseStringProperty(&mime_type, err, o, "mimeType", false); + + int width = 0; + ParseIntegerProperty(&width, err, o, "width", false); + + int height = 0; + ParseIntegerProperty(&height, err, o, "height", false); + + // Just only save some information here. Loading actual image data from + // bufferView is done after this `ParseImage` function. + image->bufferView = bufferView; + image->mimeType = mime_type; + image->width = width; + image->height = height; + + return true; + } + + // Parse URI & Load image data. + + std::string uri; + std::string tmp_err; + if (!ParseStringProperty(&uri, &tmp_err, o, "uri", true)) { + if (err) { + (*err) += "Failed to parse `uri` for image[" + + std::to_string(image_idx) + "] name = \"" + image->name + + "\".\n"; + } + return false; + } + + std::vector img; + + if (IsDataURI(uri)) { + if (!DecodeDataURI(&img, image->mimeType, uri, 0, false)) { + if (err) { + (*err) += "Failed to decode 'uri' for image[" + + std::to_string(image_idx) + "] name = [" + + image->name + "]\n"; + } + return false; + } + } + else { + // Assume external file + // Keep texture path (for textures that cannot be decoded) + image->uri = uri; +#ifdef TINYGLTF_NO_EXTERNAL_IMAGE + return true; +#else + std::string decoded_uri = dlib::urldecode(uri); + if (!LoadExternalFile(&img, err, warn, decoded_uri, basedir, + /* required */ false, /* required bytes */ 0, + /* checksize */ false, fs)) { + if (warn) { + (*warn) += "Failed to load external 'uri' for image[" + + std::to_string(image_idx) + "] name = [" + + image->name + "]\n"; + } + // If the image cannot be loaded, keep uri as image->uri. + return true; + } + + if (img.empty()) { + if (warn) { + (*warn) += "Image data is empty for image[" + + std::to_string(image_idx) + "] name = [" + + image->name + "] \n"; + } + return false; + } +#endif + } + + if (*LoadImageData == nullptr) { + if (err) { + (*err) += "No LoadImageData callback specified.\n"; + } + return false; + } + return (*LoadImageData)(image, image_idx, err, warn, 0, 0, &img.at(0), + static_cast(img.size()), load_image_user_data); +} + +static bool ParseTexture(Texture* texture, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions, + const std::string& basedir) +{ + (void)basedir; + int sampler = -1; + int source = -1; + ParseIntegerProperty(&sampler, err, o, "sampler", false); + + ParseIntegerProperty(&source, err, o, "source", false); + + texture->sampler = sampler; + texture->source = source; + + ParseExtensionsProperty(&texture->extensions, err, o); + ParseExtrasProperty(&texture->extras, o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + texture->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + texture->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + ParseStringProperty(&texture->name, err, o, "name", false); + + return true; +} + +static bool ParseTextureInfo(TextureInfo* texinfo, std::string* err, + const json& o, + bool store_original_json_for_extras_and_extensions) +{ + if (texinfo == nullptr) { + return false; + } + + if (!ParseIntegerProperty(&texinfo->index, err, o, "index", + /* required */ true, "TextureInfo")) { + return false; + } + + ParseIntegerProperty(&texinfo->texCoord, err, o, "texCoord", false); + + ParseExtensionsProperty(&texinfo->extensions, err, o); + ParseExtrasProperty(&texinfo->extras, o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + texinfo->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + texinfo->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool +ParseNormalTextureInfo(NormalTextureInfo* texinfo, std::string* err, + const json& o, + bool store_original_json_for_extras_and_extensions) +{ + if (texinfo == nullptr) { + return false; + } + + if (!ParseIntegerProperty(&texinfo->index, err, o, "index", + /* required */ true, "NormalTextureInfo")) { + return false; + } + + ParseIntegerProperty(&texinfo->texCoord, err, o, "texCoord", false); + ParseNumberProperty(&texinfo->scale, err, o, "scale", false); + + ParseExtensionsProperty(&texinfo->extensions, err, o); + ParseExtrasProperty(&texinfo->extras, o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + texinfo->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + texinfo->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool +ParseOcclusionTextureInfo(OcclusionTextureInfo* texinfo, std::string* err, + const json& o, + bool store_original_json_for_extras_and_extensions) +{ + if (texinfo == nullptr) { + return false; + } + + if (!ParseIntegerProperty(&texinfo->index, err, o, "index", + /* required */ true, "NormalTextureInfo")) { + return false; + } + + ParseIntegerProperty(&texinfo->texCoord, err, o, "texCoord", false); + ParseNumberProperty(&texinfo->strength, err, o, "strength", false); + + ParseExtensionsProperty(&texinfo->extensions, err, o); + ParseExtrasProperty(&texinfo->extras, o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + texinfo->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + texinfo->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool ParseBuffer(Buffer* buffer, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions, + FsCallbacks* fs, const std::string& basedir, + bool is_binary = false, + const unsigned char* bin_data = nullptr, + size_t bin_size = 0) +{ + size_t byteLength; + if (!ParseUnsignedProperty(&byteLength, err, o, "byteLength", true, + "Buffer")) { + return false; + } + + // In glTF 2.0, uri is not mandatory anymore + buffer->uri.clear(); + ParseStringProperty(&buffer->uri, err, o, "uri", false, "Buffer"); + + // having an empty uri for a non embedded image should not be valid + if (!is_binary && buffer->uri.empty()) { + if (err) { + (*err) += "'uri' is missing from non binary glTF file buffer.\n"; + } + } + + json_const_iterator type; + if (FindMember(o, "type", type)) { + std::string typeStr; + if (GetString(GetValue(type), typeStr)) { + if (typeStr.compare("arraybuffer") == 0) { + // buffer.type = "arraybuffer"; + } + } + } + + if (is_binary) { + // Still binary glTF accepts external dataURI. + if (!buffer->uri.empty()) { + // First try embedded data URI. + if (IsDataURI(buffer->uri)) { + std::string mime_type; + if (!DecodeDataURI(&buffer->data, mime_type, buffer->uri, + byteLength, true)) { + if (err) { + (*err) += "Failed to decode 'uri' : " + buffer->uri + + " in Buffer\n"; + } + return false; + } + } + else { + // External .bin file. + std::string decoded_uri = dlib::urldecode(buffer->uri); + if (!LoadExternalFile(&buffer->data, err, /* warn */ nullptr, + decoded_uri, basedir, /* required */ true, + byteLength, /* checkSize */ true, fs)) { + return false; + } + } + } + else { + // load data from (embedded) binary data + + if ((bin_size == 0) || (bin_data == nullptr)) { + if (err) { + (*err) += "Invalid binary data in `Buffer', or GLB with " + "empty BIN chunk.\n"; + } + return false; + } + + if (byteLength > bin_size) { + if (err) { + std::stringstream ss; + ss << "Invalid `byteLength'. Must be equal or less than " + "binary size: " + "`byteLength' = " + << byteLength << ", binary size = " << bin_size + << std::endl; + (*err) += ss.str(); + } + return false; + } + + // Read buffer data + buffer->data.resize(static_cast(byteLength)); + memcpy(&(buffer->data.at(0)), bin_data, + static_cast(byteLength)); + } + } + else { + if (IsDataURI(buffer->uri)) { + std::string mime_type; + if (!DecodeDataURI(&buffer->data, mime_type, buffer->uri, + byteLength, true)) { + if (err) { + (*err) += "Failed to decode 'uri' : " + buffer->uri + + " in Buffer\n"; + } + return false; + } + } + else { + // Assume external .bin file. + std::string decoded_uri = dlib::urldecode(buffer->uri); + if (!LoadExternalFile(&buffer->data, err, /* warn */ nullptr, + decoded_uri, basedir, /* required */ true, + byteLength, + /* checkSize */ true, fs)) { + return false; + } + } + } + + ParseStringProperty(&buffer->name, err, o, "name", false); + + ParseExtensionsProperty(&buffer->extensions, err, o); + ParseExtrasProperty(&buffer->extras, o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + buffer->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + buffer->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool ParseBufferView(BufferView* bufferView, std::string* err, + const json& o, + bool store_original_json_for_extras_and_extensions) +{ + int buffer = -1; + if (!ParseIntegerProperty(&buffer, err, o, "buffer", true, "BufferView")) { + return false; + } + + size_t byteOffset = 0; + ParseUnsignedProperty(&byteOffset, err, o, "byteOffset", false); + + size_t byteLength = 1; + if (!ParseUnsignedProperty(&byteLength, err, o, "byteLength", true, + "BufferView")) { + return false; + } + + size_t byteStride = 0; + if (!ParseUnsignedProperty(&byteStride, err, o, "byteStride", false)) { + // Spec says: When byteStride of referenced bufferView is not defined, + // it means that accessor elements are tightly packed, i.e., effective + // stride equals the size of the element. We cannot determine the actual + // byteStride until Accessor are parsed, thus set 0(= tightly packed) + // here(as done in OpenGL's VertexAttribPoiner) + byteStride = 0; + } + + if ((byteStride > 252) || ((byteStride % 4) != 0)) { + if (err) { + std::stringstream ss; + ss << "Invalid `byteStride' value. `byteStride' must be the " + "multiple of " + "4 : " + << byteStride << std::endl; + + (*err) += ss.str(); + } + return false; + } + + int target = 0; + ParseIntegerProperty(&target, err, o, "target", false); + if ((target == TINYGLTF_TARGET_ARRAY_BUFFER) || + (target == TINYGLTF_TARGET_ELEMENT_ARRAY_BUFFER)) { + // OK + } + else { + target = 0; + } + bufferView->target = target; + + ParseStringProperty(&bufferView->name, err, o, "name", false); + + ParseExtensionsProperty(&bufferView->extensions, err, o); + ParseExtrasProperty(&bufferView->extras, o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + bufferView->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + bufferView->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + bufferView->buffer = buffer; + bufferView->byteOffset = byteOffset; + bufferView->byteLength = byteLength; + bufferView->byteStride = byteStride; + return true; +} + +static bool ParseSparseAccessor(Accessor* accessor, std::string* err, + const json& o) +{ + accessor->sparse.isSparse = true; + + int count = 0; + if (!ParseIntegerProperty(&count, err, o, "count", true, + "SparseAccessor")) { + return false; + } + + json_const_iterator indices_iterator; + json_const_iterator values_iterator; + if (!FindMember(o, "indices", indices_iterator)) { + (*err) = "the sparse object of this accessor doesn't have indices"; + return false; + } + + if (!FindMember(o, "values", values_iterator)) { + (*err) = "the sparse object of this accessor doesn't have values"; + return false; + } + + const json& indices_obj = GetValue(indices_iterator); + const json& values_obj = GetValue(values_iterator); + + int indices_buffer_view = 0, indices_byte_offset = 0, component_type = 0; + if (!ParseIntegerProperty(&indices_buffer_view, err, indices_obj, + "bufferView", true, "SparseAccessor")) { + return false; + } + ParseIntegerProperty(&indices_byte_offset, err, indices_obj, "byteOffset", + false); + if (!ParseIntegerProperty(&component_type, err, indices_obj, + "componentType", true, "SparseAccessor")) { + return false; + } + + int values_buffer_view = 0, values_byte_offset = 0; + if (!ParseIntegerProperty(&values_buffer_view, err, values_obj, + "bufferView", true, "SparseAccessor")) { + return false; + } + ParseIntegerProperty(&values_byte_offset, err, values_obj, "byteOffset", + false); + + accessor->sparse.count = count; + accessor->sparse.indices.bufferView = indices_buffer_view; + accessor->sparse.indices.byteOffset = indices_byte_offset; + accessor->sparse.indices.componentType = component_type; + accessor->sparse.values.bufferView = values_buffer_view; + accessor->sparse.values.byteOffset = values_byte_offset; + + return true; +} + +static bool ParseAccessor(Accessor* accessor, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions) +{ + int bufferView = -1; + ParseIntegerProperty(&bufferView, err, o, "bufferView", false, "Accessor"); + + size_t byteOffset = 0; + ParseUnsignedProperty(&byteOffset, err, o, "byteOffset", false, "Accessor"); + + bool normalized = false; + ParseBooleanProperty(&normalized, err, o, "normalized", false, "Accessor"); + + size_t componentType = 0; + if (!ParseUnsignedProperty(&componentType, err, o, "componentType", true, + "Accessor")) { + return false; + } + + size_t count = 0; + if (!ParseUnsignedProperty(&count, err, o, "count", true, "Accessor")) { + return false; + } + + std::string type; + if (!ParseStringProperty(&type, err, o, "type", true, "Accessor")) { + return false; + } + + if (type.compare("SCALAR") == 0) { + accessor->type = TINYGLTF_TYPE_SCALAR; + } + else if (type.compare("VEC2") == 0) { + accessor->type = TINYGLTF_TYPE_VEC2; + } + else if (type.compare("VEC3") == 0) { + accessor->type = TINYGLTF_TYPE_VEC3; + } + else if (type.compare("VEC4") == 0) { + accessor->type = TINYGLTF_TYPE_VEC4; + } + else if (type.compare("MAT2") == 0) { + accessor->type = TINYGLTF_TYPE_MAT2; + } + else if (type.compare("MAT3") == 0) { + accessor->type = TINYGLTF_TYPE_MAT3; + } + else if (type.compare("MAT4") == 0) { + accessor->type = TINYGLTF_TYPE_MAT4; + } + else { + std::stringstream ss; + ss << "Unsupported `type` for accessor object. Got \"" << type + << "\"\n"; + if (err) { + (*err) += ss.str(); + } + return false; + } + + ParseStringProperty(&accessor->name, err, o, "name", false); + + accessor->minValues.clear(); + accessor->maxValues.clear(); + ParseNumberArrayProperty(&accessor->minValues, err, o, "min", false, + "Accessor"); + + ParseNumberArrayProperty(&accessor->maxValues, err, o, "max", false, + "Accessor"); + + accessor->count = count; + accessor->bufferView = bufferView; + accessor->byteOffset = byteOffset; + accessor->normalized = normalized; + { + if (componentType >= TINYGLTF_COMPONENT_TYPE_BYTE && + componentType <= TINYGLTF_COMPONENT_TYPE_DOUBLE) { + // OK + accessor->componentType = int(componentType); + } + else { + std::stringstream ss; + ss << "Invalid `componentType` in accessor. Got " << componentType + << "\n"; + if (err) { + (*err) += ss.str(); + } + return false; + } + } + + ParseExtensionsProperty(&(accessor->extensions), err, o); + ParseExtrasProperty(&(accessor->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + accessor->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + accessor->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + // check if accessor has a "sparse" object: + json_const_iterator iterator; + if (FindMember(o, "sparse", iterator)) { + // here this accessor has a "sparse" subobject + return ParseSparseAccessor(accessor, err, GetValue(iterator)); + } + + return true; +} + +#ifdef TINYGLTF_ENABLE_DRACO + +static void DecodeIndexBuffer(draco::Mesh* mesh, size_t componentSize, + std::vector& outBuffer) +{ + if (componentSize == 4) { + assert(sizeof(mesh->face(draco::FaceIndex(0))[0]) == componentSize); + memcpy(outBuffer.data(), &mesh->face(draco::FaceIndex(0))[0], + outBuffer.size()); + } + else { + size_t faceStride = componentSize * 3; + for (draco::FaceIndex f(0); f < mesh->num_faces(); ++f) { + const draco::Mesh::Face& face = mesh->face(f); + if (componentSize == 2) { + uint16_t indices[3] = {(uint16_t)face[0].value(), + (uint16_t)face[1].value(), + (uint16_t)face[2].value()}; + memcpy(outBuffer.data() + f.value() * faceStride, &indices[0], + faceStride); + } + else { + uint8_t indices[3] = {(uint8_t)face[0].value(), + (uint8_t)face[1].value(), + (uint8_t)face[2].value()}; + memcpy(outBuffer.data() + f.value() * faceStride, &indices[0], + faceStride); + } + } + } +} + +template +static bool GetAttributeForAllPoints(draco::Mesh* mesh, + const draco::PointAttribute* pAttribute, + std::vector& outBuffer) +{ + size_t byteOffset = 0; + T values[4] = {0, 0, 0, 0}; + for (draco::PointIndex i(0); i < mesh->num_points(); ++i) { + const draco::AttributeValueIndex val_index = + pAttribute->mapped_index(i); + if (!pAttribute->ConvertValue(val_index, + pAttribute->num_components(), values)) + return false; + + memcpy(outBuffer.data() + byteOffset, &values[0], + sizeof(T) * pAttribute->num_components()); + byteOffset += sizeof(T) * pAttribute->num_components(); + } + + return true; +} + +static bool GetAttributeForAllPoints(uint32_t componentType, draco::Mesh* mesh, + const draco::PointAttribute* pAttribute, + std::vector& outBuffer) +{ + bool decodeResult = false; + switch (componentType) { + case TINYGLTF_COMPONENT_TYPE_UNSIGNED_BYTE: + decodeResult = + GetAttributeForAllPoints(mesh, pAttribute, outBuffer); + break; + case TINYGLTF_COMPONENT_TYPE_BYTE: + decodeResult = + GetAttributeForAllPoints(mesh, pAttribute, outBuffer); + break; + case TINYGLTF_COMPONENT_TYPE_UNSIGNED_SHORT: + decodeResult = + GetAttributeForAllPoints(mesh, pAttribute, outBuffer); + break; + case TINYGLTF_COMPONENT_TYPE_SHORT: + decodeResult = + GetAttributeForAllPoints(mesh, pAttribute, outBuffer); + break; + case TINYGLTF_COMPONENT_TYPE_INT: + decodeResult = + GetAttributeForAllPoints(mesh, pAttribute, outBuffer); + break; + case TINYGLTF_COMPONENT_TYPE_UNSIGNED_INT: + decodeResult = + GetAttributeForAllPoints(mesh, pAttribute, outBuffer); + break; + case TINYGLTF_COMPONENT_TYPE_FLOAT: + decodeResult = + GetAttributeForAllPoints(mesh, pAttribute, outBuffer); + break; + case TINYGLTF_COMPONENT_TYPE_DOUBLE: + decodeResult = + GetAttributeForAllPoints(mesh, pAttribute, outBuffer); + break; + default: + return false; + } + + return decodeResult; +} + +static bool ParseDracoExtension(Primitive* primitive, Model* model, + std::string* err, + const Value& dracoExtensionValue) +{ + (void)err; + auto bufferViewValue = dracoExtensionValue.Get("bufferView"); + if (!bufferViewValue.IsInt()) + return false; + auto attributesValue = dracoExtensionValue.Get("attributes"); + if (!attributesValue.IsObject()) + return false; + + auto attributesObject = attributesValue.Get(); + int bufferView = bufferViewValue.Get(); + + BufferView& view = model->bufferViews[bufferView]; + Buffer& buffer = model->buffers[view.buffer]; + // BufferView has already been decoded + if (view.dracoDecoded) + return true; + view.dracoDecoded = true; + + const char* bufferViewData = + reinterpret_cast(buffer.data.data() + view.byteOffset); + size_t bufferViewSize = view.byteLength; + + // decode draco + draco::DecoderBuffer decoderBuffer; + decoderBuffer.Init(bufferViewData, bufferViewSize); + draco::Decoder decoder; + auto decodeResult = decoder.DecodeMeshFromBuffer(&decoderBuffer); + if (!decodeResult.ok()) { + return false; + } + const std::unique_ptr& mesh = decodeResult.value(); + + // create new bufferView for indices + if (primitive->indices >= 0) { + int32_t componentSize = GetComponentSizeInBytes( + model->accessors[primitive->indices].componentType); + Buffer decodedIndexBuffer; + decodedIndexBuffer.data.resize(mesh->num_faces() * 3 * componentSize); + + DecodeIndexBuffer(mesh.get(), componentSize, decodedIndexBuffer.data); + + model->buffers.emplace_back(std::move(decodedIndexBuffer)); + + BufferView decodedIndexBufferView; + decodedIndexBufferView.buffer = int(model->buffers.size() - 1); + decodedIndexBufferView.byteLength = + int(mesh->num_faces() * 3 * componentSize); + decodedIndexBufferView.byteOffset = 0; + decodedIndexBufferView.byteStride = 0; + decodedIndexBufferView.target = TINYGLTF_TARGET_ARRAY_BUFFER; + model->bufferViews.emplace_back(std::move(decodedIndexBufferView)); + + model->accessors[primitive->indices].bufferView = + int(model->bufferViews.size() - 1); + model->accessors[primitive->indices].count = int(mesh->num_faces() * 3); + } + + for (const auto& attribute : attributesObject) { + if (!attribute.second.IsInt()) + return false; + auto primitiveAttribute = primitive->attributes.find(attribute.first); + if (primitiveAttribute == primitive->attributes.end()) + return false; + + int dracoAttributeIndex = attribute.second.Get(); + const auto pAttribute = + mesh->GetAttributeByUniqueId(dracoAttributeIndex); + const auto componentType = + model->accessors[primitiveAttribute->second].componentType; + + // Create a new buffer for this decoded buffer + Buffer decodedBuffer; + size_t bufferSize = mesh->num_points() * pAttribute->num_components() * + GetComponentSizeInBytes(componentType); + decodedBuffer.data.resize(bufferSize); + + if (!GetAttributeForAllPoints(componentType, mesh.get(), pAttribute, + decodedBuffer.data)) + return false; + + model->buffers.emplace_back(std::move(decodedBuffer)); + + BufferView decodedBufferView; + decodedBufferView.buffer = int(model->buffers.size() - 1); + decodedBufferView.byteLength = bufferSize; + decodedBufferView.byteOffset = pAttribute->byte_offset(); + decodedBufferView.byteStride = pAttribute->byte_stride(); + decodedBufferView.target = primitive->indices >= 0 + ? TINYGLTF_TARGET_ELEMENT_ARRAY_BUFFER + : TINYGLTF_TARGET_ARRAY_BUFFER; + model->bufferViews.emplace_back(std::move(decodedBufferView)); + + model->accessors[primitiveAttribute->second].bufferView = + int(model->bufferViews.size() - 1); + model->accessors[primitiveAttribute->second].count = + int(mesh->num_points()); + } + + return true; +} +#endif + +static bool ParsePrimitive(Primitive* primitive, Model* model, std::string* err, + const json& o, + bool store_original_json_for_extras_and_extensions) +{ + int material = -1; + ParseIntegerProperty(&material, err, o, "material", false); + primitive->material = material; + + int mode = TINYGLTF_MODE_TRIANGLES; + ParseIntegerProperty(&mode, err, o, "mode", false); + primitive->mode = mode; // Why only triangles were supported ? + + int indices = -1; + ParseIntegerProperty(&indices, err, o, "indices", false); + primitive->indices = indices; + if (!ParseStringIntegerProperty(&primitive->attributes, err, o, + "attributes", true, "Primitive")) { + return false; + } + + // Look for morph targets + json_const_iterator targetsObject; + if (FindMember(o, "targets", targetsObject) && + IsArray(GetValue(targetsObject))) { + auto targetsObjectEnd = ArrayEnd(GetValue(targetsObject)); + for (json_const_array_iterator i = ArrayBegin(GetValue(targetsObject)); + i != targetsObjectEnd; ++i) { + std::map targetAttribues; + + const json& dict = *i; + if (IsObject(dict)) { + json_const_iterator dictIt(ObjectBegin(dict)); + json_const_iterator dictItEnd(ObjectEnd(dict)); + + for (; dictIt != dictItEnd; ++dictIt) { + int iVal; + if (GetInt(GetValue(dictIt), iVal)) + targetAttribues[GetKey(dictIt)] = iVal; + } + primitive->targets.emplace_back(std::move(targetAttribues)); + } + } + } + + ParseExtrasProperty(&(primitive->extras), o); + ParseExtensionsProperty(&primitive->extensions, err, o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + primitive->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + primitive->extras_json_string = JsonToString(GetValue(it)); + } + } + } + +#ifdef TINYGLTF_ENABLE_DRACO + auto dracoExtension = + primitive->extensions.find("KHR_draco_mesh_compression"); + if (dracoExtension != primitive->extensions.end()) { + ParseDracoExtension(primitive, model, err, dracoExtension->second); + } +#else + (void)model; +#endif + + return true; +} + +static bool ParseMesh(Mesh* mesh, Model* model, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions) +{ + ParseStringProperty(&mesh->name, err, o, "name", false); + + mesh->primitives.clear(); + json_const_iterator primObject; + if (FindMember(o, "primitives", primObject) && + IsArray(GetValue(primObject))) { + json_const_array_iterator primEnd = ArrayEnd(GetValue(primObject)); + for (json_const_array_iterator i = ArrayBegin(GetValue(primObject)); + i != primEnd; ++i) { + Primitive primitive; + if (ParsePrimitive(&primitive, model, err, *i, + store_original_json_for_extras_and_extensions)) { + // Only add the primitive if the parsing succeeds. + mesh->primitives.emplace_back(std::move(primitive)); + } + } + } + + // Should probably check if has targets and if dimensions fit + ParseNumberArrayProperty(&mesh->weights, err, o, "weights", false); + + ParseExtensionsProperty(&mesh->extensions, err, o); + ParseExtrasProperty(&(mesh->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + mesh->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + mesh->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool ParseNode(Node* node, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions) +{ + ParseStringProperty(&node->name, err, o, "name", false); + + int skin = -1; + ParseIntegerProperty(&skin, err, o, "skin", false); + node->skin = skin; + + // Matrix and T/R/S are exclusive + if (!ParseNumberArrayProperty(&node->matrix, err, o, "matrix", false)) { + ParseNumberArrayProperty(&node->rotation, err, o, "rotation", false); + ParseNumberArrayProperty(&node->scale, err, o, "scale", false); + ParseNumberArrayProperty(&node->translation, err, o, "translation", + false); + } + + int camera = -1; + ParseIntegerProperty(&camera, err, o, "camera", false); + node->camera = camera; + + int mesh = -1; + ParseIntegerProperty(&mesh, err, o, "mesh", false); + node->mesh = mesh; + + node->children.clear(); + ParseIntegerArrayProperty(&node->children, err, o, "children", false); + + ParseNumberArrayProperty(&node->weights, err, o, "weights", false); + + ParseExtensionsProperty(&node->extensions, err, o); + ParseExtrasProperty(&(node->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + node->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + node->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool +ParsePbrMetallicRoughness(PbrMetallicRoughness* pbr, std::string* err, + const json& o, + bool store_original_json_for_extras_and_extensions) +{ + if (pbr == nullptr) { + return false; + } + + std::vector baseColorFactor; + if (ParseNumberArrayProperty(&baseColorFactor, err, o, "baseColorFactor", + /* required */ false)) { + if (baseColorFactor.size() != 4) { + if (err) { + (*err) += "Array length of `baseColorFactor` parameter in " + "pbrMetallicRoughness must be 4, but got " + + std::to_string(baseColorFactor.size()) + "\n"; + } + return false; + } + pbr->baseColorFactor = baseColorFactor; + } + + { + json_const_iterator it; + if (FindMember(o, "baseColorTexture", it)) { + ParseTextureInfo(&pbr->baseColorTexture, err, GetValue(it), + store_original_json_for_extras_and_extensions); + } + } + + { + json_const_iterator it; + if (FindMember(o, "metallicRoughnessTexture", it)) { + ParseTextureInfo(&pbr->metallicRoughnessTexture, err, GetValue(it), + store_original_json_for_extras_and_extensions); + } + } + + ParseNumberProperty(&pbr->metallicFactor, err, o, "metallicFactor", false); + ParseNumberProperty(&pbr->roughnessFactor, err, o, "roughnessFactor", + false); + + ParseExtensionsProperty(&pbr->extensions, err, o); + ParseExtrasProperty(&pbr->extras, o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + pbr->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + pbr->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool ParseMaterial(Material* material, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions) +{ + ParseStringProperty(&material->name, err, o, "name", /* required */ false); + + if (ParseNumberArrayProperty(&material->emissiveFactor, err, o, + "emissiveFactor", + /* required */ false)) { + if (material->emissiveFactor.size() != 3) { + if (err) { + (*err) += "Array length of `emissiveFactor` parameter in " + "material must be 3, but got " + + std::to_string(material->emissiveFactor.size()) + + "\n"; + } + return false; + } + } + else { + // fill with default values + material->emissiveFactor = {0.0, 0.0, 0.0}; + } + + ParseStringProperty(&material->alphaMode, err, o, "alphaMode", + /* required */ false); + ParseNumberProperty(&material->alphaCutoff, err, o, "alphaCutoff", + /* required */ false); + ParseBooleanProperty(&material->doubleSided, err, o, "doubleSided", + /* required */ false); + + { + json_const_iterator it; + if (FindMember(o, "pbrMetallicRoughness", it)) { + ParsePbrMetallicRoughness( + &material->pbrMetallicRoughness, err, GetValue(it), + store_original_json_for_extras_and_extensions); + } + } + + { + json_const_iterator it; + if (FindMember(o, "normalTexture", it)) { + ParseNormalTextureInfo( + &material->normalTexture, err, GetValue(it), + store_original_json_for_extras_and_extensions); + } + } + + { + json_const_iterator it; + if (FindMember(o, "occlusionTexture", it)) { + ParseOcclusionTextureInfo( + &material->occlusionTexture, err, GetValue(it), + store_original_json_for_extras_and_extensions); + } + } + + { + json_const_iterator it; + if (FindMember(o, "emissiveTexture", it)) { + ParseTextureInfo(&material->emissiveTexture, err, GetValue(it), + store_original_json_for_extras_and_extensions); + } + } + + // Old code path. For backward compatibility, we still store material values + // as Parameter. This will create duplicated information for + // example(pbrMetallicRoughness), but should be negligible in terms of + // memory consumption. + // TODO(syoyo): Remove in the next major release. + material->values.clear(); + material->additionalValues.clear(); + + json_const_iterator it(ObjectBegin(o)); + json_const_iterator itEnd(ObjectEnd(o)); + + for (; it != itEnd; ++it) { + std::string key(GetKey(it)); + if (key == "pbrMetallicRoughness") { + if (IsObject(GetValue(it))) { + const json& values_object = GetValue(it); + + json_const_iterator itVal(ObjectBegin(values_object)); + json_const_iterator itValEnd(ObjectEnd(values_object)); + + for (; itVal != itValEnd; ++itVal) { + Parameter param; + if (ParseParameterProperty(¶m, err, values_object, + GetKey(itVal), false)) { + material->values.emplace(GetKey(itVal), + std::move(param)); + } + } + } + } + else if (key == "extensions" || key == "extras") { + // done later, skip, otherwise poorly parsed contents will be saved + // in the parametermap and serialized again later + } + else { + Parameter param; + if (ParseParameterProperty(¶m, err, o, key, false)) { + // names of materials have already been parsed. Putting it in + // this map doesn't correctly reflect the glTF specification + if (key != "name") + material->additionalValues.emplace(std::move(key), + std::move(param)); + } + } + } + + material->extensions.clear(); + ParseExtensionsProperty(&material->extensions, err, o); + ParseExtrasProperty(&(material->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator eit; + if (FindMember(o, "extensions", eit)) { + material->extensions_json_string = JsonToString(GetValue(eit)); + } + } + { + json_const_iterator eit; + if (FindMember(o, "extras", eit)) { + material->extras_json_string = JsonToString(GetValue(eit)); + } + } + } + + return true; +} + +static bool +ParseAnimationChannel(AnimationChannel* channel, std::string* err, + const json& o, + bool store_original_json_for_extras_and_extensions) +{ + int samplerIndex = -1; + int targetIndex = -1; + if (!ParseIntegerProperty(&samplerIndex, err, o, "sampler", true, + "AnimationChannel")) { + if (err) { + (*err) += "`sampler` field is missing in animation channels\n"; + } + return false; + } + + json_const_iterator targetIt; + if (FindMember(o, "target", targetIt) && IsObject(GetValue(targetIt))) { + const json& target_object = GetValue(targetIt); + + if (!ParseIntegerProperty(&targetIndex, err, target_object, "node", + true)) { + if (err) { + (*err) += + "`node` field is missing in animation.channels.target\n"; + } + return false; + } + + if (!ParseStringProperty(&channel->target_path, err, target_object, + "path", true)) { + if (err) { + (*err) += + "`path` field is missing in animation.channels.target\n"; + } + return false; + } + ParseExtensionsProperty(&channel->target_extensions, err, + target_object); + if (store_original_json_for_extras_and_extensions) { + json_const_iterator it; + if (FindMember(target_object, "extensions", it)) { + channel->target_extensions_json_string = + JsonToString(GetValue(it)); + } + } + } + + channel->sampler = samplerIndex; + channel->target_node = targetIndex; + + ParseExtensionsProperty(&channel->extensions, err, o); + ParseExtrasProperty(&(channel->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + channel->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + channel->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool ParseAnimation(Animation* animation, std::string* err, + const json& o, + bool store_original_json_for_extras_and_extensions) +{ + { + json_const_iterator channelsIt; + if (FindMember(o, "channels", channelsIt) && + IsArray(GetValue(channelsIt))) { + json_const_array_iterator channelEnd = + ArrayEnd(GetValue(channelsIt)); + for (json_const_array_iterator i = ArrayBegin(GetValue(channelsIt)); + i != channelEnd; ++i) { + AnimationChannel channel; + if (ParseAnimationChannel( + &channel, err, *i, + store_original_json_for_extras_and_extensions)) { + // Only add the channel if the parsing succeeds. + animation->channels.emplace_back(std::move(channel)); + } + } + } + } + + { + json_const_iterator samplerIt; + if (FindMember(o, "samplers", samplerIt) && + IsArray(GetValue(samplerIt))) { + const json& sampler_array = GetValue(samplerIt); + + json_const_array_iterator it = ArrayBegin(sampler_array); + json_const_array_iterator itEnd = ArrayEnd(sampler_array); + + for (; it != itEnd; ++it) { + const json& s = *it; + + AnimationSampler sampler; + int inputIndex = -1; + int outputIndex = -1; + if (!ParseIntegerProperty(&inputIndex, err, s, "input", true)) { + if (err) { + (*err) += + "`input` field is missing in animation.sampler\n"; + } + return false; + } + ParseStringProperty(&sampler.interpolation, err, s, + "interpolation", false); + if (!ParseIntegerProperty(&outputIndex, err, s, "output", + true)) { + if (err) { + (*err) += + "`output` field is missing in animation.sampler\n"; + } + return false; + } + sampler.input = inputIndex; + sampler.output = outputIndex; + ParseExtensionsProperty(&(sampler.extensions), err, o); + ParseExtrasProperty(&(sampler.extras), s); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator eit; + if (FindMember(o, "extensions", eit)) { + sampler.extensions_json_string = + JsonToString(GetValue(eit)); + } + } + { + json_const_iterator eit; + if (FindMember(o, "extras", eit)) { + sampler.extras_json_string = + JsonToString(GetValue(eit)); + } + } + } + + animation->samplers.emplace_back(std::move(sampler)); + } + } + } + + ParseStringProperty(&animation->name, err, o, "name", false); + + ParseExtensionsProperty(&animation->extensions, err, o); + ParseExtrasProperty(&(animation->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + animation->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + animation->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool ParseSampler(Sampler* sampler, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions) +{ + ParseStringProperty(&sampler->name, err, o, "name", false); + + int minFilter = -1; + int magFilter = -1; + int wrapS = TINYGLTF_TEXTURE_WRAP_REPEAT; + int wrapT = TINYGLTF_TEXTURE_WRAP_REPEAT; + // int wrapR = TINYGLTF_TEXTURE_WRAP_REPEAT; + ParseIntegerProperty(&minFilter, err, o, "minFilter", false); + ParseIntegerProperty(&magFilter, err, o, "magFilter", false); + ParseIntegerProperty(&wrapS, err, o, "wrapS", false); + ParseIntegerProperty(&wrapT, err, o, "wrapT", false); + // ParseIntegerProperty(&wrapR, err, o, "wrapR", false); // tinygltf + // extension + + // TODO(syoyo): Check the value is allowed one. + // (e.g. we allow 9728(NEAREST), but don't allow 9727) + + sampler->minFilter = minFilter; + sampler->magFilter = magFilter; + sampler->wrapS = wrapS; + sampler->wrapT = wrapT; + // sampler->wrapR = wrapR; + + ParseExtensionsProperty(&(sampler->extensions), err, o); + ParseExtrasProperty(&(sampler->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + sampler->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + sampler->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool ParseSkin(Skin* skin, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions) +{ + ParseStringProperty(&skin->name, err, o, "name", false, "Skin"); + + std::vector joints; + if (!ParseIntegerArrayProperty(&joints, err, o, "joints", false, "Skin")) { + return false; + } + skin->joints = std::move(joints); + + int skeleton = -1; + ParseIntegerProperty(&skeleton, err, o, "skeleton", false, "Skin"); + skin->skeleton = skeleton; + + int invBind = -1; + ParseIntegerProperty(&invBind, err, o, "inverseBindMatrices", true, "Skin"); + skin->inverseBindMatrices = invBind; + + ParseExtensionsProperty(&(skin->extensions), err, o); + ParseExtrasProperty(&(skin->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + skin->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + skin->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool +ParsePerspectiveCamera(PerspectiveCamera* camera, std::string* err, + const json& o, + bool store_original_json_for_extras_and_extensions) +{ + double yfov = 0.0; + if (!ParseNumberProperty(&yfov, err, o, "yfov", true, + "OrthographicCamera")) { + return false; + } + + double znear = 0.0; + if (!ParseNumberProperty(&znear, err, o, "znear", true, + "PerspectiveCamera")) { + return false; + } + + double aspectRatio = 0.0; // = invalid + ParseNumberProperty(&aspectRatio, err, o, "aspectRatio", false, + "PerspectiveCamera"); + + double zfar = 0.0; // = invalid + ParseNumberProperty(&zfar, err, o, "zfar", false, "PerspectiveCamera"); + + camera->aspectRatio = aspectRatio; + camera->zfar = zfar; + camera->yfov = yfov; + camera->znear = znear; + + ParseExtensionsProperty(&camera->extensions, err, o); + ParseExtrasProperty(&(camera->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + camera->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + camera->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + // TODO(syoyo): Validate parameter values. + + return true; +} + +static bool ParseSpotLight(SpotLight* light, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions) +{ + ParseNumberProperty(&light->innerConeAngle, err, o, "innerConeAngle", + false); + ParseNumberProperty(&light->outerConeAngle, err, o, "outerConeAngle", + false); + + ParseExtensionsProperty(&light->extensions, err, o); + ParseExtrasProperty(&light->extras, o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + light->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + light->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + // TODO(syoyo): Validate parameter values. + + return true; +} + +static bool +ParseOrthographicCamera(OrthographicCamera* camera, std::string* err, + const json& o, + bool store_original_json_for_extras_and_extensions) +{ + double xmag = 0.0; + if (!ParseNumberProperty(&xmag, err, o, "xmag", true, + "OrthographicCamera")) { + return false; + } + + double ymag = 0.0; + if (!ParseNumberProperty(&ymag, err, o, "ymag", true, + "OrthographicCamera")) { + return false; + } + + double zfar = 0.0; + if (!ParseNumberProperty(&zfar, err, o, "zfar", true, + "OrthographicCamera")) { + return false; + } + + double znear = 0.0; + if (!ParseNumberProperty(&znear, err, o, "znear", true, + "OrthographicCamera")) { + return false; + } + + ParseExtensionsProperty(&camera->extensions, err, o); + ParseExtrasProperty(&(camera->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + camera->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + camera->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + camera->xmag = xmag; + camera->ymag = ymag; + camera->zfar = zfar; + camera->znear = znear; + + // TODO(syoyo): Validate parameter values. + + return true; +} + +static bool ParseCamera(Camera* camera, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions) +{ + if (!ParseStringProperty(&camera->type, err, o, "type", true, "Camera")) { + return false; + } + + if (camera->type.compare("orthographic") == 0) { + json_const_iterator orthoIt; + if (!FindMember(o, "orthographic", orthoIt)) { + if (err) { + std::stringstream ss; + ss << "Orthographic camera description not found." << std::endl; + (*err) += ss.str(); + } + return false; + } + + const json& v = GetValue(orthoIt); + if (!IsObject(v)) { + if (err) { + std::stringstream ss; + ss << "\"orthographic\" is not a JSON object." << std::endl; + (*err) += ss.str(); + } + return false; + } + + if (!ParseOrthographicCamera( + &camera->orthographic, err, v, + store_original_json_for_extras_and_extensions)) { + return false; + } + } + else if (camera->type.compare("perspective") == 0) { + json_const_iterator perspIt; + if (!FindMember(o, "perspective", perspIt)) { + if (err) { + std::stringstream ss; + ss << "Perspective camera description not found." << std::endl; + (*err) += ss.str(); + } + return false; + } + + const json& v = GetValue(perspIt); + if (!IsObject(v)) { + if (err) { + std::stringstream ss; + ss << "\"perspective\" is not a JSON object." << std::endl; + (*err) += ss.str(); + } + return false; + } + + if (!ParsePerspectiveCamera( + &camera->perspective, err, v, + store_original_json_for_extras_and_extensions)) { + return false; + } + } + else { + if (err) { + std::stringstream ss; + ss << "Invalid camera type: \"" << camera->type + << "\". Must be \"perspective\" or \"orthographic\"" + << std::endl; + (*err) += ss.str(); + } + return false; + } + + ParseStringProperty(&camera->name, err, o, "name", false); + + ParseExtensionsProperty(&camera->extensions, err, o); + ParseExtrasProperty(&(camera->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + camera->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + camera->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +static bool ParseLight(Light* light, std::string* err, const json& o, + bool store_original_json_for_extras_and_extensions) +{ + if (!ParseStringProperty(&light->type, err, o, "type", true)) { + return false; + } + + if (light->type == "spot") { + json_const_iterator spotIt; + if (!FindMember(o, "spot", spotIt)) { + if (err) { + std::stringstream ss; + ss << "Spot light description not found." << std::endl; + (*err) += ss.str(); + } + return false; + } + + const json& v = GetValue(spotIt); + if (!IsObject(v)) { + if (err) { + std::stringstream ss; + ss << "\"spot\" is not a JSON object." << std::endl; + (*err) += ss.str(); + } + return false; + } + + if (!ParseSpotLight(&light->spot, err, v, + store_original_json_for_extras_and_extensions)) { + return false; + } + } + + ParseStringProperty(&light->name, err, o, "name", false); + ParseNumberArrayProperty(&light->color, err, o, "color", false); + ParseNumberProperty(&light->range, err, o, "range", false); + ParseNumberProperty(&light->intensity, err, o, "intensity", false); + ParseExtensionsProperty(&light->extensions, err, o); + ParseExtrasProperty(&(light->extras), o); + + if (store_original_json_for_extras_and_extensions) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + light->extensions_json_string = JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + light->extras_json_string = JsonToString(GetValue(it)); + } + } + } + + return true; +} + +bool TinyGLTF::LoadFromString(Model* model, std::string* err, std::string* warn, + const char* json_str, + unsigned int json_str_length, + const std::string& base_dir, + unsigned int check_sections) +{ + if (json_str_length < 4) { + if (err) { + (*err) = "JSON string too short.\n"; + } + return false; + } + + JsonDocument v; + +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || \ + defined(_CPPUNWIND)) && \ + !defined(TINYGLTF_NOEXCEPTION) + try { + JsonParse(v, json_str, json_str_length, true); + } + catch (const std::exception& e) { + if (err) { + (*err) = e.what(); + } + return false; + } +#else + { + JsonParse(v, json_str, json_str_length); + + if (!IsObject(v)) { + // Assume parsing was failed. + if (err) { + (*err) = "Failed to parse JSON object\n"; + } + return false; + } + } +#endif + + if (!IsObject(v)) { + // root is not an object. + if (err) { + (*err) = "Root element is not a JSON object\n"; + } + return false; + } + + { + bool version_found = false; + json_const_iterator it; + if (FindMember(v, "asset", it) && IsObject(GetValue(it))) { + auto& itObj = GetValue(it); + json_const_iterator version_it; + std::string versionStr; + if (FindMember(itObj, "version", version_it) && + GetString(GetValue(version_it), versionStr)) { + version_found = true; + } + } + if (version_found) { + // OK + } + else if (check_sections & REQUIRE_VERSION) { + if (err) { + (*err) += "\"asset\" object not found in .gltf or not an " + "object type\n"; + } + return false; + } + } + + // scene is not mandatory. + // FIXME Maybe a better way to handle it than removing the code + + auto IsArrayMemberPresent = [](const json& _v, const char* name) -> bool { + json_const_iterator it; + return FindMember(_v, name, it) && IsArray(GetValue(it)); + }; + + { + if ((check_sections & REQUIRE_SCENES) && + !IsArrayMemberPresent(v, "scenes")) { + if (err) { + (*err) += "\"scenes\" object not found in .gltf or not an " + "array type\n"; + } + return false; + } + } + + { + if ((check_sections & REQUIRE_NODES) && + !IsArrayMemberPresent(v, "nodes")) { + if (err) { + (*err) += "\"nodes\" object not found in .gltf\n"; + } + return false; + } + } + + { + if ((check_sections & REQUIRE_ACCESSORS) && + !IsArrayMemberPresent(v, "accessors")) { + if (err) { + (*err) += "\"accessors\" object not found in .gltf\n"; + } + return false; + } + } + + { + if ((check_sections & REQUIRE_BUFFERS) && + !IsArrayMemberPresent(v, "buffers")) { + if (err) { + (*err) += "\"buffers\" object not found in .gltf\n"; + } + return false; + } + } + + { + if ((check_sections & REQUIRE_BUFFER_VIEWS) && + !IsArrayMemberPresent(v, "bufferViews")) { + if (err) { + (*err) += "\"bufferViews\" object not found in .gltf\n"; + } + return false; + } + } + + model->buffers.clear(); + model->bufferViews.clear(); + model->accessors.clear(); + model->meshes.clear(); + model->cameras.clear(); + model->nodes.clear(); + model->extensionsUsed.clear(); + model->extensionsRequired.clear(); + model->extensions.clear(); + model->defaultScene = -1; + + // 1. Parse Asset + { + json_const_iterator it; + if (FindMember(v, "asset", it) && IsObject(GetValue(it))) { + const json& root = GetValue(it); + + ParseAsset(&model->asset, err, root, + store_original_json_for_extras_and_extensions_); + } + } + +#ifdef TINYGLTF_USE_CPP14 + auto ForEachInArray = [](const json& _v, const char* member, + const auto& cb) -> bool +#else + // The std::function<> implementation can be less efficient because it will + // allocate heap when the size of the captured lambda is above 16 bytes with + // clang and gcc, but it does not require C++14. + auto ForEachInArray = [](const json& _v, const char* member, + const std::function& cb) -> bool +#endif + { + json_const_iterator itm; + if (FindMember(_v, member, itm) && IsArray(GetValue(itm))) { + const json& root = GetValue(itm); + auto it = ArrayBegin(root); + auto end = ArrayEnd(root); + for (; it != end; ++it) { + if (!cb(*it)) + return false; + } + } + return true; + }; + + // 2. Parse extensionUsed + { + ForEachInArray(v, "extensionsUsed", [&](const json& o) { + std::string str; + GetString(o, str); + model->extensionsUsed.emplace_back(std::move(str)); + return true; + }); + } + + { + ForEachInArray(v, "extensionsRequired", [&](const json& o) { + std::string str; + GetString(o, str); + model->extensionsRequired.emplace_back(std::move(str)); + return true; + }); + } + + // 3. Parse Buffer + { + bool success = ForEachInArray(v, "buffers", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`buffers' does not contain an JSON object."; + } + return false; + } + Buffer buffer; + if (!ParseBuffer(&buffer, err, o, + store_original_json_for_extras_and_extensions_, + &fs, base_dir, is_binary_, bin_data_, bin_size_)) { + return false; + } + + model->buffers.emplace_back(std::move(buffer)); + return true; + }); + + if (!success) { + return false; + } + } + // 4. Parse BufferView + { + bool success = ForEachInArray(v, "bufferViews", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`bufferViews' does not contain an JSON object."; + } + return false; + } + BufferView bufferView; + if (!ParseBufferView( + &bufferView, err, o, + store_original_json_for_extras_and_extensions_)) { + return false; + } + + model->bufferViews.emplace_back(std::move(bufferView)); + return true; + }); + + if (!success) { + return false; + } + } + + // 5. Parse Accessor + { + bool success = ForEachInArray(v, "accessors", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`accessors' does not contain an JSON object."; + } + return false; + } + Accessor accessor; + if (!ParseAccessor( + &accessor, err, o, + store_original_json_for_extras_and_extensions_)) { + return false; + } + + model->accessors.emplace_back(std::move(accessor)); + return true; + }); + + if (!success) { + return false; + } + } + + // 6. Parse Mesh + { + bool success = ForEachInArray(v, "meshes", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`meshes' does not contain an JSON object."; + } + return false; + } + Mesh mesh; + if (!ParseMesh(&mesh, model, err, o, + store_original_json_for_extras_and_extensions_)) { + return false; + } + + model->meshes.emplace_back(std::move(mesh)); + return true; + }); + + if (!success) { + return false; + } + } + + // Assign missing bufferView target types + // - Look for missing Mesh indices + // - Look for missing Mesh attributes + for (auto& mesh : model->meshes) { + for (auto& primitive : mesh.primitives) { + if (primitive.indices > -1) // has indices from parsing step, must + // be Element Array Buffer + { + if (size_t(primitive.indices) >= model->accessors.size()) { + if (err) { + (*err) += "primitive indices accessor out of bounds"; + } + return false; + } + + auto bufferView = + model->accessors[size_t(primitive.indices)].bufferView; + if (bufferView < 0 || + size_t(bufferView) >= model->bufferViews.size()) { + if (err) { + (*err) += "accessor[" + + std::to_string(primitive.indices) + + "] invalid bufferView"; + } + return false; + } + + model->bufferViews[size_t(bufferView)].target = + TINYGLTF_TARGET_ELEMENT_ARRAY_BUFFER; + // we could optionally check if accessors' bufferView type is + // Scalar, as it should be + } + + for (auto& attribute : primitive.attributes) { + const auto accessorsIndex = size_t(attribute.second); + if (accessorsIndex < model->accessors.size()) { + const auto bufferView = + model->accessors[accessorsIndex].bufferView; + // bufferView could be null(-1) for sparse morph target + if (bufferView >= 0 && + bufferView < (int)model->bufferViews.size()) { + model->bufferViews[size_t(bufferView)].target = + TINYGLTF_TARGET_ARRAY_BUFFER; + } + } + } + + for (auto& target : primitive.targets) { + for (auto& attribute : target) { + const auto accessorsIndex = size_t(attribute.second); + if (accessorsIndex < model->accessors.size()) { + const auto bufferView = + model->accessors[accessorsIndex].bufferView; + // bufferView could be null(-1) for sparse morph target + if (bufferView >= 0 && + bufferView < (int)model->bufferViews.size()) { + model->bufferViews[size_t(bufferView)].target = + TINYGLTF_TARGET_ARRAY_BUFFER; + } + } + } + } + } + } + + // 7. Parse Node + { + bool success = ForEachInArray(v, "nodes", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`nodes' does not contain an JSON object."; + } + return false; + } + Node node; + if (!ParseNode(&node, err, o, + store_original_json_for_extras_and_extensions_)) { + return false; + } + + model->nodes.emplace_back(std::move(node)); + return true; + }); + + if (!success) { + return false; + } + } + + // 8. Parse scenes. + { + bool success = ForEachInArray(v, "scenes", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`scenes' does not contain an JSON object."; + } + return false; + } + std::vector nodes; + ParseIntegerArrayProperty(&nodes, err, o, "nodes", false); + + Scene scene; + scene.nodes = std::move(nodes); + + ParseStringProperty(&scene.name, err, o, "name", false); + + ParseExtensionsProperty(&scene.extensions, err, o); + ParseExtrasProperty(&scene.extras, o); + + if (store_original_json_for_extras_and_extensions_) { + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + scene.extensions_json_string = + JsonToString(GetValue(it)); + } + } + { + json_const_iterator it; + if (FindMember(o, "extras", it)) { + scene.extras_json_string = JsonToString(GetValue(it)); + } + } + } + + model->scenes.emplace_back(std::move(scene)); + return true; + }); + + if (!success) { + return false; + } + } + + // 9. Parse default scenes. + { + json_const_iterator rootIt; + int iVal; + if (FindMember(v, "scene", rootIt) && GetInt(GetValue(rootIt), iVal)) { + model->defaultScene = iVal; + } + } + + // 10. Parse Material + { + bool success = ForEachInArray(v, "materials", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`materials' does not contain an JSON object."; + } + return false; + } + Material material; + ParseStringProperty(&material.name, err, o, "name", false); + + if (!ParseMaterial( + &material, err, o, + store_original_json_for_extras_and_extensions_)) { + return false; + } + + model->materials.emplace_back(std::move(material)); + return true; + }); + + if (!success) { + return false; + } + } + + // 11. Parse Image + void* load_image_user_data{nullptr}; + + LoadImageDataOption load_image_option; + + if (user_image_loader_) { + // Use user supplied pointer + load_image_user_data = load_image_user_data_; + } + else { + load_image_option.preserve_channels = preserve_image_channels_; + load_image_user_data = reinterpret_cast(&load_image_option); + } + + { + int idx = 0; + bool success = ForEachInArray(v, "images", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "image[" + std::to_string(idx) + + "] is not a JSON object."; + } + return false; + } + Image image; + if (!ParseImage(&image, idx, err, warn, o, + store_original_json_for_extras_and_extensions_, + base_dir, &fs, &this->LoadImageData, + load_image_user_data)) { + return false; + } + + if (image.bufferView != -1) { + // Load image from the buffer view. + if (size_t(image.bufferView) >= model->bufferViews.size()) { + if (err) { + std::stringstream ss; + ss << "image[" << idx << "] bufferView \"" + << image.bufferView << "\" not found in the scene." + << std::endl; + (*err) += ss.str(); + } + return false; + } + + const BufferView& bufferView = + model->bufferViews[size_t(image.bufferView)]; + if (size_t(bufferView.buffer) >= model->buffers.size()) { + if (err) { + std::stringstream ss; + ss << "image[" << idx << "] buffer \"" + << bufferView.buffer << "\" not found in the scene." + << std::endl; + (*err) += ss.str(); + } + return false; + } + const Buffer& buffer = + model->buffers[size_t(bufferView.buffer)]; + + if (*LoadImageData == nullptr) { + if (err) { + (*err) += "No LoadImageData callback specified.\n"; + } + return false; + } + bool ret = LoadImageData( + &image, idx, err, warn, image.width, image.height, + &buffer.data[bufferView.byteOffset], + static_cast(bufferView.byteLength), + load_image_user_data); + if (!ret) { + return false; + } + } + + model->images.emplace_back(std::move(image)); + ++idx; + return true; + }); + + if (!success) { + return false; + } + } + + // 12. Parse Texture + { + bool success = ForEachInArray(v, "textures", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`textures' does not contain an JSON object."; + } + return false; + } + Texture texture; + if (!ParseTexture(&texture, err, o, + store_original_json_for_extras_and_extensions_, + base_dir)) { + return false; + } + + model->textures.emplace_back(std::move(texture)); + return true; + }); + + if (!success) { + return false; + } + } + + // 13. Parse Animation + { + bool success = ForEachInArray(v, "animations", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`animations' does not contain an JSON object."; + } + return false; + } + Animation animation; + if (!ParseAnimation( + &animation, err, o, + store_original_json_for_extras_and_extensions_)) { + return false; + } + + model->animations.emplace_back(std::move(animation)); + return true; + }); + + if (!success) { + return false; + } + } + + // 14. Parse Skin + { + bool success = ForEachInArray(v, "skins", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`skins' does not contain an JSON object."; + } + return false; + } + Skin skin; + if (!ParseSkin(&skin, err, o, + store_original_json_for_extras_and_extensions_)) { + return false; + } + + model->skins.emplace_back(std::move(skin)); + return true; + }); + + if (!success) { + return false; + } + } + + // 15. Parse Sampler + { + bool success = ForEachInArray(v, "samplers", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`samplers' does not contain an JSON object."; + } + return false; + } + Sampler sampler; + if (!ParseSampler(&sampler, err, o, + store_original_json_for_extras_and_extensions_)) { + return false; + } + + model->samplers.emplace_back(std::move(sampler)); + return true; + }); + + if (!success) { + return false; + } + } + + // 16. Parse Camera + { + bool success = ForEachInArray(v, "cameras", [&](const json& o) { + if (!IsObject(o)) { + if (err) { + (*err) += "`cameras' does not contain an JSON object."; + } + return false; + } + Camera camera; + if (!ParseCamera(&camera, err, o, + store_original_json_for_extras_and_extensions_)) { + return false; + } + + model->cameras.emplace_back(std::move(camera)); + return true; + }); + + if (!success) { + return false; + } + } + + // 17. Parse Extensions + ParseExtensionsProperty(&model->extensions, err, v); + + // 18. Specific extension implementations + { + json_const_iterator rootIt; + if (FindMember(v, "extensions", rootIt) && IsObject(GetValue(rootIt))) { + const json& root = GetValue(rootIt); + + json_const_iterator it(ObjectBegin(root)); + json_const_iterator itEnd(ObjectEnd(root)); + for (; it != itEnd; ++it) { + // parse KHR_lights_punctual extension + std::string key(GetKey(it)); + if ((key == "KHR_lights_punctual") && IsObject(GetValue(it))) { + const json& object = GetValue(it); + json_const_iterator itLight; + if (FindMember(object, "lights", itLight)) { + const json& lights = GetValue(itLight); + if (!IsArray(lights)) { + continue; + } + + auto arrayIt(ArrayBegin(lights)); + auto arrayItEnd(ArrayEnd(lights)); + for (; arrayIt != arrayItEnd; ++arrayIt) { + Light light; + if (!ParseLight( + &light, err, *arrayIt, + store_original_json_for_extras_and_extensions_)) { + return false; + } + model->lights.emplace_back(std::move(light)); + } + } + } + } + } + } + + // 19. Parse Extras + ParseExtrasProperty(&model->extras, v); + + if (store_original_json_for_extras_and_extensions_) { + model->extras_json_string = JsonToString(v["extras"]); + model->extensions_json_string = JsonToString(v["extensions"]); + } + + return true; +} + +bool TinyGLTF::LoadASCIIFromString(Model* model, std::string* err, + std::string* warn, const char* str, + unsigned int length, + const std::string& base_dir, + unsigned int check_sections) +{ + is_binary_ = false; + bin_data_ = nullptr; + bin_size_ = 0; + + return LoadFromString(model, err, warn, str, length, base_dir, + check_sections); +} + +bool TinyGLTF::LoadASCIIFromFile(Model* model, std::string* err, + std::string* warn, const std::string& filename, + unsigned int check_sections) +{ + std::stringstream ss; + + if (fs.ReadWholeFile == nullptr) { + // Programmer error, assert() ? + ss << "Failed to read file: " << filename + << ": one or more FS callback not set" << std::endl; + if (err) { + (*err) = ss.str(); + } + return false; + } + + std::vector data; + std::string fileerr; + bool fileread = fs.ReadWholeFile(&data, &fileerr, filename, fs.user_data); + if (!fileread) { + ss << "Failed to read file: " << filename << ": " << fileerr + << std::endl; + if (err) { + (*err) = ss.str(); + } + return false; + } + + size_t sz = data.size(); + if (sz == 0) { + if (err) { + (*err) = "Empty file."; + } + return false; + } + + std::string basedir = GetBaseDir(filename); + + bool ret = LoadASCIIFromString( + model, err, warn, reinterpret_cast(&data.at(0)), + static_cast(data.size()), basedir, check_sections); + + return ret; +} + +bool TinyGLTF::LoadBinaryFromMemory(Model* model, std::string* err, + std::string* warn, + const unsigned char* bytes, + unsigned int size, + const std::string& base_dir, + unsigned int check_sections) +{ + if (size < 20) { + if (err) { + (*err) = "Too short data size for glTF Binary."; + } + return false; + } + + if (bytes[0] == 'g' && bytes[1] == 'l' && bytes[2] == 'T' && + bytes[3] == 'F') { + // ok + } + else { + if (err) { + (*err) = "Invalid magic."; + } + return false; + } + + unsigned int version; // 4 bytes + unsigned int length; // 4 bytes + unsigned int chunk0_length; // 4 bytes + unsigned int chunk0_format; // 4 bytes; + + memcpy(&version, bytes + 4, 4); + swap4(&version); + memcpy(&length, bytes + 8, 4); + swap4(&length); + memcpy(&chunk0_length, bytes + 12, 4); // JSON data length + swap4(&chunk0_length); + memcpy(&chunk0_format, bytes + 16, 4); + swap4(&chunk0_format); + + // https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#binary-gltf-layout + // + // In case the Bin buffer is not present, the size is exactly 20 + size of + // JSON contents, + // so use "greater than" operator. + // + // https://github.com/syoyo/tinygltf/issues/372 + // Use 64bit uint to avoid integer overflow. + uint64_t header_and_json_size = 20ull + uint64_t(chunk0_length); + + if (header_and_json_size > std::numeric_limits::max()) { + // Do not allow 4GB or more GLB data. + (*err) = "Invalid glTF binary. GLB data exceeds 4GB."; + } + + if ((header_and_json_size > uint64_t(size)) || (chunk0_length < 1) || + (length > size) || (header_and_json_size > uint64_t(length)) || + (chunk0_format != 0x4E4F534A)) { // 0x4E4F534A = JSON format. + if (err) { + (*err) = "Invalid glTF binary."; + } + return false; + } + + // Padding check + // The start and the end of each chunk must be aligned to a 4-byte boundary. + // No padding check for chunk0 start since its 4byte-boundary is ensured. + if ((header_and_json_size % 4) != 0) { + if (err) { + (*err) = "JSON Chunk end does not aligned to a 4-byte boundary."; + } + } + + // std::cout << "header_and_json_size = " << header_and_json_size << "\n"; + // std::cout << "length = " << length << "\n"; + + // Chunk1(BIN) data + // The spec says: When the binary buffer is empty or when it is stored by + // other means, this chunk SHOULD be omitted. So when header + JSON data == + // binary size, Chunk1 is omitted. + if (header_and_json_size == uint64_t(length)) { + + bin_data_ = nullptr; + bin_size_ = 0; + } + else { + // Read Chunk1 info(BIN data) + // At least Chunk1 should have 12 bytes(8 bytes(header) + 4 bytes(bin + // payload could be 1~3 bytes, but need to be aligned to 4 bytes) + if ((header_and_json_size + 12ull) > uint64_t(length)) { + if (err) { + (*err) = + "Insufficient storage space for Chunk1(BIN data). At least " + "Chunk1 Must have 4 bytes or more bytes, but got " + + std::to_string((header_and_json_size + 12ull) - + uint64_t(length)) + + ".\n"; + } + return false; + } + + unsigned int chunk1_length; // 4 bytes + unsigned int chunk1_format; // 4 bytes; + memcpy(&chunk1_length, bytes + header_and_json_size, + 4); // JSON data length + swap4(&chunk1_length); + memcpy(&chunk1_format, bytes + header_and_json_size + 4, 4); + swap4(&chunk1_format); + + // std::cout << "chunk1_length = " << chunk1_length << "\n"; + + if (chunk1_length < 4) { + if (err) { + (*err) = "Insufficient Chunk1(BIN) data size."; + } + return false; + } + + if ((chunk1_length % 4) != 0) { + if (err) { + (*err) = "BIN Chunk end does not aligned to a 4-byte boundary."; + } + return false; + } + + if (uint64_t(chunk1_length) + header_and_json_size > uint64_t(length)) { + if (err) { + (*err) = "BIN Chunk data length exceeds the GLB size."; + } + return false; + } + + if (chunk1_format != 0x004e4942) { + if (err) { + (*err) = "Invalid type for chunk1 data."; + } + return false; + } + + // std::cout << "chunk1_length = " << chunk1_length << "\n"; + + bin_data_ = + bytes + header_and_json_size + + 8; // 4 bytes (bin_buffer_length) + 4 bytes(bin_buffer_format) + + bin_size_ = size_t(chunk1_length); + } + + // Extract JSON string. + std::string jsonString(reinterpret_cast(&bytes[20]), + chunk0_length); + + is_binary_ = true; + + bool ret = LoadFromString(model, err, warn, + reinterpret_cast(&bytes[20]), + chunk0_length, base_dir, check_sections); + if (!ret) { + return ret; + } + + return true; +} + +bool TinyGLTF::LoadBinaryFromFile(Model* model, std::string* err, + std::string* warn, + const std::string& filename, + unsigned int check_sections) +{ + std::stringstream ss; + + if (fs.ReadWholeFile == nullptr) { + // Programmer error, assert() ? + ss << "Failed to read file: " << filename + << ": one or more FS callback not set" << std::endl; + if (err) { + (*err) = ss.str(); + } + return false; + } + + std::vector data; + std::string fileerr; + bool fileread = fs.ReadWholeFile(&data, &fileerr, filename, fs.user_data); + if (!fileread) { + ss << "Failed to read file: " << filename << ": " << fileerr + << std::endl; + if (err) { + (*err) = ss.str(); + } + return false; + } + + std::string basedir = GetBaseDir(filename); + + bool ret = LoadBinaryFromMemory(model, err, warn, &data.at(0), + static_cast(data.size()), + basedir, check_sections); + + return ret; +} + +/////////////////////// +// GLTF Serialization +/////////////////////// +namespace { +json JsonFromString(const char* s) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + return json(s, GetAllocator()); +#else + return json(s); +#endif +} + +void JsonAssign(json& dest, const json& src) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + dest.CopyFrom(src, GetAllocator()); +#else + dest = src; +#endif +} + +void JsonAddMember(json& o, const char* key, json&& value) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + if (!o.IsObject()) { + o.SetObject(); + } + o.AddMember(json(key, GetAllocator()), std::move(value), GetAllocator()); +#else + o[key] = std::move(value); +#endif +} + +void JsonPushBack(json& o, json&& value) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + o.PushBack(std::move(value), GetAllocator()); +#else + o.push_back(std::move(value)); +#endif +} + +bool JsonIsNull(const json& o) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + return o.IsNull(); +#else + return o.is_null(); +#endif +} + +void JsonSetObject(json& o) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + o.SetObject(); +#else + o = o.object({}); +#endif +} + +void JsonReserveArray(json& o, size_t s) +{ +#ifdef TINYGLTF_USE_RAPIDJSON + o.SetArray(); + o.Reserve(static_cast(s), GetAllocator()); +#endif + (void)(o); + (void)(s); +} +} // namespace + +// typedef std::pair json_object_pair; + +template +static void SerializeNumberProperty(const std::string& key, T number, json& obj) +{ + // obj.insert( + // json_object_pair(key, json(static_cast(number)))); + // obj[key] = static_cast(number); + JsonAddMember(obj, key.c_str(), json(number)); +} + +#ifdef TINYGLTF_USE_RAPIDJSON +template <> +void SerializeNumberProperty(const std::string& key, size_t number, json& obj) +{ + JsonAddMember(obj, key.c_str(), json(static_cast(number))); +} +#endif + +template +static void SerializeNumberArrayProperty(const std::string& key, + const std::vector& value, json& obj) +{ + if (value.empty()) + return; + + json ary; + JsonReserveArray(ary, value.size()); + for (const auto& s : value) { + JsonPushBack(ary, json(s)); + } + JsonAddMember(obj, key.c_str(), std::move(ary)); +} + +static void SerializeStringProperty(const std::string& key, + const std::string& value, json& obj) +{ + JsonAddMember(obj, key.c_str(), JsonFromString(value.c_str())); +} + +static void SerializeStringArrayProperty(const std::string& key, + const std::vector& value, + json& obj) +{ + json ary; + JsonReserveArray(ary, value.size()); + for (auto& s : value) { + JsonPushBack(ary, JsonFromString(s.c_str())); + } + JsonAddMember(obj, key.c_str(), std::move(ary)); +} + +static bool ValueToJson(const Value& value, json* ret) +{ + json obj; +#ifdef TINYGLTF_USE_RAPIDJSON + switch (value.Type()) { + case REAL_TYPE: + obj.SetDouble(value.Get()); + break; + case INT_TYPE: + obj.SetInt(value.Get()); + break; + case BOOL_TYPE: + obj.SetBool(value.Get()); + break; + case STRING_TYPE: + obj.SetString(value.Get().c_str(), GetAllocator()); + break; + case ARRAY_TYPE: { + obj.SetArray(); + obj.Reserve(static_cast(value.ArrayLen()), + GetAllocator()); + for (unsigned int i = 0; i < value.ArrayLen(); ++i) { + Value elementValue = value.Get(int(i)); + json elementJson; + if (ValueToJson(value.Get(int(i)), &elementJson)) + obj.PushBack(std::move(elementJson), GetAllocator()); + } + break; + } + case BINARY_TYPE: + // TODO + // obj = json(value.Get>()); + return false; + break; + case OBJECT_TYPE: { + obj.SetObject(); + Value::Object objMap = value.Get(); + for (auto& it : objMap) { + json elementJson; + if (ValueToJson(it.second, &elementJson)) { + obj.AddMember(json(it.first.c_str(), GetAllocator()), + std::move(elementJson), GetAllocator()); + } + } + break; + } + case NULL_TYPE: + default: + return false; + } +#else + switch (value.Type()) { + case REAL_TYPE: + obj = json(value.Get()); + break; + case INT_TYPE: + obj = json(value.Get()); + break; + case BOOL_TYPE: + obj = json(value.Get()); + break; + case STRING_TYPE: + obj = json(value.Get()); + break; + case ARRAY_TYPE: { + for (unsigned int i = 0; i < value.ArrayLen(); ++i) { + Value elementValue = value.Get(int(i)); + json elementJson; + if (ValueToJson(value.Get(int(i)), &elementJson)) + obj.push_back(elementJson); + } + break; + } + case BINARY_TYPE: + // TODO + // obj = json(value.Get>()); + return false; + break; + case OBJECT_TYPE: { + Value::Object objMap = value.Get(); + for (auto& it : objMap) { + json elementJson; + if (ValueToJson(it.second, &elementJson)) + obj[it.first] = elementJson; + } + break; + } + case NULL_TYPE: + default: + return false; + } +#endif + if (ret) + *ret = std::move(obj); + return true; +} + +static void SerializeValue(const std::string& key, const Value& value, + json& obj) +{ + json ret; + if (ValueToJson(value, &ret)) { + JsonAddMember(obj, key.c_str(), std::move(ret)); + } +} + +static void SerializeGltfBufferData(const std::vector& data, + json& o) +{ + std::string header = "data:application/octet-stream;base64,"; + if (data.size() > 0) { + std::string encodedData = + base64_encode(&data[0], static_cast(data.size())); + SerializeStringProperty("uri", header + encodedData, o); + } + else { + // Issue #229 + // size 0 is allowed. Just emit mime header. + SerializeStringProperty("uri", header, o); + } +} + +static bool SerializeGltfBufferData(const std::vector& data, + const std::string& binFilename) +{ +#ifdef _WIN32 +#if defined(__GLIBCXX__) // mingw + int file_descriptor = _wopen(UTF8ToWchar(binFilename).c_str(), + _O_CREAT | _O_WRONLY | _O_TRUNC | _O_BINARY); + __gnu_cxx::stdio_filebuf wfile_buf( + file_descriptor, std::ios_base::out | std::ios_base::binary); + std::ostream output(&wfile_buf); + if (!wfile_buf.is_open()) + return false; +#elif defined(_MSC_VER) + std::ofstream output(UTF8ToWchar(binFilename).c_str(), + std::ofstream::binary); + if (!output.is_open()) + return false; +#else + std::ofstream output(binFilename.c_str(), std::ofstream::binary); + if (!output.is_open()) + return false; +#endif +#else + std::ofstream output(binFilename.c_str(), std::ofstream::binary); + if (!output.is_open()) + return false; +#endif + if (data.size() > 0) { + output.write(reinterpret_cast(&data[0]), + std::streamsize(data.size())); + } + else { + // Issue #229 + // size 0 will be still valid buffer data. + // write empty file. + } + return true; +} + +#if 0 // FIXME(syoyo): not used. will be removed in the future release. +static void SerializeParameterMap(ParameterMap ¶m, json &o) { + for (ParameterMap::iterator paramIt = param.begin(); paramIt != param.end(); + ++paramIt) { + if (paramIt->second.number_array.size()) { + SerializeNumberArrayProperty(paramIt->first, + paramIt->second.number_array, o); + } else if (paramIt->second.json_double_value.size()) { + json json_double_value; + for (std::map::iterator it = + paramIt->second.json_double_value.begin(); + it != paramIt->second.json_double_value.end(); ++it) { + if (it->first == "index") { + json_double_value[it->first] = paramIt->second.TextureIndex(); + } else { + json_double_value[it->first] = it->second; + } + } + + o[paramIt->first] = json_double_value; + } else if (!paramIt->second.string_value.empty()) { + SerializeStringProperty(paramIt->first, paramIt->second.string_value, o); + } else if (paramIt->second.has_number_value) { + o[paramIt->first] = paramIt->second.number_value; + } else { + o[paramIt->first] = paramIt->second.bool_value; + } + } +} +#endif + +static void SerializeExtensionMap(const ExtensionMap& extensions, json& o) +{ + if (!extensions.size()) + return; + + json extMap; + for (ExtensionMap::const_iterator extIt = extensions.begin(); + extIt != extensions.end(); ++extIt) { + // Allow an empty object for extension(#97) + json ret; + bool isNull = true; + if (ValueToJson(extIt->second, &ret)) { + isNull = JsonIsNull(ret); + JsonAddMember(extMap, extIt->first.c_str(), std::move(ret)); + } + if (isNull) { + if (!(extIt->first + .empty())) { // name should not be empty, but for sure + // create empty object so that an extension name is still + // included in json. + json empty; + JsonSetObject(empty); + JsonAddMember(extMap, extIt->first.c_str(), std::move(empty)); + } + } + } + JsonAddMember(o, "extensions", std::move(extMap)); +} + +static void SerializeGltfAccessor(Accessor& accessor, json& o) +{ + if (accessor.bufferView >= 0) + SerializeNumberProperty("bufferView", accessor.bufferView, o); + + if (accessor.byteOffset != 0) + SerializeNumberProperty("byteOffset", int(accessor.byteOffset), o); + + SerializeNumberProperty("componentType", accessor.componentType, o); + SerializeNumberProperty("count", accessor.count, o); + + if ((accessor.componentType == TINYGLTF_COMPONENT_TYPE_FLOAT) || + (accessor.componentType == TINYGLTF_COMPONENT_TYPE_DOUBLE)) { + SerializeNumberArrayProperty("min", accessor.minValues, o); + SerializeNumberArrayProperty("max", accessor.maxValues, o); + } + else { + // Issue #301. Serialize as integer. + // Assume int value is within [-2**31-1, 2**31-1] + { + std::vector values; + std::transform(accessor.minValues.begin(), accessor.minValues.end(), + std::back_inserter(values), + [](double v) { return static_cast(v); }); + + SerializeNumberArrayProperty("min", values, o); + } + + { + std::vector values; + std::transform(accessor.maxValues.begin(), accessor.maxValues.end(), + std::back_inserter(values), + [](double v) { return static_cast(v); }); + + SerializeNumberArrayProperty("max", values, o); + } + } + + if (accessor.normalized) + SerializeValue("normalized", Value(accessor.normalized), o); + std::string type; + switch (accessor.type) { + case TINYGLTF_TYPE_SCALAR: + type = "SCALAR"; + break; + case TINYGLTF_TYPE_VEC2: + type = "VEC2"; + break; + case TINYGLTF_TYPE_VEC3: + type = "VEC3"; + break; + case TINYGLTF_TYPE_VEC4: + type = "VEC4"; + break; + case TINYGLTF_TYPE_MAT2: + type = "MAT2"; + break; + case TINYGLTF_TYPE_MAT3: + type = "MAT3"; + break; + case TINYGLTF_TYPE_MAT4: + type = "MAT4"; + break; + } + + SerializeStringProperty("type", type, o); + if (!accessor.name.empty()) + SerializeStringProperty("name", accessor.name, o); + + if (accessor.extras.Type() != NULL_TYPE) { + SerializeValue("extras", accessor.extras, o); + } + + // sparse + if (accessor.sparse.isSparse) { + json sparse; + SerializeNumberProperty("count", accessor.sparse.count, sparse); + { + json indices; + SerializeNumberProperty( + "bufferView", accessor.sparse.indices.bufferView, indices); + SerializeNumberProperty( + "byteOffset", accessor.sparse.indices.byteOffset, indices); + SerializeNumberProperty("componentType", + accessor.sparse.indices.componentType, + indices); + JsonAddMember(sparse, "indices", std::move(indices)); + } + { + json values; + SerializeNumberProperty( + "bufferView", accessor.sparse.values.bufferView, values); + SerializeNumberProperty( + "byteOffset", accessor.sparse.values.byteOffset, values); + JsonAddMember(sparse, "values", std::move(values)); + } + JsonAddMember(o, "sparse", std::move(sparse)); + } +} + +static void SerializeGltfAnimationChannel(AnimationChannel& channel, json& o) +{ + SerializeNumberProperty("sampler", channel.sampler, o); + { + json target; + SerializeNumberProperty("node", channel.target_node, target); + SerializeStringProperty("path", channel.target_path, target); + + SerializeExtensionMap(channel.target_extensions, target); + + JsonAddMember(o, "target", std::move(target)); + } + + if (channel.extras.Type() != NULL_TYPE) { + SerializeValue("extras", channel.extras, o); + } + + SerializeExtensionMap(channel.extensions, o); +} + +static void SerializeGltfAnimationSampler(AnimationSampler& sampler, json& o) +{ + SerializeNumberProperty("input", sampler.input, o); + SerializeNumberProperty("output", sampler.output, o); + SerializeStringProperty("interpolation", sampler.interpolation, o); + + if (sampler.extras.Type() != NULL_TYPE) { + SerializeValue("extras", sampler.extras, o); + } +} + +static void SerializeGltfAnimation(Animation& animation, json& o) +{ + if (!animation.name.empty()) + SerializeStringProperty("name", animation.name, o); + + { + json channels; + JsonReserveArray(channels, animation.channels.size()); + for (unsigned int i = 0; i < animation.channels.size(); ++i) { + json channel; + AnimationChannel gltfChannel = animation.channels[i]; + SerializeGltfAnimationChannel(gltfChannel, channel); + JsonPushBack(channels, std::move(channel)); + } + + JsonAddMember(o, "channels", std::move(channels)); + } + + { + json samplers; + JsonReserveArray(samplers, animation.samplers.size()); + for (unsigned int i = 0; i < animation.samplers.size(); ++i) { + json sampler; + AnimationSampler gltfSampler = animation.samplers[i]; + SerializeGltfAnimationSampler(gltfSampler, sampler); + JsonPushBack(samplers, std::move(sampler)); + } + JsonAddMember(o, "samplers", std::move(samplers)); + } + + if (animation.extras.Type() != NULL_TYPE) { + SerializeValue("extras", animation.extras, o); + } + + SerializeExtensionMap(animation.extensions, o); +} + +static void SerializeGltfAsset(Asset& asset, json& o) +{ + if (!asset.generator.empty()) { + SerializeStringProperty("generator", asset.generator, o); + } + + if (!asset.copyright.empty()) { + SerializeStringProperty("copyright", asset.copyright, o); + } + + if (asset.version.empty()) { + // Just in case + // `version` must be defined + asset.version = "2.0"; + } + + // TODO(syoyo): Do we need to check if `version` is greater or equal to 2.0? + SerializeStringProperty("version", asset.version, o); + + if (asset.extras.Keys().size()) { + SerializeValue("extras", asset.extras, o); + } + + SerializeExtensionMap(asset.extensions, o); +} + +static void SerializeGltfBufferBin(Buffer& buffer, json& o, + std::vector& binBuffer) +{ + SerializeNumberProperty("byteLength", buffer.data.size(), o); + binBuffer = buffer.data; + + if (buffer.name.size()) + SerializeStringProperty("name", buffer.name, o); + + if (buffer.extras.Type() != NULL_TYPE) { + SerializeValue("extras", buffer.extras, o); + } +} + +static void SerializeGltfBuffer(Buffer& buffer, json& o) +{ + SerializeNumberProperty("byteLength", buffer.data.size(), o); + SerializeGltfBufferData(buffer.data, o); + + if (buffer.name.size()) + SerializeStringProperty("name", buffer.name, o); + + if (buffer.extras.Type() != NULL_TYPE) { + SerializeValue("extras", buffer.extras, o); + } +} + +static bool SerializeGltfBuffer(Buffer& buffer, json& o, + const std::string& binFilename, + const std::string& binBaseFilename) +{ + if (!SerializeGltfBufferData(buffer.data, binFilename)) + return false; + SerializeNumberProperty("byteLength", buffer.data.size(), o); + SerializeStringProperty("uri", binBaseFilename, o); + + if (buffer.name.size()) + SerializeStringProperty("name", buffer.name, o); + + if (buffer.extras.Type() != NULL_TYPE) { + SerializeValue("extras", buffer.extras, o); + } + return true; +} + +static void SerializeGltfBufferView(BufferView& bufferView, json& o) +{ + SerializeNumberProperty("buffer", bufferView.buffer, o); + SerializeNumberProperty("byteLength", bufferView.byteLength, o); + + // byteStride is optional, minimum allowed is 4 + if (bufferView.byteStride >= 4) { + SerializeNumberProperty("byteStride", bufferView.byteStride, o); + } + // byteOffset is optional, default is 0 + if (bufferView.byteOffset > 0) { + SerializeNumberProperty("byteOffset", bufferView.byteOffset, o); + } + // Target is optional, check if it contains a valid value + if (bufferView.target == TINYGLTF_TARGET_ARRAY_BUFFER || + bufferView.target == TINYGLTF_TARGET_ELEMENT_ARRAY_BUFFER) { + SerializeNumberProperty("target", bufferView.target, o); + } + if (bufferView.name.size()) { + SerializeStringProperty("name", bufferView.name, o); + } + + if (bufferView.extras.Type() != NULL_TYPE) { + SerializeValue("extras", bufferView.extras, o); + } +} + +static void SerializeGltfImage(Image& image, json& o) +{ + // if uri empty, the mimeType and bufferview should be set + if (image.uri.empty()) { + SerializeStringProperty("mimeType", image.mimeType, o); + SerializeNumberProperty("bufferView", image.bufferView, o); + } + else { + // TODO(syoyo): dlib::urilencode? + SerializeStringProperty("uri", image.uri, o); + } + + if (image.name.size()) { + SerializeStringProperty("name", image.name, o); + } + + if (image.extras.Type() != NULL_TYPE) { + SerializeValue("extras", image.extras, o); + } + + SerializeExtensionMap(image.extensions, o); +} + +static void SerializeGltfTextureInfo(TextureInfo& texinfo, json& o) +{ + SerializeNumberProperty("index", texinfo.index, o); + + if (texinfo.texCoord != 0) { + SerializeNumberProperty("texCoord", texinfo.texCoord, o); + } + + if (texinfo.extras.Type() != NULL_TYPE) { + SerializeValue("extras", texinfo.extras, o); + } + + SerializeExtensionMap(texinfo.extensions, o); +} + +static void SerializeGltfNormalTextureInfo(NormalTextureInfo& texinfo, json& o) +{ + SerializeNumberProperty("index", texinfo.index, o); + + if (texinfo.texCoord != 0) { + SerializeNumberProperty("texCoord", texinfo.texCoord, o); + } + + if (!TINYGLTF_DOUBLE_EQUAL(texinfo.scale, 1.0)) { + SerializeNumberProperty("scale", texinfo.scale, o); + } + + if (texinfo.extras.Type() != NULL_TYPE) { + SerializeValue("extras", texinfo.extras, o); + } + + SerializeExtensionMap(texinfo.extensions, o); +} + +static void SerializeGltfOcclusionTextureInfo(OcclusionTextureInfo& texinfo, + json& o) +{ + SerializeNumberProperty("index", texinfo.index, o); + + if (texinfo.texCoord != 0) { + SerializeNumberProperty("texCoord", texinfo.texCoord, o); + } + + if (!TINYGLTF_DOUBLE_EQUAL(texinfo.strength, 1.0)) { + SerializeNumberProperty("strength", texinfo.strength, o); + } + + if (texinfo.extras.Type() != NULL_TYPE) { + SerializeValue("extras", texinfo.extras, o); + } + + SerializeExtensionMap(texinfo.extensions, o); +} + +static void SerializeGltfPbrMetallicRoughness(PbrMetallicRoughness& pbr, + json& o) +{ + std::vector default_baseColorFactor = {1.0, 1.0, 1.0, 1.0}; + if (!Equals(pbr.baseColorFactor, default_baseColorFactor)) { + SerializeNumberArrayProperty("baseColorFactor", + pbr.baseColorFactor, o); + } + + if (!TINYGLTF_DOUBLE_EQUAL(pbr.metallicFactor, 1.0)) { + SerializeNumberProperty("metallicFactor", pbr.metallicFactor, o); + } + + if (!TINYGLTF_DOUBLE_EQUAL(pbr.roughnessFactor, 1.0)) { + SerializeNumberProperty("roughnessFactor", pbr.roughnessFactor, o); + } + + if (pbr.baseColorTexture.index > -1) { + json texinfo; + SerializeGltfTextureInfo(pbr.baseColorTexture, texinfo); + JsonAddMember(o, "baseColorTexture", std::move(texinfo)); + } + + if (pbr.metallicRoughnessTexture.index > -1) { + json texinfo; + SerializeGltfTextureInfo(pbr.metallicRoughnessTexture, texinfo); + JsonAddMember(o, "metallicRoughnessTexture", std::move(texinfo)); + } + + SerializeExtensionMap(pbr.extensions, o); + + if (pbr.extras.Type() != NULL_TYPE) { + SerializeValue("extras", pbr.extras, o); + } +} + +static void SerializeGltfMaterial(Material& material, json& o) +{ + if (material.name.size()) { + SerializeStringProperty("name", material.name, o); + } + + // QUESTION(syoyo): Write material parameters regardless of its default + // value? + + if (!TINYGLTF_DOUBLE_EQUAL(material.alphaCutoff, 0.5)) { + SerializeNumberProperty("alphaCutoff", material.alphaCutoff, o); + } + + if (material.alphaMode.compare("OPAQUE") != 0) { + SerializeStringProperty("alphaMode", material.alphaMode, o); + } + + if (material.doubleSided != false) + JsonAddMember(o, "doubleSided", json(material.doubleSided)); + + if (material.normalTexture.index > -1) { + json texinfo; + SerializeGltfNormalTextureInfo(material.normalTexture, texinfo); + JsonAddMember(o, "normalTexture", std::move(texinfo)); + } + + if (material.occlusionTexture.index > -1) { + json texinfo; + SerializeGltfOcclusionTextureInfo(material.occlusionTexture, texinfo); + JsonAddMember(o, "occlusionTexture", std::move(texinfo)); + } + + if (material.emissiveTexture.index > -1) { + json texinfo; + SerializeGltfTextureInfo(material.emissiveTexture, texinfo); + JsonAddMember(o, "emissiveTexture", std::move(texinfo)); + } + + std::vector default_emissiveFactor = {0.0, 0.0, 0.0}; + if (!Equals(material.emissiveFactor, default_emissiveFactor)) { + SerializeNumberArrayProperty("emissiveFactor", + material.emissiveFactor, o); + } + + { + json pbrMetallicRoughness; + SerializeGltfPbrMetallicRoughness(material.pbrMetallicRoughness, + pbrMetallicRoughness); + // Issue 204 + // Do not serialize `pbrMetallicRoughness` if pbrMetallicRoughness has + // all default values(json is null). Otherwise it will serialize to + // `pbrMetallicRoughness : null`, which cannot be read by other glTF + // importers (and validators). + // + if (!JsonIsNull(pbrMetallicRoughness)) { + JsonAddMember(o, "pbrMetallicRoughness", + std::move(pbrMetallicRoughness)); + } + } + +#if 0 // legacy way. just for the record. + if (material.values.size()) { + json pbrMetallicRoughness; + SerializeParameterMap(material.values, pbrMetallicRoughness); + JsonAddMember(o, "pbrMetallicRoughness", std::move(pbrMetallicRoughness)); + } + + SerializeParameterMap(material.additionalValues, o); +#else + +#endif + + SerializeExtensionMap(material.extensions, o); + + if (material.extras.Type() != NULL_TYPE) { + SerializeValue("extras", material.extras, o); + } +} + +static void SerializeGltfMesh(Mesh& mesh, json& o) +{ + json primitives; + JsonReserveArray(primitives, mesh.primitives.size()); + for (unsigned int i = 0; i < mesh.primitives.size(); ++i) { + json primitive; + const Primitive& gltfPrimitive = + mesh.primitives[i]; // don't make a copy + { + json attributes; + for (auto attrIt = gltfPrimitive.attributes.begin(); + attrIt != gltfPrimitive.attributes.end(); ++attrIt) { + SerializeNumberProperty(attrIt->first, attrIt->second, + attributes); + } + + JsonAddMember(primitive, "attributes", std::move(attributes)); + } + + // Indices is optional + if (gltfPrimitive.indices > -1) { + SerializeNumberProperty("indices", gltfPrimitive.indices, + primitive); + } + // Material is optional + if (gltfPrimitive.material > -1) { + SerializeNumberProperty("material", gltfPrimitive.material, + primitive); + } + SerializeNumberProperty("mode", gltfPrimitive.mode, primitive); + + // Morph targets + if (gltfPrimitive.targets.size()) { + json targets; + JsonReserveArray(targets, gltfPrimitive.targets.size()); + for (unsigned int k = 0; k < gltfPrimitive.targets.size(); ++k) { + json targetAttributes; + std::map targetData = + gltfPrimitive.targets[k]; + for (std::map::iterator attrIt = + targetData.begin(); + attrIt != targetData.end(); ++attrIt) { + SerializeNumberProperty(attrIt->first, attrIt->second, + targetAttributes); + } + JsonPushBack(targets, std::move(targetAttributes)); + } + JsonAddMember(primitive, "targets", std::move(targets)); + } + + SerializeExtensionMap(gltfPrimitive.extensions, primitive); + + if (gltfPrimitive.extras.Type() != NULL_TYPE) { + SerializeValue("extras", gltfPrimitive.extras, primitive); + } + + JsonPushBack(primitives, std::move(primitive)); + } + + JsonAddMember(o, "primitives", std::move(primitives)); + + if (mesh.weights.size()) { + SerializeNumberArrayProperty("weights", mesh.weights, o); + } + + if (mesh.name.size()) { + SerializeStringProperty("name", mesh.name, o); + } + + SerializeExtensionMap(mesh.extensions, o); + if (mesh.extras.Type() != NULL_TYPE) { + SerializeValue("extras", mesh.extras, o); + } +} + +static void SerializeSpotLight(SpotLight& spot, json& o) +{ + SerializeNumberProperty("innerConeAngle", spot.innerConeAngle, o); + SerializeNumberProperty("outerConeAngle", spot.outerConeAngle, o); + SerializeExtensionMap(spot.extensions, o); + if (spot.extras.Type() != NULL_TYPE) { + SerializeValue("extras", spot.extras, o); + } +} + +static void SerializeGltfLight(Light& light, json& o) +{ + if (!light.name.empty()) + SerializeStringProperty("name", light.name, o); + SerializeNumberProperty("intensity", light.intensity, o); + if (light.range > 0.0) { + SerializeNumberProperty("range", light.range, o); + } + SerializeNumberArrayProperty("color", light.color, o); + SerializeStringProperty("type", light.type, o); + if (light.type == "spot") { + json spot; + SerializeSpotLight(light.spot, spot); + JsonAddMember(o, "spot", std::move(spot)); + } + SerializeExtensionMap(light.extensions, o); + if (light.extras.Type() != NULL_TYPE) { + SerializeValue("extras", light.extras, o); + } +} + +static void SerializeGltfNode(Node& node, json& o) +{ + if (node.translation.size() > 0) { + SerializeNumberArrayProperty("translation", node.translation, + o); + } + if (node.rotation.size() > 0) { + SerializeNumberArrayProperty("rotation", node.rotation, o); + } + if (node.scale.size() > 0) { + SerializeNumberArrayProperty("scale", node.scale, o); + } + if (node.matrix.size() > 0) { + SerializeNumberArrayProperty("matrix", node.matrix, o); + } + if (node.mesh != -1) { + SerializeNumberProperty("mesh", node.mesh, o); + } + + if (node.skin != -1) { + SerializeNumberProperty("skin", node.skin, o); + } + + if (node.camera != -1) { + SerializeNumberProperty("camera", node.camera, o); + } + + if (node.weights.size() > 0) { + SerializeNumberArrayProperty("weights", node.weights, o); + } + + if (node.extras.Type() != NULL_TYPE) { + SerializeValue("extras", node.extras, o); + } + + SerializeExtensionMap(node.extensions, o); + if (!node.name.empty()) + SerializeStringProperty("name", node.name, o); + SerializeNumberArrayProperty("children", node.children, o); +} + +static void SerializeGltfSampler(Sampler& sampler, json& o) +{ + if (sampler.magFilter != -1) { + SerializeNumberProperty("magFilter", sampler.magFilter, o); + } + if (sampler.minFilter != -1) { + SerializeNumberProperty("minFilter", sampler.minFilter, o); + } + // SerializeNumberProperty("wrapR", sampler.wrapR, o); + SerializeNumberProperty("wrapS", sampler.wrapS, o); + SerializeNumberProperty("wrapT", sampler.wrapT, o); + + if (sampler.extras.Type() != NULL_TYPE) { + SerializeValue("extras", sampler.extras, o); + } +} + +static void SerializeGltfOrthographicCamera(const OrthographicCamera& camera, + json& o) +{ + SerializeNumberProperty("zfar", camera.zfar, o); + SerializeNumberProperty("znear", camera.znear, o); + SerializeNumberProperty("xmag", camera.xmag, o); + SerializeNumberProperty("ymag", camera.ymag, o); + + if (camera.extras.Type() != NULL_TYPE) { + SerializeValue("extras", camera.extras, o); + } +} + +static void SerializeGltfPerspectiveCamera(const PerspectiveCamera& camera, + json& o) +{ + SerializeNumberProperty("zfar", camera.zfar, o); + SerializeNumberProperty("znear", camera.znear, o); + if (camera.aspectRatio > 0) { + SerializeNumberProperty("aspectRatio", camera.aspectRatio, o); + } + + if (camera.yfov > 0) { + SerializeNumberProperty("yfov", camera.yfov, o); + } + + if (camera.extras.Type() != NULL_TYPE) { + SerializeValue("extras", camera.extras, o); + } +} + +static void SerializeGltfCamera(const Camera& camera, json& o) +{ + SerializeStringProperty("type", camera.type, o); + if (!camera.name.empty()) { + SerializeStringProperty("name", camera.name, o); + } + + if (camera.type.compare("orthographic") == 0) { + json orthographic; + SerializeGltfOrthographicCamera(camera.orthographic, orthographic); + JsonAddMember(o, "orthographic", std::move(orthographic)); + } + else if (camera.type.compare("perspective") == 0) { + json perspective; + SerializeGltfPerspectiveCamera(camera.perspective, perspective); + JsonAddMember(o, "perspective", std::move(perspective)); + } + else { + // ??? + } + + if (camera.extras.Type() != NULL_TYPE) { + SerializeValue("extras", camera.extras, o); + } + SerializeExtensionMap(camera.extensions, o); +} + +static void SerializeGltfScene(Scene& scene, json& o) +{ + SerializeNumberArrayProperty("nodes", scene.nodes, o); + + if (scene.name.size()) { + SerializeStringProperty("name", scene.name, o); + } + if (scene.extras.Type() != NULL_TYPE) { + SerializeValue("extras", scene.extras, o); + } + SerializeExtensionMap(scene.extensions, o); +} + +static void SerializeGltfSkin(Skin& skin, json& o) +{ + // required + SerializeNumberArrayProperty("joints", skin.joints, o); + + if (skin.inverseBindMatrices >= 0) { + SerializeNumberProperty("inverseBindMatrices", skin.inverseBindMatrices, + o); + } + + if (skin.skeleton >= 0) { + SerializeNumberProperty("skeleton", skin.skeleton, o); + } + + if (skin.name.size()) { + SerializeStringProperty("name", skin.name, o); + } +} + +static void SerializeGltfTexture(Texture& texture, json& o) +{ + if (texture.sampler > -1) { + SerializeNumberProperty("sampler", texture.sampler, o); + } + if (texture.source > -1) { + SerializeNumberProperty("source", texture.source, o); + } + if (texture.name.size()) { + SerializeStringProperty("name", texture.name, o); + } + if (texture.extras.Type() != NULL_TYPE) { + SerializeValue("extras", texture.extras, o); + } + SerializeExtensionMap(texture.extensions, o); +} + +/// +/// Serialize all properties except buffers and images. +/// +static void SerializeGltfModel(Model* model, json& o) +{ + // ACCESSORS + if (model->accessors.size()) { + json accessors; + JsonReserveArray(accessors, model->accessors.size()); + for (unsigned int i = 0; i < model->accessors.size(); ++i) { + json accessor; + SerializeGltfAccessor(model->accessors[i], accessor); + JsonPushBack(accessors, std::move(accessor)); + } + JsonAddMember(o, "accessors", std::move(accessors)); + } + + // ANIMATIONS + if (model->animations.size()) { + json animations; + JsonReserveArray(animations, model->animations.size()); + for (unsigned int i = 0; i < model->animations.size(); ++i) { + if (model->animations[i].channels.size()) { + json animation; + SerializeGltfAnimation(model->animations[i], animation); + JsonPushBack(animations, std::move(animation)); + } + } + + JsonAddMember(o, "animations", std::move(animations)); + } + + // ASSET + json asset; + SerializeGltfAsset(model->asset, asset); + JsonAddMember(o, "asset", std::move(asset)); + + // BUFFERVIEWS + if (model->bufferViews.size()) { + json bufferViews; + JsonReserveArray(bufferViews, model->bufferViews.size()); + for (unsigned int i = 0; i < model->bufferViews.size(); ++i) { + json bufferView; + SerializeGltfBufferView(model->bufferViews[i], bufferView); + JsonPushBack(bufferViews, std::move(bufferView)); + } + JsonAddMember(o, "bufferViews", std::move(bufferViews)); + } + + // Extensions required + if (model->extensionsRequired.size()) { + SerializeStringArrayProperty("extensionsRequired", + model->extensionsRequired, o); + } + + // MATERIALS + if (model->materials.size()) { + json materials; + JsonReserveArray(materials, model->materials.size()); + for (unsigned int i = 0; i < model->materials.size(); ++i) { + json material; + SerializeGltfMaterial(model->materials[i], material); + + if (JsonIsNull(material)) { + // Issue 294. + // `material` does not have any required parameters + // so the result may be null(unmodified) when all material + // parameters have default value. + // + // null is not allowed thus we create an empty JSON object. + JsonSetObject(material); + } + JsonPushBack(materials, std::move(material)); + } + JsonAddMember(o, "materials", std::move(materials)); + } + + // MESHES + if (model->meshes.size()) { + json meshes; + JsonReserveArray(meshes, model->meshes.size()); + for (unsigned int i = 0; i < model->meshes.size(); ++i) { + json mesh; + SerializeGltfMesh(model->meshes[i], mesh); + JsonPushBack(meshes, std::move(mesh)); + } + JsonAddMember(o, "meshes", std::move(meshes)); + } + + // NODES + if (model->nodes.size()) { + json nodes; + JsonReserveArray(nodes, model->nodes.size()); + for (unsigned int i = 0; i < model->nodes.size(); ++i) { + json node; + SerializeGltfNode(model->nodes[i], node); + JsonPushBack(nodes, std::move(node)); + } + JsonAddMember(o, "nodes", std::move(nodes)); + } + + // SCENE + if (model->defaultScene > -1) { + SerializeNumberProperty("scene", model->defaultScene, o); + } + + // SCENES + if (model->scenes.size()) { + json scenes; + JsonReserveArray(scenes, model->scenes.size()); + for (unsigned int i = 0; i < model->scenes.size(); ++i) { + json currentScene; + SerializeGltfScene(model->scenes[i], currentScene); + JsonPushBack(scenes, std::move(currentScene)); + } + JsonAddMember(o, "scenes", std::move(scenes)); + } + + // SKINS + if (model->skins.size()) { + json skins; + JsonReserveArray(skins, model->skins.size()); + for (unsigned int i = 0; i < model->skins.size(); ++i) { + json skin; + SerializeGltfSkin(model->skins[i], skin); + JsonPushBack(skins, std::move(skin)); + } + JsonAddMember(o, "skins", std::move(skins)); + } + + // TEXTURES + if (model->textures.size()) { + json textures; + JsonReserveArray(textures, model->textures.size()); + for (unsigned int i = 0; i < model->textures.size(); ++i) { + json texture; + SerializeGltfTexture(model->textures[i], texture); + JsonPushBack(textures, std::move(texture)); + } + JsonAddMember(o, "textures", std::move(textures)); + } + + // SAMPLERS + if (model->samplers.size()) { + json samplers; + JsonReserveArray(samplers, model->samplers.size()); + for (unsigned int i = 0; i < model->samplers.size(); ++i) { + json sampler; + SerializeGltfSampler(model->samplers[i], sampler); + JsonPushBack(samplers, std::move(sampler)); + } + JsonAddMember(o, "samplers", std::move(samplers)); + } + + // CAMERAS + if (model->cameras.size()) { + json cameras; + JsonReserveArray(cameras, model->cameras.size()); + for (unsigned int i = 0; i < model->cameras.size(); ++i) { + json camera; + SerializeGltfCamera(model->cameras[i], camera); + JsonPushBack(cameras, std::move(camera)); + } + JsonAddMember(o, "cameras", std::move(cameras)); + } + + // EXTENSIONS + SerializeExtensionMap(model->extensions, o); + + auto extensionsUsed = model->extensionsUsed; + + // LIGHTS as KHR_lights_punctual + if (model->lights.size()) { + json lights; + JsonReserveArray(lights, model->lights.size()); + for (unsigned int i = 0; i < model->lights.size(); ++i) { + json light; + SerializeGltfLight(model->lights[i], light); + JsonPushBack(lights, std::move(light)); + } + json khr_lights_cmn; + JsonAddMember(khr_lights_cmn, "lights", std::move(lights)); + json ext_j; + + { + json_const_iterator it; + if (FindMember(o, "extensions", it)) { + JsonAssign(ext_j, GetValue(it)); + } + } + + JsonAddMember(ext_j, "KHR_lights_punctual", std::move(khr_lights_cmn)); + + JsonAddMember(o, "extensions", std::move(ext_j)); + + // Also add "KHR_lights_punctual" to `extensionsUsed` + { + auto has_khr_lights_punctual = + std::find_if(extensionsUsed.begin(), extensionsUsed.end(), + [](const std::string& s) { + return (s.compare("KHR_lights_punctual") == 0); + }); + + if (has_khr_lights_punctual == extensionsUsed.end()) { + extensionsUsed.push_back("KHR_lights_punctual"); + } + } + } + + // Extensions used + if (extensionsUsed.size()) { + SerializeStringArrayProperty("extensionsUsed", extensionsUsed, o); + } + + // EXTRAS + if (model->extras.Type() != NULL_TYPE) { + SerializeValue("extras", model->extras, o); + } +} + +static bool WriteGltfStream(std::ostream& stream, const std::string& content) +{ + stream << content << std::endl; + return true; +} + +static bool WriteGltfFile(const std::string& output, const std::string& content) +{ +#ifdef _WIN32 +#if defined(_MSC_VER) + std::ofstream gltfFile(UTF8ToWchar(output).c_str()); +#elif defined(__GLIBCXX__) + int file_descriptor = _wopen(UTF8ToWchar(output).c_str(), + _O_CREAT | _O_WRONLY | _O_TRUNC | _O_BINARY); + __gnu_cxx::stdio_filebuf wfile_buf( + file_descriptor, std::ios_base::out | std::ios_base::binary); + std::ostream gltfFile(&wfile_buf); + if (!wfile_buf.is_open()) + return false; +#else + std::ofstream gltfFile(output.c_str()); + if (!gltfFile.is_open()) + return false; +#endif +#else + std::ofstream gltfFile(output.c_str()); + if (!gltfFile.is_open()) + return false; +#endif + return WriteGltfStream(gltfFile, content); +} + +static bool WriteBinaryGltfStream(std::ostream& stream, + const std::string& content, + const std::vector& binBuffer) +{ + const std::string header = "glTF"; + const int version = 2; + + const uint32_t content_size = uint32_t(content.size()); + const uint32_t binBuffer_size = uint32_t(binBuffer.size()); + // determine number of padding bytes required to ensure 4 byte alignment + const uint32_t content_padding_size = + content_size % 4 == 0 ? 0 : 4 - content_size % 4; + const uint32_t bin_padding_size = + binBuffer_size % 4 == 0 ? 0 : 4 - binBuffer_size % 4; + + // 12 bytes for header, JSON content length, 8 bytes for JSON chunk info. + // Chunk data must be located at 4-byte boundary, which may require padding + const uint32_t length = + 12 + 8 + content_size + content_padding_size + + (binBuffer_size ? (8 + binBuffer_size + bin_padding_size) : 0); + + stream.write(header.c_str(), std::streamsize(header.size())); + stream.write(reinterpret_cast(&version), sizeof(version)); + stream.write(reinterpret_cast(&length), sizeof(length)); + + // JSON chunk info, then JSON data + const uint32_t model_length = + uint32_t(content.size()) + content_padding_size; + const uint32_t model_format = 0x4E4F534A; + stream.write(reinterpret_cast(&model_length), + sizeof(model_length)); + stream.write(reinterpret_cast(&model_format), + sizeof(model_format)); + stream.write(content.c_str(), std::streamsize(content.size())); + + // Chunk must be multiplies of 4, so pad with spaces + if (content_padding_size > 0) { + const std::string padding = + std::string(size_t(content_padding_size), ' '); + stream.write(padding.c_str(), std::streamsize(padding.size())); + } + if (binBuffer.size() > 0) { + // BIN chunk info, then BIN data + const uint32_t bin_length = + uint32_t(binBuffer.size()) + bin_padding_size; + const uint32_t bin_format = 0x004e4942; + stream.write(reinterpret_cast(&bin_length), + sizeof(bin_length)); + stream.write(reinterpret_cast(&bin_format), + sizeof(bin_format)); + stream.write(reinterpret_cast(binBuffer.data()), + std::streamsize(binBuffer.size())); + // Chunksize must be multiplies of 4, so pad with zeroes + if (bin_padding_size > 0) { + const std::vector padding = + std::vector(size_t(bin_padding_size), 0); + stream.write(reinterpret_cast(padding.data()), + std::streamsize(padding.size())); + } + } + + // TODO: Check error on stream.write + return true; +} + +static bool WriteBinaryGltfFile(const std::string& output, + const std::string& content, + const std::vector& binBuffer) +{ +#ifdef _WIN32 +#if defined(_MSC_VER) + std::ofstream gltfFile(UTF8ToWchar(output).c_str(), std::ios::binary); +#elif defined(__GLIBCXX__) + int file_descriptor = _wopen(UTF8ToWchar(output).c_str(), + _O_CREAT | _O_WRONLY | _O_TRUNC | _O_BINARY); + __gnu_cxx::stdio_filebuf wfile_buf( + file_descriptor, std::ios_base::out | std::ios_base::binary); + std::ostream gltfFile(&wfile_buf); +#else + std::ofstream gltfFile(output.c_str(), std::ios::binary); +#endif +#else + std::ofstream gltfFile(output.c_str(), std::ios::binary); +#endif + return WriteBinaryGltfStream(gltfFile, content, binBuffer); +} + +bool TinyGLTF::WriteGltfSceneToStream(Model* model, std::ostream& stream, + bool prettyPrint = true, + bool writeBinary = false) +{ + JsonDocument output; + + /// Serialize all properties except buffers and images. + SerializeGltfModel(model, output); + + // BUFFERS + std::vector binBuffer; + if (model->buffers.size()) { + json buffers; + JsonReserveArray(buffers, model->buffers.size()); + for (unsigned int i = 0; i < model->buffers.size(); ++i) { + json buffer; + if (writeBinary && i == 0 && model->buffers[i].uri.empty()) { + SerializeGltfBufferBin(model->buffers[i], buffer, binBuffer); + } + else { + SerializeGltfBuffer(model->buffers[i], buffer); + } + JsonPushBack(buffers, std::move(buffer)); + } + JsonAddMember(output, "buffers", std::move(buffers)); + } + + // IMAGES + if (model->images.size()) { + json images; + JsonReserveArray(images, model->images.size()); + for (unsigned int i = 0; i < model->images.size(); ++i) { + json image; + + std::string dummystring = ""; + // UpdateImageObject need baseDir but only uses it if embeddedImages + // is enabled, since we won't write separate images when writing to + // a stream we + UpdateImageObject(model->images[i], dummystring, int(i), true, + &this->WriteImageData, + this->write_image_user_data_); + SerializeGltfImage(model->images[i], image); + JsonPushBack(images, std::move(image)); + } + JsonAddMember(output, "images", std::move(images)); + } + + if (writeBinary) { + return WriteBinaryGltfStream(stream, JsonToString(output), binBuffer); + } + else { + return WriteGltfStream(stream, + JsonToString(output, prettyPrint ? 2 : -1)); + } +} + +bool TinyGLTF::WriteGltfSceneToFile(Model* model, const std::string& filename, + bool embedImages = false, + bool embedBuffers = false, + bool prettyPrint = true, + bool writeBinary = false) +{ + JsonDocument output; + std::string defaultBinFilename = GetBaseFilename(filename); + std::string defaultBinFileExt = ".bin"; + std::string::size_type pos = + defaultBinFilename.rfind('.', defaultBinFilename.length()); + + if (pos != std::string::npos) { + defaultBinFilename = defaultBinFilename.substr(0, pos); + } + std::string baseDir = GetBaseDir(filename); + if (baseDir.empty()) { + baseDir = "./"; + } + /// Serialize all properties except buffers and images. + SerializeGltfModel(model, output); + + // BUFFERS + std::vector usedUris; + std::vector binBuffer; + if (model->buffers.size()) { + json buffers; + JsonReserveArray(buffers, model->buffers.size()); + for (unsigned int i = 0; i < model->buffers.size(); ++i) { + json buffer; + if (writeBinary && i == 0 && model->buffers[i].uri.empty()) { + SerializeGltfBufferBin(model->buffers[i], buffer, binBuffer); + } + else if (embedBuffers) { + SerializeGltfBuffer(model->buffers[i], buffer); + } + else { + std::string binSavePath; + std::string binUri; + if (!model->buffers[i].uri.empty() && + !IsDataURI(model->buffers[i].uri)) { + binUri = model->buffers[i].uri; + } + else { + binUri = defaultBinFilename + defaultBinFileExt; + bool inUse = true; + int numUsed = 0; + while (inUse) { + inUse = false; + for (const std::string& usedName : usedUris) { + if (binUri.compare(usedName) != 0) + continue; + inUse = true; + binUri = defaultBinFilename + + std::to_string(numUsed++) + + defaultBinFileExt; + break; + } + } + } + usedUris.push_back(binUri); + binSavePath = JoinPath(baseDir, binUri); + if (!SerializeGltfBuffer(model->buffers[i], buffer, binSavePath, + binUri)) { + return false; + } + } + JsonPushBack(buffers, std::move(buffer)); + } + JsonAddMember(output, "buffers", std::move(buffers)); + } + + // IMAGES + if (model->images.size()) { + json images; + JsonReserveArray(images, model->images.size()); + for (unsigned int i = 0; i < model->images.size(); ++i) { + json image; + + UpdateImageObject(model->images[i], baseDir, int(i), embedImages, + &this->WriteImageData, + this->write_image_user_data_); + SerializeGltfImage(model->images[i], image); + JsonPushBack(images, std::move(image)); + } + JsonAddMember(output, "images", std::move(images)); + } + + if (writeBinary) { + return WriteBinaryGltfFile(filename, JsonToString(output), binBuffer); + } + else { + return WriteGltfFile(filename, + JsonToString(output, (prettyPrint ? 2 : -1))); + } +} + +} // namespace tinygltf + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#endif // TINYGLTF_IMPLEMENTATION \ No newline at end of file diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 2144ae32..2d9ebda1 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -15,6 +16,14 @@ #include #include +#include + +#define TINYGLTF_IMPLEMENTATION +#define TINYGLTF_NO_STB_IMAGE +#define TINYGLTF_NO_INCLUDE_STB_IMAGE +#define TINYGLTF_NO_STB_IMAGE_WRITE +#include "gltf/tiny_gltf.h" + enum class VertexUsage : int { Position = 0, Color = 1, @@ -27,8 +36,21 @@ enum class VertexUsage : int { Count = 8 }; +class Mesh { +public: + QOpenGLVertexArrayObject* vao = nullptr; + int numElements = 0; + std::map vbos; + QOpenGLBuffer* indexBuffer; + + tinygltf::Primitive primitive; + tinygltf::Accessor indexAccessor; +}; + QOpenGLShaderProgram* createMainShader(); QOpenGLBuffer* loadMesh(); +Mesh* loadMeshFromRc(const QString& path); +void renderGltfMesh(Mesh* mesh); void Viewer3D::initializeGL() { @@ -42,6 +64,7 @@ void Viewer3D::initializeGL() mainProgram = createMainShader(); mesh = loadMesh(); + gltfMesh = loadMeshFromRc(":assets/cube.gltf"); // setup matrices worldMatrix.setToIdentity(); @@ -85,6 +108,9 @@ void Viewer3D::paintGL() // render gl->glDrawArrays(GL_TRIANGLES, 0, 6); + + // render gltf mesh + renderGltfMesh(gltfMesh); } void Viewer3D::resizeGL(int w, int h) @@ -231,4 +257,167 @@ QOpenGLBuffer* loadMesh() vbo->release(); return vbo; +} + +bool loadGltfModel(tinygltf::Model& model, const QString& filename); + +#define BUFFER_OFFSET(i) ((char*)NULL + (i)) + +// https://github.com/syoyo/tinygltf/blob/release/examples/basic/main.cpp +Mesh* loadMeshFromRc(const QString& path) +{ + auto gl = QOpenGLContext::currentContext()->functions(); + + tinygltf::Model model; + if (!loadGltfModel(model, path)) { + return nullptr; + } + + // just convert the first mesh + if (model.meshes.size() == 0) + return nullptr; + + auto mesh = model.meshes[0]; + + auto vao = new QOpenGLVertexArrayObject(nullptr); + vao->create(); + vao->bind(); + + std::map vbos; + + // upload all model buffer views into GPU memory + for (size_t i = 0; i < model.bufferViews.size(); ++i) { + const tinygltf::BufferView& bufferView = model.bufferViews[i]; + if (bufferView.target == 0) { // TODO impl drawarrays + std::cout << "WARN: bufferView.target is zero" << std::endl; + continue; // Unsupported bufferView. + } + + const tinygltf::Buffer& buffer = model.buffers[bufferView.buffer]; + std::cout << "bufferview.target " << bufferView.target << std::endl; + + // vertex or index buffer + auto vbo = new QOpenGLBuffer((QOpenGLBuffer::Type)bufferView.target); + vbo->create(); + vbo->bind(); + vbo->setUsagePattern(QOpenGLBuffer::StaticDraw); + vbo->allocate(&buffer.data.at(0) + bufferView.byteOffset, + bufferView.byteLength); + vbo->release(); + + vbos[i] = vbo; + + // GLuint vbo; + // glGenBuffers(1, &vbo); + // vbos[i] = vbo; + // glBindBuffer(bufferView.target, vbo); + + // std::cout << "buffer.data.size = " << buffer.data.size() + // << ", bufferview.byteOffset = " << bufferView.byteOffset + // << std::endl; + + // glBufferData(bufferView.target, bufferView.byteLength, + // &buffer.data.at(0) + bufferView.byteOffset, + // GL_STATIC_DRAW); + } + + tinygltf::Primitive primitive = mesh.primitives[0]; + tinygltf::Accessor indexAccessor = model.accessors[primitive.indices]; + + // assign vertex channels to buffers + for (auto& attrib : primitive.attributes) { + tinygltf::Accessor accessor = model.accessors[attrib.second]; + int byteStride = + accessor.ByteStride(model.bufferViews[accessor.bufferView]); + // glBindBuffer(GL_ARRAY_BUFFER, vbos[accessor.bufferView]); + vbos[accessor.bufferView]->bind(); + + int size = 1; + if (accessor.type != TINYGLTF_TYPE_SCALAR) { + size = accessor.type; + } + + int vaa = -1; + if (attrib.first.compare("POSITION") == 0) + vaa = (int)VertexUsage::Position; + if (attrib.first.compare("NORMAL") == 0) + vaa = (int)VertexUsage::Normal; + if (attrib.first.compare("TANGENT") == 0) + vaa = (int)VertexUsage::Tangent; + if (attrib.first.compare("TEXCOORD_0") == 0) + vaa = (int)VertexUsage::TexCoord0; + if (attrib.first.compare("TEXCOORD_1") == 0) + vaa = (int)VertexUsage::TexCoord1; + if (attrib.first.compare("TEXCOORD_2") == 0) + vaa = (int)VertexUsage::TexCoord2; + if (vaa > -1) { + gl->glEnableVertexAttribArray(vaa); + gl->glVertexAttribPointer(vaa, size, accessor.componentType, + accessor.normalized ? GL_TRUE : GL_FALSE, + byteStride, + BUFFER_OFFSET(accessor.byteOffset)); + } + else + std::cout << "vaa missing: " << attrib.first << std::endl; + } + + vao->release(); + + Mesh* finalMesh = new Mesh; + finalMesh->vao = vao; + finalMesh->vbos = vbos; + + finalMesh->indexBuffer = vbos.at(indexAccessor.bufferView); + finalMesh->primitive = primitive; + finalMesh->indexAccessor = indexAccessor; + return finalMesh; +} + +void renderGltfMesh(Mesh* mesh) +{ + mesh->vao->bind(); + tinygltf::Primitive primitive = mesh->primitive; + tinygltf::Accessor indexAccessor = mesh->indexAccessor; + + // glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbos.at(indexAccessor.bufferView)); + mesh->indexBuffer->bind(); + + glDrawElements(primitive.mode, indexAccessor.count, + indexAccessor.componentType, + BUFFER_OFFSET(indexAccessor.byteOffset)); + + mesh->vao->release(); +} + +bool loadGltfModel(tinygltf::Model& model, const QString& filename) +{ + QFile file(filename); + if (!file.open(QIODevice::ReadOnly)) { + qDebug() << "filenot opened \n"; + return false; + } + + auto text = file.readAll().toStdString(); + + tinygltf::TinyGLTF loader; + std::string err; + std::string warn; + + bool res = loader.LoadASCIIFromString(&model, &err, &warn, text.c_str(), + text.length(), ""); + if (!warn.empty()) { + std::cout << "WARN: " << warn << std::endl; + } + + if (!err.empty()) { + std::cout << "ERR: " << err << std::endl; + } + + if (!res) + std::cout << "Failed to load glTF: " << filename.toStdString() + << std::endl; + else + std::cout << "Loaded glTF: " << filename.toStdString() << std::endl; + + return res; } \ No newline at end of file diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index b7e421cf..b706a5ba 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -20,6 +20,7 @@ class QOpenGLTexture; class QOpenGLShaderProgram; class QOpenGLBuffer; class QOpenGLVertexArrayObject; +class Mesh; class Viewer3D : public QOpenGLWidget { QOpenGLTexture* texture = nullptr; @@ -27,6 +28,8 @@ class Viewer3D : public QOpenGLWidget { QOpenGLBuffer* mesh = nullptr; QOpenGLVertexArrayObject* vao = nullptr; + Mesh* gltfMesh; + QOpenGLFunctions* gl = nullptr; int m_projMatrixLoc = 0; From 9299193f0feb8d15a3c3381cf6f32319c7d6a2f7 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Mon, 28 Nov 2022 23:43:54 -0500 Subject: [PATCH 057/100] add trackball rotation --- src/viewer3d/viewer3d.cpp | 59 +++++++++++++++++++++++++++++++++++++++ src/viewer3d/viewer3d.h | 20 +++++++++++++ 2 files changed, 79 insertions(+) diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 2d9ebda1..6da495f9 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include #include @@ -79,6 +80,8 @@ void Viewer3D::initializeGL() void Viewer3D::paintGL() { + buildView(); + gl->glViewport(0, 0, this->width(), this->height()); gl->glClearDepthf(1.0); gl->glClearColor(1, 0, 0, 1); @@ -128,6 +131,62 @@ void Viewer3D::resizeGL(int w, int h) projMatrix.perspective(fov, aspect, zNear, zFar); } +void Viewer3D::mousePressEvent(QMouseEvent* e) +{ + prevPos = e->pos(); + + if (e->button() == Qt::LeftButton) { + leftMouseDown = true; + } + if (e->button() == Qt::MiddleButton) { + middleMouseDown = true; + } +} +void Viewer3D::mouseReleaseEvent(QMouseEvent* e) +{ + if (e->button() == Qt::LeftButton) { + leftMouseDown = true; + } + if (e->button() == Qt::MiddleButton) { + middleMouseDown = true; + } +} +void Viewer3D::mouseMoveEvent(QMouseEvent* e) +{ + if (leftMouseDown) { + auto diff = e->pos() - prevPos; + + yaw += -diff.x() * dragSpeed; + pitch += diff.y() * dragSpeed; + + prevPos = e->pos(); + + this->repaint(); + } +} + +void Viewer3D::wheelEvent(QWheelEvent* e) +{ + auto dir = e->angleDelta().y() > 0 ? -1 : 1; + zoom += dir * zoomSpeed; + + this->repaint(); +} + +void Viewer3D::buildView() +{ + QVector3D view(0, 0, -zoom); + // auto rot = QMatrix4x4::rotate(); + auto rot = QQuaternion::fromEulerAngles(pitch, yaw, 0); + auto eyePos = rot.rotatedVector(view); + + // offset by center + eyePos += center; + + viewMatrix.setToIdentity(); + viewMatrix.lookAt(eyePos, center, QVector3D(0, 1, 0)); +} + QOpenGLShaderProgram* createMainShader() { QOpenGLShader* vshader = new QOpenGLShader(QOpenGLShader::Vertex); diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index b706a5ba..a43d83dd 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -45,8 +45,28 @@ class Viewer3D : public QOpenGLWidget { QVector3D m_eye; QVector3D m_target = {0, 0, -1}; + // trackball params + float zoom = 5; + float zoomSpeed = 0.3f; + QPoint prevPos; + QVector3D center = {0, 0, 0}; + float yaw = 0; + float pitch = 0; + float dragSpeed = 0.5f; + + bool leftMouseDown = false; + bool middleMouseDown = false; + protected: void initializeGL(); void paintGL(); void resizeGL(int w, int h); + + // trackball events + void mousePressEvent(QMouseEvent* e) override; + void mouseReleaseEvent(QMouseEvent* e) override; + void mouseMoveEvent(QMouseEvent* e) override; + void wheelEvent(QWheelEvent* e) override; + + void buildView(); }; \ No newline at end of file From c69c9f9896a787b5389d978eb5856f5075d9cde1 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 29 Nov 2022 00:35:40 -0500 Subject: [PATCH 058/100] add sample cube --- src/viewer3d/assets/cube.gltf | 134 ++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 src/viewer3d/assets/cube.gltf diff --git a/src/viewer3d/assets/cube.gltf b/src/viewer3d/assets/cube.gltf new file mode 100644 index 00000000..7bac5473 --- /dev/null +++ b/src/viewer3d/assets/cube.gltf @@ -0,0 +1,134 @@ +{ + "asset" : { + "generator" : "Khronos glTF Blender I/O v3.3.32", + "version" : "2.0" + }, + "scene" : 0, + "scenes" : [ + { + "name" : "Scene", + "nodes" : [ + 0 + ] + } + ], + "nodes" : [ + { + "mesh" : 0, + "name" : "Cube" + } + ], + "materials" : [ + { + "doubleSided" : true, + "name" : "Material", + "pbrMetallicRoughness" : { + "baseColorFactor" : [ + 0.800000011920929, + 0.800000011920929, + 0.800000011920929, + 1 + ], + "metallicFactor" : 0, + "roughnessFactor" : 0.5 + } + } + ], + "meshes" : [ + { + "name" : "Cube", + "primitives" : [ + { + "attributes" : { + "POSITION" : 0, + "NORMAL" : 1, + "TANGENT" : 2, + "TEXCOORD_0" : 3 + }, + "indices" : 4, + "material" : 0 + } + ] + } + ], + "accessors" : [ + { + "bufferView" : 0, + "componentType" : 5126, + "count" : 24, + "max" : [ + 1, + 1, + 1 + ], + "min" : [ + -1, + -1, + -1 + ], + "type" : "VEC3" + }, + { + "bufferView" : 1, + "componentType" : 5126, + "count" : 24, + "type" : "VEC3" + }, + { + "bufferView" : 2, + "componentType" : 5126, + "count" : 24, + "type" : "VEC4" + }, + { + "bufferView" : 3, + "componentType" : 5126, + "count" : 24, + "type" : "VEC2" + }, + { + "bufferView" : 4, + "componentType" : 5123, + "count" : 36, + "type" : "SCALAR" + } + ], + "bufferViews" : [ + { + "buffer" : 0, + "byteLength" : 288, + "byteOffset" : 0, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 288, + "byteOffset" : 288, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 384, + "byteOffset" : 576, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 192, + "byteOffset" : 960, + "target" : 34962 + }, + { + "buffer" : 0, + "byteLength" : 72, + "byteOffset" : 1152, + "target" : 34963 + } + ], + "buffers" : [ + { + "byteLength" : 1224, + "uri" : "data:application/octet-stream;base64,AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAPwAAgD8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgL8AAIC/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAPwAAgL8AAIA/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAvwAAgD8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgD8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AACAvwAAgL8AAIA/AAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAPwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAAAAAAAAAAIA/AACAPwAAAAAAAACAAACAvwAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAAgL8AAIA/AACAPwAAAAAAAACAAACAvwAAgD8AAAAAAAAAgAAAgL8AAAAAAAAAAAAAgL8AAIA/AACAPwAAAAAAAACAAACAPwAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAAgL8AAIA/AACAPwAAAAAAAACAAACAvwAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAAAAAgL8AAIA/AAAAAAAAAAAAAIC/AACAvwAAgD8AAAAAAAAAgAAAgL8AAIA/AAAAAAAAAIAAAIA/AAAAAAAAAAAAAIC/AACAvwAAgD8AAAAAAAAAgAAAgL8AAIA/AAAAAAAAAIAAAIC/AAAAAAAAAAAAAIC/AACAvwAAgD8AAAAAAAAAgAAAgD8AAIA/AAAAAAAAAIAAAIA/AAAAAAAAAAAAAIC/AACAvwAAgD8AAAAAAAAAgAAAgL8AAIA/AAAAAAAAAIAAAIA/AACAPwAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AACAPwAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAIA/AACAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAACAPwAAgD8AAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAAAAAACAPwAAAAAAAIA/AQAOABQAAQAUAAcACgAGABMACgATABcAFQASAAwAFQAMAA8AEAADAAkAEAAJABYABQACAAgABQAIAAsAEQANAAAAEQAAAAQA" + } + ] +} From 5d7af5db65aa115446cb98acfdedccad958e6a4a Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 4 Dec 2022 00:02:10 -0500 Subject: [PATCH 059/100] add ibl sampler class --- src/viewer3d/CMakeLists.txt | 2 ++ src/viewer3d/assets.qrc | 1 + src/viewer3d/iblsampler.cpp | 33 ++++++++++++++++++++++ src/viewer3d/iblsampler.h | 55 +++++++++++++++++++++++++++++++++++++ src/viewer3d/viewer3d.cpp | 6 ++++ 5 files changed, 97 insertions(+) create mode 100644 src/viewer3d/iblsampler.cpp create mode 100644 src/viewer3d/iblsampler.h diff --git a/src/viewer3d/CMakeLists.txt b/src/viewer3d/CMakeLists.txt index 372464e6..265cd233 100644 --- a/src/viewer3d/CMakeLists.txt +++ b/src/viewer3d/CMakeLists.txt @@ -13,9 +13,11 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON) set(SRCS main.cpp viewer3d.cpp + iblsampler.cpp ) set(HEADERS viewer3d.h + iblsampler.h gltf/json.hpp gltf/tiny_gltf.h gltf/stb_image.h diff --git a/src/viewer3d/assets.qrc b/src/viewer3d/assets.qrc index cc0819c9..b0ed8cb9 100644 --- a/src/viewer3d/assets.qrc +++ b/src/viewer3d/assets.qrc @@ -2,5 +2,6 @@ assets/brick.jpg assets/cube.gltf + assets/panorama.hdr \ No newline at end of file diff --git a/src/viewer3d/iblsampler.cpp b/src/viewer3d/iblsampler.cpp new file mode 100644 index 00000000..e9639062 --- /dev/null +++ b/src/viewer3d/iblsampler.cpp @@ -0,0 +1,33 @@ +#include "iblsampler.h" +#define STB_IMAGE_IMPLEMENTATION +#include "gltf/stb_image.h" + +#include +#include +#include + +// stbi_loadf_from_memory +// https://stackoverflow.com/questions/32666824/qopengltexture-qt-from-raw-data-freeimage +void IblSampler::loadPanorama(const QString& path) +{ + int width, height, numComponents; + QFile file(path); + file.open(QFile::ReadOnly); + auto byteArray = file.readAll(); + auto textureData = stbi_loadf_from_memory( + (unsigned char*)byteArray.constData(), byteArray.length(), &width, + &height, &numComponents, 3); + QOpenGLTexture* text = new QOpenGLTexture(QOpenGLTexture::Target2D); + text->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); + text->create(); + + // given some `width`, `height` and `data_ptr` + text->setSize(width, height, 3); + text->setFormat(QOpenGLTexture::RG32F); + text->allocateStorage(); + text->setData(QOpenGLTexture::RGB, QOpenGLTexture::Float32, textureData); + + inputTexture = text; +} + +// https://stackoverflow.com/questions/50666781/create-cubemap-from-qopenglframebuffer \ No newline at end of file diff --git a/src/viewer3d/iblsampler.h b/src/viewer3d/iblsampler.h new file mode 100644 index 00000000..15666bd0 --- /dev/null +++ b/src/viewer3d/iblsampler.h @@ -0,0 +1,55 @@ +#pragma once + +#include + +class QOpenGLFramebufferObject; +class QOpenGLFunctions; +class QOpenGLTexture; + +// reference: +// https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/ibl_sampler.js + +class IblSampler { +public: + QOpenGLFunctions* gl; + + int textureSize = 256; + int ggxSampleCount = 1024; + int lambertianSampleCount = 2048; + int sheenSamplCount = 64; + float lodBias = 0.0; + int lowestMipLevel = 4; + int lutResolution = 1024; + + int mipmapCount = -1; + + GLuint lambertianTextureID; + GLuint ggxTextureID; + GLuint sheenTextureID; + + GLuint ggxLutTextureID; + GLuint charlieLutTextureID; + + QOpenGLTexture* inputTexture; + GLuint inputTextureID; + GLuint cubemapTextureID; + + QOpenGLFramebufferObject* framebuffer; + + void loadPanorama(const QString& path); + + GLuint createCubemap(bool withMipmaps); + GLuint createLut(); + + // generation functions + void panoramaToCubemap(); + void cubeMapToLambertian(); + void cubeMapToGGX(); + void cubeMapToSheen(); + + void sampleGGXLut(); + void sampleCharlieLut(); + + void applyFilter(int distribution, float roughness, int targetMipLevel, + int targetTexture, int sampleCount, float lodBias = 0.0); +}; \ No newline at end of file diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 6da495f9..807455e4 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -19,6 +19,8 @@ #include +#include "iblsampler.h" + #define TINYGLTF_IMPLEMENTATION #define TINYGLTF_NO_STB_IMAGE #define TINYGLTF_NO_INCLUDE_STB_IMAGE @@ -76,6 +78,10 @@ void Viewer3D::initializeGL() projMatrix.setToIdentity(); projMatrix.perspective(45, this->width() / (float)this->height(), 1.0, 1000); + + IblSampler sampler; + sampler.gl = gl; + sampler.loadPanorama(":assets/panorama.hdr"); } void Viewer3D::paintGL() From e0389361a783c66bc55cecaa30a07d7acb5235d4 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 4 Dec 2022 01:09:04 -0500 Subject: [PATCH 060/100] add texture creation functions to ibl sampler --- src/viewer3d/iblsampler.cpp | 38 ++++++++++++++++++++++++++++++++++++- src/viewer3d/iblsampler.h | 4 ++-- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/viewer3d/iblsampler.cpp b/src/viewer3d/iblsampler.cpp index e9639062..0a9e9472 100644 --- a/src/viewer3d/iblsampler.cpp +++ b/src/viewer3d/iblsampler.cpp @@ -30,4 +30,40 @@ void IblSampler::loadPanorama(const QString& path) inputTexture = text; } -// https://stackoverflow.com/questions/50666781/create-cubemap-from-qopenglframebuffer \ No newline at end of file +// https://stackoverflow.com/questions/50666781/create-cubemap-from-qopenglframebuffer + +QOpenGLTexture* IblSampler::createCubemap(bool withMipmaps) +{ + auto cubemap = new QOpenGLTexture(QOpenGLTexture::TargetCubeMap); + if (withMipmaps) + cubemap->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, + QOpenGLTexture::Linear); + else + cubemap->setMinMagFilters(QOpenGLTexture::Linear, + QOpenGLTexture::Linear); + + cubemap->setWrapMode(QOpenGLTexture::ClampToEdge); + cubemap->create(); + + cubemap->setSize(textureSize, textureSize, 3); + // cubemap->setMipLevels() + cubemap->setFormat(QOpenGLTexture::RGB32F); + cubemap->allocateStorage(); + + return cubemap; +} + +QOpenGLTexture* IblSampler::createLut() +{ + auto cubemap = new QOpenGLTexture(QOpenGLTexture::Target2D); + cubemap->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); + cubemap->setWrapMode(QOpenGLTexture::ClampToEdge); + cubemap->create(); + + cubemap->setSize(textureSize, textureSize, 3); + // cubemap->setMipLevels() + cubemap->setFormat(QOpenGLTexture::RGBA32F); + cubemap->allocateStorage(); + + return cubemap; +} \ No newline at end of file diff --git a/src/viewer3d/iblsampler.h b/src/viewer3d/iblsampler.h index 15666bd0..7021f763 100644 --- a/src/viewer3d/iblsampler.h +++ b/src/viewer3d/iblsampler.h @@ -38,8 +38,8 @@ class IblSampler { void loadPanorama(const QString& path); - GLuint createCubemap(bool withMipmaps); - GLuint createLut(); + QOpenGLTexture* createCubemap(bool withMipmaps); + QOpenGLTexture* createLut(); // generation functions void panoramaToCubemap(); From 67d4c92e0254e14a4defb1185e9cae890260f042 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 4 Dec 2022 23:55:03 -0500 Subject: [PATCH 061/100] add shader cache and filtering shaders --- src/viewer3d/CMakeLists.txt | 2 + src/viewer3d/assets/ibl_filtering.frag | 453 +++++++++++++++++++ src/viewer3d/assets/panorama_to_cubemap.frag | 61 +++ src/viewer3d/iblsampler.cpp | 8 + src/viewer3d/iblsampler.h | 5 + src/viewer3d/shadercache.cpp | 50 ++ src/viewer3d/shadercache.h | 22 + 7 files changed, 601 insertions(+) create mode 100644 src/viewer3d/assets/ibl_filtering.frag create mode 100644 src/viewer3d/assets/panorama_to_cubemap.frag create mode 100644 src/viewer3d/shadercache.cpp create mode 100644 src/viewer3d/shadercache.h diff --git a/src/viewer3d/CMakeLists.txt b/src/viewer3d/CMakeLists.txt index 265cd233..612fdab5 100644 --- a/src/viewer3d/CMakeLists.txt +++ b/src/viewer3d/CMakeLists.txt @@ -14,10 +14,12 @@ set(SRCS main.cpp viewer3d.cpp iblsampler.cpp + shadercache.cpp ) set(HEADERS viewer3d.h iblsampler.h + shadercache.h gltf/json.hpp gltf/tiny_gltf.h gltf/stb_image.h diff --git a/src/viewer3d/assets/ibl_filtering.frag b/src/viewer3d/assets/ibl_filtering.frag new file mode 100644 index 00000000..0423fe7e --- /dev/null +++ b/src/viewer3d/assets/ibl_filtering.frag @@ -0,0 +1,453 @@ +//#version 450 +//#extension GL_ARB_separate_shader_objects : enable + +precision mediump float; +#define MATH_PI 3.1415926535897932384626433832795 +//#define MATH_INV_PI (1.0 / MATH_PI) + +uniform samplerCube uCubeMap; + +// enum +const int cLambertian = 0; +const int cGGX = 1; +const int cCharlie = 2; + + +//layout(push_constant) uniform FilterParameters { +uniform float u_roughness; +uniform int u_sampleCount; +uniform int u_width; +uniform float u_lodBias; +uniform int u_distribution; // enum +uniform int u_currentFace; +uniform int u_isGeneratingLUT; + +//layout (location = 0) in vec2 inUV; +in vec2 texCoord; + + +out vec4 fragmentColor; + +//layout(location = 6) out vec3 outLUT; + + +vec3 uvToXYZ(int face, vec2 uv) +{ + if(face == 0) + return vec3( 1.f, uv.y, -uv.x); + + else if(face == 1) + return vec3( -1.f, uv.y, uv.x); + + else if(face == 2) + return vec3( +uv.x, -1.f, +uv.y); + + else if(face == 3) + return vec3( +uv.x, 1.f, -uv.y); + + else if(face == 4) + return vec3( +uv.x, uv.y, 1.f); + + else {//if(face == 5) + return vec3( -uv.x, +uv.y, -1.f);} +} + +vec2 dirToUV(vec3 dir) +{ + return vec2( + 0.5f + 0.5f * atan(dir.z, dir.x) / MATH_PI, + 1.f - acos(dir.y) / MATH_PI); +} + +float saturate(float v) +{ + return clamp(v, 0.0f, 1.0f); +} + +// Hammersley Points on the Hemisphere +// CC BY 3.0 (Holger Dammertz) +// http://holger.dammertz.org/stuff/notes_HammersleyOnHemisphere.html +// with adapted interface +float radicalInverse_VdC(uint bits) +{ + bits = (bits << 16u) | (bits >> 16u); + bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u); + bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u); + bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u); + bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u); + return float(bits) * 2.3283064365386963e-10; // / 0x100000000 +} + +// hammersley2d describes a sequence of points in the 2d unit square [0,1)^2 +// that can be used for quasi Monte Carlo integration +vec2 hammersley2d(int i, int N) { + return vec2(float(i)/float(N), radicalInverse_VdC(uint(i))); +} + +// Hemisphere Sample + +// TBN generates a tangent bitangent normal coordinate frame from the normal +// (the normal must be normalized) +mat3 generateTBN(vec3 normal) +{ + vec3 bitangent = vec3(0.0, 1.0, 0.0); + + float NdotUp = dot(normal, vec3(0.0, 1.0, 0.0)); + float epsilon = 0.0000001; + if (1.0 - abs(NdotUp) <= epsilon) + { + // Sampling +Y or -Y, so we need a more robust bitangent. + if (NdotUp > 0.0) + { + bitangent = vec3(0.0, 0.0, 1.0); + } + else + { + bitangent = vec3(0.0, 0.0, -1.0); + } + } + + vec3 tangent = normalize(cross(bitangent, normal)); + bitangent = cross(normal, tangent); + + return mat3(tangent, bitangent, normal); +} + +struct MicrofacetDistributionSample +{ + float pdf; + float cosTheta; + float sinTheta; + float phi; +}; + +float D_GGX(float NdotH, float roughness) { + float a = NdotH * roughness; + float k = roughness / (1.0 - NdotH * NdotH + a * a); + return k * k * (1.0 / MATH_PI); +} + +// GGX microfacet distribution +// https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.html +// This implementation is based on https://bruop.github.io/ibl/, +// https://www.tobias-franke.eu/log/2014/03/30/notes_on_importance_sampling.html +// and https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch20.html +MicrofacetDistributionSample GGX(vec2 xi, float roughness) +{ + MicrofacetDistributionSample ggx; + + // evaluate sampling equations + float alpha = roughness * roughness; + ggx.cosTheta = saturate(sqrt((1.0 - xi.y) / (1.0 + (alpha * alpha - 1.0) * xi.y))); + ggx.sinTheta = sqrt(1.0 - ggx.cosTheta * ggx.cosTheta); + ggx.phi = 2.0 * MATH_PI * xi.x; + + // evaluate GGX pdf (for half vector) + ggx.pdf = D_GGX(ggx.cosTheta, alpha); + + // Apply the Jacobian to obtain a pdf that is parameterized by l + // see https://bruop.github.io/ibl/ + // Typically you'd have the following: + // float pdf = D_GGX(NoH, roughness) * NoH / (4.0 * VoH); + // but since V = N => VoH == NoH + ggx.pdf /= 4.0; + + return ggx; +} + +// NDF +float D_Ashikhmin(float NdotH, float roughness) +{ + float alpha = roughness * roughness; + // Ashikhmin 2007, "Distribution-based BRDFs" + float a2 = alpha * alpha; + float cos2h = NdotH * NdotH; + float sin2h = 1.0 - cos2h; + float sin4h = sin2h * sin2h; + float cot2 = -cos2h / (a2 * sin2h); + return 1.0 / (MATH_PI * (4.0 * a2 + 1.0) * sin4h) * (4.0 * exp(cot2) + sin4h); +} + +// NDF +float D_Charlie(float sheenRoughness, float NdotH) +{ + sheenRoughness = max(sheenRoughness, 0.000001); //clamp (0,1] + float invR = 1.0 / sheenRoughness; + float cos2h = NdotH * NdotH; + float sin2h = 1.0 - cos2h; + return (2.0 + invR) * pow(sin2h, invR * 0.5) / (2.0 * MATH_PI); +} + + +MicrofacetDistributionSample Charlie(vec2 xi, float roughness) +{ + MicrofacetDistributionSample charlie; + + float alpha = roughness * roughness; + charlie.sinTheta = pow(xi.y, alpha / (2.0*alpha + 1.0)); + charlie.cosTheta = sqrt(1.0 - charlie.sinTheta * charlie.sinTheta); + charlie.phi = 2.0 * MATH_PI * xi.x; + + // evaluate Charlie pdf (for half vector) + charlie.pdf = D_Charlie(alpha, charlie.cosTheta); + + // Apply the Jacobian to obtain a pdf that is parameterized by l + charlie.pdf /= 4.0; + + return charlie; +} + +MicrofacetDistributionSample Lambertian(vec2 xi, float roughness) +{ + MicrofacetDistributionSample lambertian; + + // Cosine weighted hemisphere sampling + // http://www.pbr-book.org/3ed-2018/Monte_Carlo_Integration/2D_Sampling_with_Multidimensional_Transformations.html#Cosine-WeightedHemisphereSampling + lambertian.cosTheta = sqrt(1.0 - xi.y); + lambertian.sinTheta = sqrt(xi.y); // equivalent to `sqrt(1.0 - cosTheta*cosTheta)`; + lambertian.phi = 2.0 * MATH_PI * xi.x; + + lambertian.pdf = lambertian.cosTheta / MATH_PI; // evaluation for solid angle, therefore drop the sinTheta + + return lambertian; +} + + +// getImportanceSample returns an importance sample direction with pdf in the .w component +vec4 getImportanceSample(int sampleIndex, vec3 N, float roughness) +{ + // generate a quasi monte carlo point in the unit square [0.1)^2 + vec2 xi = hammersley2d(sampleIndex, u_sampleCount); + + MicrofacetDistributionSample importanceSample; + + // generate the points on the hemisphere with a fitting mapping for + // the distribution (e.g. lambertian uses a cosine importance) + if(u_distribution == cLambertian) + { + importanceSample = Lambertian(xi, roughness); + } + else if(u_distribution == cGGX) + { + // Trowbridge-Reitz / GGX microfacet model (Walter et al) + // https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.html + importanceSample = GGX(xi, roughness); + } + else if(u_distribution == cCharlie) + { + importanceSample = Charlie(xi, roughness); + } + + // transform the hemisphere sample to the normal coordinate frame + // i.e. rotate the hemisphere to the normal direction + vec3 localSpaceDirection = normalize(vec3( + importanceSample.sinTheta * cos(importanceSample.phi), + importanceSample.sinTheta * sin(importanceSample.phi), + importanceSample.cosTheta + )); + mat3 TBN = generateTBN(N); + vec3 direction = TBN * localSpaceDirection; + + return vec4(direction, importanceSample.pdf); +} + +// Mipmap Filtered Samples (GPU Gems 3, 20.4) +// https://developer.nvidia.com/gpugems/gpugems3/part-iii-rendering/chapter-20-gpu-based-importance-sampling +// https://cgg.mff.cuni.cz/~jaroslav/papers/2007-sketch-fis/Final_sap_0073.pdf +float computeLod(float pdf) +{ + // // Solid angle of current sample -- bigger for less likely samples + // float omegaS = 1.0 / (float(u_sampleCount) * pdf); + // // Solid angle of texel + // // note: the factor of 4.0 * MATH_PI + // float omegaP = 4.0 * MATH_PI / (6.0 * float(u_width) * float(u_width)); + // // Mip level is determined by the ratio of our sample's solid angle to a texel's solid angle + // // note that 0.5 * log2 is equivalent to log4 + // float lod = 0.5 * log2(omegaS / omegaP); + + // babylon introduces a factor of K (=4) to the solid angle ratio + // this helps to avoid undersampling the environment map + // this does not appear in the original formulation by Jaroslav Krivanek and Mark Colbert + // log4(4) == 1 + // lod += 1.0; + + // We achieved good results by using the original formulation from Krivanek & Colbert adapted to cubemaps + + // https://cgg.mff.cuni.cz/~jaroslav/papers/2007-sketch-fis/Final_sap_0073.pdf + float lod = 0.5 * log2( 6.0 * float(u_width) * float(u_width) / (float(u_sampleCount) * pdf)); + + + return lod; +} + +vec3 filterColor(vec3 N) +{ + //return textureLod(uCubeMap, N, 3.0).rgb; + vec3 color = vec3(0.f); + float weight = 0.0f; + + for(int i = 0; i < u_sampleCount; ++i) + { + vec4 importanceSample = getImportanceSample(i, N, u_roughness); + + vec3 H = vec3(importanceSample.xyz); + float pdf = importanceSample.w; + + // mipmap filtered samples (GPU Gems 3, 20.4) + float lod = computeLod(pdf); + + // apply the bias to the lod + lod += u_lodBias; + + if(u_distribution == cLambertian) + { + // sample lambertian at a lower resolution to avoid fireflies + vec3 lambertian = textureLod(uCubeMap, H, lod).rgb; + + //// the below operations cancel each other out + // lambertian *= NdotH; // lamberts law + // lambertian /= pdf; // invert bias from importance sampling + // lambertian /= MATH_PI; // convert irradiance to radiance https://seblagarde.wordpress.com/2012/01/08/pi-or-not-to-pi-in-game-lighting-equation/ + + color += lambertian; + } + else if(u_distribution == cGGX || u_distribution == cCharlie) + { + // Note: reflect takes incident vector. + vec3 V = N; + vec3 L = normalize(reflect(-V, H)); + float NdotL = dot(N, L); + + if (NdotL > 0.0) + { + if(u_roughness == 0.0) + { + // without this the roughness=0 lod is too high + lod = u_lodBias; + } + vec3 sampleColor = textureLod(uCubeMap, L, lod).rgb; + color += sampleColor * NdotL; + weight += NdotL; + } + } + } + + if(weight != 0.0f) + { + color /= weight; + } + else + { + color /= float(u_sampleCount); + } + + return color.rgb ; +} + +// From the filament docs. Geometric Shadowing function +// https://google.github.io/filament/Filament.html#toc4.4.2 +float V_SmithGGXCorrelated(float NoV, float NoL, float roughness) { + float a2 = pow(roughness, 4.0); + float GGXV = NoL * sqrt(NoV * NoV * (1.0 - a2) + a2); + float GGXL = NoV * sqrt(NoL * NoL * (1.0 - a2) + a2); + return 0.5 / (GGXV + GGXL); +} + +// https://github.com/google/filament/blob/master/shaders/src/brdf.fs#L136 +float V_Ashikhmin(float NdotL, float NdotV) +{ + return clamp(1.0 / (4.0 * (NdotL + NdotV - NdotL * NdotV)), 0.0, 1.0); +} + +// Compute LUT for GGX distribution. +// See https://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf +vec3 LUT(float NdotV, float roughness) +{ + // Compute spherical view vector: (sin(phi), 0, cos(phi)) + vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV); + + // The macro surface normal just points up. + vec3 N = vec3(0.0, 0.0, 1.0); + + // To make the LUT independant from the material's F0, which is part of the Fresnel term + // when substituted by Schlick's approximation, we factor it out of the integral, + // yielding to the form: F0 * I1 + I2 + // I1 and I2 are slighlty different in the Fresnel term, but both only depend on + // NoL and roughness, so they are both numerically integrated and written into two channels. + float A = 0.0; + float B = 0.0; + float C = 0.0; + + for(int i = 0; i < u_sampleCount; ++i) + { + // Importance sampling, depending on the distribution. + vec4 importanceSample = getImportanceSample(i, N, roughness); + vec3 H = importanceSample.xyz; + // float pdf = importanceSample.w; + vec3 L = normalize(reflect(-V, H)); + + float NdotL = saturate(L.z); + float NdotH = saturate(H.z); + float VdotH = saturate(dot(V, H)); + if (NdotL > 0.0) + { + if (u_distribution == cGGX) + { + // LUT for GGX distribution. + + // Taken from: https://bruop.github.io/ibl + // Shadertoy: https://www.shadertoy.com/view/3lXXDB + // Terms besides V are from the GGX PDF we're dividing by. + float V_pdf = V_SmithGGXCorrelated(NdotV, NdotL, roughness) * VdotH * NdotL / NdotH; + float Fc = pow(1.0 - VdotH, 5.0); + A += (1.0 - Fc) * V_pdf; + B += Fc * V_pdf; + C += 0.0; + } + + if (u_distribution == cCharlie) + { + // LUT for Charlie distribution. + float sheenDistribution = D_Charlie(roughness, NdotH); + float sheenVisibility = V_Ashikhmin(NdotL, NdotV); + + A += 0.0; + B += 0.0; + C += sheenVisibility * sheenDistribution * NdotL * VdotH; + } + } + } + + // The PDF is simply pdf(v, h) -> NDF * . + // To parametrize the PDF over l, use the Jacobian transform, yielding to: pdf(v, l) -> NDF * / 4 + // Since the BRDF divide through the PDF to be normalized, the 4 can be pulled out of the integral. + return vec3(4.0 * A, 4.0 * B, 4.0 * 2.0 * MATH_PI * C) / float(u_sampleCount); +} + + + +// entry point +void main() +{ + vec3 color = vec3(0); + + if(u_isGeneratingLUT == 0) + { + vec2 newUV = texCoord ; + + newUV = newUV*2.0-1.0; + + vec3 scan = uvToXYZ(u_currentFace, newUV); + + vec3 direction = normalize(scan); + direction.y = -direction.y; + + color = filterColor(direction); + } + else + { + color = LUT(texCoord.x, texCoord.y); + } + + fragmentColor = vec4(color,1.0); +} diff --git a/src/viewer3d/assets/panorama_to_cubemap.frag b/src/viewer3d/assets/panorama_to_cubemap.frag new file mode 100644 index 00000000..424830d7 --- /dev/null +++ b/src/viewer3d/assets/panorama_to_cubemap.frag @@ -0,0 +1,61 @@ +#define MATH_PI 3.1415926535897932384626433832795 +#define MATH_INV_PI (1.0 / MATH_PI) + +precision highp float; + + +in vec2 texCoord; +out vec4 fragmentColor; + + +uniform int u_currentFace; + +//uniform sampler2D u_inputTexture; +uniform sampler2D u_panorama; + +vec3 uvToXYZ(int face, vec2 uv) +{ + if(face == 0) + return vec3( 1.f, uv.y, -uv.x); + + else if(face == 1) + return vec3( -1.f, uv.y, uv.x); + + else if(face == 2) + return vec3( +uv.x, -1.f, +uv.y); + + else if(face == 3) + return vec3( +uv.x, 1.f, -uv.y); + + else if(face == 4) + return vec3( +uv.x, uv.y, 1.f); + + else //if(face == 5) + { return vec3( -uv.x, +uv.y, -1.f);} +} + +vec2 dirToUV(vec3 dir) +{ + return vec2( + 0.5f + 0.5f * atan(dir.z, dir.x) / MATH_PI, + 1.f - acos(dir.y) / MATH_PI); +} + +vec3 panoramaToCubeMap(int face, vec2 texCoord) +{ + vec2 texCoordNew = texCoord*2.0-1.0; + vec3 scan = uvToXYZ(face, texCoordNew); + vec3 direction = normalize(scan); + vec2 src = dirToUV(direction); + + return texture(u_panorama, src).rgb; +} + + + +void main(void) +{ + fragmentColor = vec4(0.0, 0.0, 0.0, 1.0); + + fragmentColor.rgb = panoramaToCubeMap(u_currentFace, texCoord); +} \ No newline at end of file diff --git a/src/viewer3d/iblsampler.cpp b/src/viewer3d/iblsampler.cpp index 0a9e9472..d6e10485 100644 --- a/src/viewer3d/iblsampler.cpp +++ b/src/viewer3d/iblsampler.cpp @@ -1,4 +1,6 @@ #include "iblsampler.h" +#include "shadercache.h" + #define STB_IMAGE_IMPLEMENTATION #include "gltf/stb_image.h" @@ -6,6 +8,12 @@ #include #include +IblSampler::IblSampler() +{ + shaderCache = new ShaderCache(); + shaderCache->addShaderFile("", ""); +} + // stbi_loadf_from_memory // https://stackoverflow.com/questions/32666824/qopengltexture-qt-from-raw-data-freeimage void IblSampler::loadPanorama(const QString& path) diff --git a/src/viewer3d/iblsampler.h b/src/viewer3d/iblsampler.h index 7021f763..c3b426be 100644 --- a/src/viewer3d/iblsampler.h +++ b/src/viewer3d/iblsampler.h @@ -5,6 +5,7 @@ class QOpenGLFramebufferObject; class QOpenGLFunctions; class QOpenGLTexture; +class ShaderCache; // reference: // https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/ibl_sampler.js @@ -36,6 +37,10 @@ class IblSampler { QOpenGLFramebufferObject* framebuffer; + ShaderCache* shaderCache; + + IblSampler(); + void loadPanorama(const QString& path); QOpenGLTexture* createCubemap(bool withMipmaps); diff --git a/src/viewer3d/shadercache.cpp b/src/viewer3d/shadercache.cpp new file mode 100644 index 00000000..522d5f6d --- /dev/null +++ b/src/viewer3d/shadercache.cpp @@ -0,0 +1,50 @@ +#include "shadercache.h" +#include + +void ShaderCache::addShaderSource(const QString& shaderName, + const QString& shaderSource) +{ + shaders[shaderName] = shaderSource; +} + +void ShaderCache::addShaderFile(const QString& shaderName, + const QString& filePath) +{ + QFile file(filePath); + file.open(QFile::ReadOnly); + + auto source = file.readAll(); + this->addShaderSource(shaderName, source); + + file.close(); +} + +QString ShaderCache::generateShaderSource(const QString& shaderName, + const QVector defines = {}) +{ + QString flags = ""; + for (auto define : defines) { + flags += "#define " + define + "\n"; + } + + auto source = getShaderAndResolveIncludes(shaderName); + auto finalSource = shaderVersion + flags + source; +} + +QString ShaderCache::getShaderAndResolveIncludes(const QString& shader) +{ + auto source = this->shaders[shader]; + + // https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/Renderer/shader_cache.js#L15 + // todo: re-add changes to shaders? + for (auto shaderFile : this->shaders.keys()) { + auto pattern = "#include <" + shaderFile + ">"; + + if (source.contains(pattern)) { + auto shaderSource = this->shaders[shaderFile]; + source.replace(pattern, shaderSource); + } + } + + return source; +} \ No newline at end of file diff --git a/src/viewer3d/shadercache.h b/src/viewer3d/shadercache.h new file mode 100644 index 00000000..b769f9df --- /dev/null +++ b/src/viewer3d/shadercache.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +class QOpenGLShaderProgram; + +class ShaderCache { + QMap shaders; + QString shaderVersion = "#version 150 core"; + +public: + void addShaderSource(const QString& shaderName, + const QString& shaderSource); + void addShaderFile(const QString& shaderName, const QString& filePath); + + QString generateShaderSource(const QString& shaderName, + const QVector defines = {}); + +private: + QString getShaderAndResolveIncludes(const QString& shader); +}; \ No newline at end of file From 59496c6a3115b751e86e18d5129f00dfbee46b3e Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 20 Dec 2022 03:07:19 -0500 Subject: [PATCH 062/100] add panorma to cubemap conversion --- src/viewer3d/assets.qrc | 2 + src/viewer3d/assets/fullscreen.vert | 10 + src/viewer3d/assets/panorama_to_cubemap.frag | 53 +++--- src/viewer3d/iblsampler.cpp | 187 ++++++++++++++++++- src/viewer3d/iblsampler.h | 15 +- src/viewer3d/shadercache.cpp | 4 +- src/viewer3d/shadercache.h | 2 +- src/viewer3d/viewer3d.cpp | 11 +- src/viewer3d/viewer3d.h | 4 + 9 files changed, 243 insertions(+), 45 deletions(-) create mode 100644 src/viewer3d/assets/fullscreen.vert diff --git a/src/viewer3d/assets.qrc b/src/viewer3d/assets.qrc index b0ed8cb9..c7167c59 100644 --- a/src/viewer3d/assets.qrc +++ b/src/viewer3d/assets.qrc @@ -3,5 +3,7 @@ assets/brick.jpg assets/cube.gltf assets/panorama.hdr + assets/fullscreen.vert + assets/panorama_to_cubemap.frag \ No newline at end of file diff --git a/src/viewer3d/assets/fullscreen.vert b/src/viewer3d/assets/fullscreen.vert new file mode 100644 index 00000000..0806d208 --- /dev/null +++ b/src/viewer3d/assets/fullscreen.vert @@ -0,0 +1,10 @@ +in vec3 a_pos; +in vec2 a_texCoord; + +out vec2 v_texCoord; + +void main() +{ + v_texCoord = a_texCoord*vec2(1,1); + gl_Position = vec4(a_pos,1); +} \ No newline at end of file diff --git a/src/viewer3d/assets/panorama_to_cubemap.frag b/src/viewer3d/assets/panorama_to_cubemap.frag index 424830d7..1518c6e7 100644 --- a/src/viewer3d/assets/panorama_to_cubemap.frag +++ b/src/viewer3d/assets/panorama_to_cubemap.frag @@ -1,61 +1,56 @@ #define MATH_PI 3.1415926535897932384626433832795 #define MATH_INV_PI (1.0 / MATH_PI) -precision highp float; - - -in vec2 texCoord; +in vec2 v_texCoord; out vec4 fragmentColor; - uniform int u_currentFace; -//uniform sampler2D u_inputTexture; +// uniform sampler2D u_inputTexture; uniform sampler2D u_panorama; vec3 uvToXYZ(int face, vec2 uv) { - if(face == 0) - return vec3( 1.f, uv.y, -uv.x); + if (face == 0) + return vec3(1.f, uv.y, -uv.x); - else if(face == 1) - return vec3( -1.f, uv.y, uv.x); + else if (face == 1) + return vec3(-1.f, uv.y, uv.x); - else if(face == 2) - return vec3( +uv.x, -1.f, +uv.y); + else if (face == 2) + return vec3(+uv.x, -1.f, +uv.y); - else if(face == 3) - return vec3( +uv.x, 1.f, -uv.y); + else if (face == 3) + return vec3(+uv.x, 1.f, -uv.y); - else if(face == 4) - return vec3( +uv.x, uv.y, 1.f); + else if (face == 4) + return vec3(+uv.x, uv.y, 1.f); - else //if(face == 5) - { return vec3( -uv.x, +uv.y, -1.f);} + else // if(face == 5) + { + return vec3(-uv.x, +uv.y, -1.f); + } } vec2 dirToUV(vec3 dir) { - return vec2( - 0.5f + 0.5f * atan(dir.z, dir.x) / MATH_PI, - 1.f - acos(dir.y) / MATH_PI); + return vec2(0.5f + 0.5f * atan(dir.z, dir.x) / MATH_PI, + 1.f - acos(dir.y) / MATH_PI); } vec3 panoramaToCubeMap(int face, vec2 texCoord) { - vec2 texCoordNew = texCoord*2.0-1.0; - vec3 scan = uvToXYZ(face, texCoordNew); - vec3 direction = normalize(scan); - vec2 src = dirToUV(direction); + vec2 texCoordNew = texCoord * 2.0 - 1.0; + vec3 scan = uvToXYZ(face, texCoordNew); + vec3 direction = normalize(scan); + vec2 src = dirToUV(direction); - return texture(u_panorama, src).rgb; + return texture(u_panorama, src).rgb; } - - void main(void) { fragmentColor = vec4(0.0, 0.0, 0.0, 1.0); - fragmentColor.rgb = panoramaToCubeMap(u_currentFace, texCoord); + fragmentColor.rgb = panoramaToCubeMap(u_currentFace, v_texCoord); } \ No newline at end of file diff --git a/src/viewer3d/iblsampler.cpp b/src/viewer3d/iblsampler.cpp index d6e10485..6edc5239 100644 --- a/src/viewer3d/iblsampler.cpp +++ b/src/viewer3d/iblsampler.cpp @@ -5,13 +5,32 @@ #include "gltf/stb_image.h" #include +#include +#include #include +#include +#include #include +#include + +enum class VertexUsage : int { + Position = 0, + Color = 1, + TexCoord0 = 2, + TexCoord1 = 3, + TexCoord2 = 4, + TexCoord3 = 5, + Normal = 6, + Tangent = 7, + Count = 8 +}; IblSampler::IblSampler() { shaderCache = new ShaderCache(); - shaderCache->addShaderFile("", ""); + shaderCache->addShaderFile("fullscreen.vert", ":assets/fullscreen.vert"); + shaderCache->addShaderFile("panorama_to_cubemap.frag", + ":assets/panorama_to_cubemap.frag"); } // stbi_loadf_from_memory @@ -63,15 +82,165 @@ QOpenGLTexture* IblSampler::createCubemap(bool withMipmaps) QOpenGLTexture* IblSampler::createLut() { - auto cubemap = new QOpenGLTexture(QOpenGLTexture::Target2D); - cubemap->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); - cubemap->setWrapMode(QOpenGLTexture::ClampToEdge); - cubemap->create(); + auto texture = new QOpenGLTexture(QOpenGLTexture::Target2D); + texture->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); + texture->setWrapMode(QOpenGLTexture::ClampToEdge); + texture->create(); - cubemap->setSize(textureSize, textureSize, 3); + texture->setSize(textureSize, textureSize, 3); // cubemap->setMipLevels() - cubemap->setFormat(QOpenGLTexture::RGBA32F); - cubemap->allocateStorage(); + texture->setFormat(QOpenGLTexture::RGBA32F); + texture->allocateStorage(); - return cubemap; + return texture; +} + +void IblSampler::init(const QString& panoramaPath) +{ + framebuffer = new QOpenGLFramebufferObject(textureSize, textureSize); + if (!framebuffer->isValid()) { + qFatal("FBO could not be created"); + } + // setup vbo + vao = new QOpenGLVertexArrayObject; + if (vao->create()) + vao->bind(); + + // setup vertex array + QVector data; + // TRIANGLE 1 + data.append(-1); + data.append(-1); + data.append(0); + + data.append(0); + data.append(0); + + data.append(1); + data.append(-1); + data.append(0); + + data.append(1); + data.append(0); + + data.append(-1); + data.append(1); + data.append(0); + + data.append(0); + data.append(1); + + // TRIANGLE 2 + data.append(-1); + data.append(1); + data.append(0); + + data.append(0); + data.append(1); + + data.append(1); + data.append(-1); + data.append(0); + + data.append(1); + data.append(0); + + data.append(1); + data.append(1); + data.append(0); + + data.append(1); + data.append(1); + + vbo = new QOpenGLBuffer; + vbo->create(); + vbo->bind(); + vbo->allocate(data.constData(), data.count() * sizeof(float)); + vbo->release(); + + this->loadPanorama(panoramaPath); + + cubemapTexture = this->createCubemap(true); + + this->panoramaToCubemap(); +} + +void IblSampler::panoramaToCubemap() +{ + // todo: cleanup old cubemap + + auto vertSource = shaderCache->generateShaderSource("fullscreen.vert"); + auto fragSource = + shaderCache->generateShaderSource("panorama_to_cubemap.frag"); + + auto shader = createShader(vertSource, fragSource); + + // render each face + for (int i = 0; i < 6; i++) { + gl->glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->handle()); + gl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, + GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, + cubemapTexture->textureId(), 0); + + gl->glViewport(0, 0, textureSize, textureSize); + gl->glClearColor(0, 0, 0, 1); + gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + shader->bind(); + inputTexture->bind(0); + + shader->setUniformValue("u_panorama", 0); + shader->setUniformValue("u_currentFace", i); + + vbo->bind(); + gl->glEnableVertexAttribArray((int)VertexUsage::Position); + gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, + GL_FALSE, 5 * sizeof(float), nullptr); + gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, + GL_FALSE, 5 * sizeof(float), + reinterpret_cast(3 * sizeof(float))); + + gl->glDrawArrays(GL_TRIANGLES, 0, 6); + + vbo->release(); + } + + // gl->glBindFramebuffer(GL_FRAMEBUFFER, 0); + auto ctx = QOpenGLContext::currentContext(); + gl->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); +} + +QOpenGLShaderProgram* IblSampler::createShader(const QString& vertSource, + const QString& fragSource) +{ + QOpenGLShader* vshader = new QOpenGLShader(QOpenGLShader::Vertex); + QOpenGLShader* fshader = new QOpenGLShader(QOpenGLShader::Fragment); + auto program = new QOpenGLShaderProgram; + + if (!vshader->compileSourceCode(vertSource)) { + qDebug() << "VERTEX SHADER ERROR"; + qDebug() << vshader->log(); + } + + if (!fshader->compileSourceCode(fragSource)) { + qDebug() << "FRAGMENT SHADER ERROR"; + qDebug() << fshader->log(); + } + + program->removeAllShaders(); + + program->addShader(vshader); + program->addShader(fshader); + + program->bindAttributeLocation("a_pos", (int)VertexUsage::Position); + program->bindAttributeLocation("a_color", (int)VertexUsage::Color); + program->bindAttributeLocation("a_texCoord", (int)VertexUsage::TexCoord0); + + if (!program->link()) { + qDebug() << "SHADER LINK ERROR"; + qDebug() << program->log(); + } + + return program; } \ No newline at end of file diff --git a/src/viewer3d/iblsampler.h b/src/viewer3d/iblsampler.h index c3b426be..f9e5b628 100644 --- a/src/viewer3d/iblsampler.h +++ b/src/viewer3d/iblsampler.h @@ -5,7 +5,10 @@ class QOpenGLFramebufferObject; class QOpenGLFunctions; class QOpenGLTexture; +class QOpenGLBuffer; +class QOpenGLVertexArrayObject; class ShaderCache; +class QOpenGLShaderProgram; // reference: // https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/ibl_sampler.js @@ -32,10 +35,13 @@ class IblSampler { GLuint charlieLutTextureID; QOpenGLTexture* inputTexture; - GLuint inputTextureID; - GLuint cubemapTextureID; + QOpenGLTexture* cubemapTexture; + // GLuint inputTextureID; + // GLuint cubemapTextureID; QOpenGLFramebufferObject* framebuffer; + QOpenGLVertexArrayObject* vao; + QOpenGLBuffer* vbo; ShaderCache* shaderCache; @@ -57,4 +63,9 @@ class IblSampler { void applyFilter(int distribution, float roughness, int targetMipLevel, int targetTexture, int sampleCount, float lodBias = 0.0); + + void init(const QString& panoramaPath); + + QOpenGLShaderProgram* createShader(const QString& vertSource, + const QString& fragSource); }; \ No newline at end of file diff --git a/src/viewer3d/shadercache.cpp b/src/viewer3d/shadercache.cpp index 522d5f6d..8b6e498d 100644 --- a/src/viewer3d/shadercache.cpp +++ b/src/viewer3d/shadercache.cpp @@ -20,7 +20,7 @@ void ShaderCache::addShaderFile(const QString& shaderName, } QString ShaderCache::generateShaderSource(const QString& shaderName, - const QVector defines = {}) + const QVector defines) { QString flags = ""; for (auto define : defines) { @@ -29,6 +29,8 @@ QString ShaderCache::generateShaderSource(const QString& shaderName, auto source = getShaderAndResolveIncludes(shaderName); auto finalSource = shaderVersion + flags + source; + + return finalSource; } QString ShaderCache::getShaderAndResolveIncludes(const QString& shader) diff --git a/src/viewer3d/shadercache.h b/src/viewer3d/shadercache.h index b769f9df..1acfe6da 100644 --- a/src/viewer3d/shadercache.h +++ b/src/viewer3d/shadercache.h @@ -7,7 +7,7 @@ class QOpenGLShaderProgram; class ShaderCache { QMap shaders; - QString shaderVersion = "#version 150 core"; + QString shaderVersion = "#version 150 core \n"; public: void addShaderSource(const QString& shaderName, diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 807455e4..2aea8ad7 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -79,9 +79,12 @@ void Viewer3D::initializeGL() projMatrix.perspective(45, this->width() / (float)this->height(), 1.0, 1000); - IblSampler sampler; - sampler.gl = gl; - sampler.loadPanorama(":assets/panorama.hdr"); + iblSampler = new IblSampler(); + iblSampler->gl = gl; + iblSampler->init(":assets/panorama.hdr"); + + // do all the conversions + // iblSampler->panoramaToCubemap(); } void Viewer3D::paintGL() @@ -99,6 +102,8 @@ void Viewer3D::paintGL() vao->bind(); // todo: bind textures + // iblSampler->inputTexture->bind(0); + iblSampler->cubemapTexture->bind(0); mainProgram->bind(); mainProgram->setUniformValue("worldMatrix", worldMatrix); diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index a43d83dd..a3e81168 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -22,6 +22,8 @@ class QOpenGLBuffer; class QOpenGLVertexArrayObject; class Mesh; +class IblSampler; + class Viewer3D : public QOpenGLWidget { QOpenGLTexture* texture = nullptr; QOpenGLShaderProgram* mainProgram = nullptr; @@ -57,6 +59,8 @@ class Viewer3D : public QOpenGLWidget { bool leftMouseDown = false; bool middleMouseDown = false; + IblSampler* iblSampler; + protected: void initializeGL(); void paintGL(); From 5cb66e46fe9983b28e02eb073221cc26ee0375ea Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 20 Dec 2022 03:47:03 -0500 Subject: [PATCH 063/100] add lambertian, ggx and sheen conversion --- src/viewer3d/assets.qrc | 1 + src/viewer3d/iblsampler.cpp | 89 +++++++++++++++++++++++++++++++++++++ src/viewer3d/iblsampler.h | 21 +++++---- 3 files changed, 103 insertions(+), 8 deletions(-) diff --git a/src/viewer3d/assets.qrc b/src/viewer3d/assets.qrc index c7167c59..8c351708 100644 --- a/src/viewer3d/assets.qrc +++ b/src/viewer3d/assets.qrc @@ -5,5 +5,6 @@ assets/panorama.hdr assets/fullscreen.vert assets/panorama_to_cubemap.frag + assets/ibl_filtering.frag \ No newline at end of file diff --git a/src/viewer3d/iblsampler.cpp b/src/viewer3d/iblsampler.cpp index 6edc5239..3427ea6d 100644 --- a/src/viewer3d/iblsampler.cpp +++ b/src/viewer3d/iblsampler.cpp @@ -1,5 +1,6 @@ #include "iblsampler.h" #include "shadercache.h" +#include #define STB_IMAGE_IMPLEMENTATION #include "gltf/stb_image.h" @@ -31,6 +32,8 @@ IblSampler::IblSampler() shaderCache->addShaderFile("fullscreen.vert", ":assets/fullscreen.vert"); shaderCache->addShaderFile("panorama_to_cubemap.frag", ":assets/panorama_to_cubemap.frag"); + shaderCache->addShaderFile("ibl_filtering.frag", + ":assets/ibl_filtering.frag"); } // stbi_loadf_from_memory @@ -97,6 +100,9 @@ QOpenGLTexture* IblSampler::createLut() void IblSampler::init(const QString& panoramaPath) { + mipmapLevels = + std::floor(std::log2(this->textureSize)) + 1 - this->lowestMipLevel; + framebuffer = new QOpenGLFramebufferObject(textureSize, textureSize); if (!framebuffer->isValid()) { qFatal("FBO could not be created"); @@ -206,6 +212,10 @@ void IblSampler::panoramaToCubemap() vbo->release(); } + cubemapTexture->bind(); + cubemapTexture->generateMipMaps(); + cubemapTexture->release(); + // gl->glBindFramebuffer(GL_FRAMEBUFFER, 0); auto ctx = QOpenGLContext::currentContext(); gl->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); @@ -243,4 +253,83 @@ QOpenGLShaderProgram* IblSampler::createShader(const QString& vertSource, } return program; +} + +void IblSampler::applyFilter(int distribution, float roughness, + int targetMipLevel, int targetTexture, + int sampleCount, float lodBias = 0.0) +{ + auto currentTextureSize = this->textureSize >> targetMipLevel; + + auto vertSource = shaderCache->generateShaderSource("fullscreen.vert"); + auto fragSource = shaderCache->generateShaderSource("ibl_filtering.frag"); + + auto shader = createShader(vertSource, fragSource); + + // render each face + for (int i = 0; i < 6; i++) { + gl->glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->handle()); + gl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, + GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, + targetTexture, targetMipLevel); + + gl->glViewport(0, 0, currentTextureSize, currentTextureSize); + gl->glClearColor(0, 0, 0, 1); + gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + shader->bind(); + cubemapTexture->bind(0); + shader->setUniformValue("u_cubemapTexture", 0); + + shader->setUniformValue("u_roughness", roughness); + shader->setUniformValue("u_sampleCount", sampleCount); + shader->setUniformValue("u_width", textureSize); + shader->setUniformValue("u_lodBias", lodBias); + shader->setUniformValue("u_distribution", distribution); + shader->setUniformValue("u_currentFace", i); + shader->setUniformValue("u_isGeneratingLUT", 0); + + vbo->bind(); + gl->glEnableVertexAttribArray((int)VertexUsage::Position); + gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, + GL_FALSE, 5 * sizeof(float), nullptr); + gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, + GL_FALSE, 5 * sizeof(float), + reinterpret_cast(3 * sizeof(float))); + + gl->glDrawArrays(GL_TRIANGLES, 0, 6); + + vbo->release(); + } + + // gl->glBindFramebuffer(GL_FRAMEBUFFER, 0); + auto ctx = QOpenGLContext::currentContext(); + gl->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); +} + +void IblSampler::cubeMapToLambertian() +{ + this->applyFilter(0, 0.0, 0, this->lambertianTexture->textureId(), + this->lambertianSampleCount); +} + +void IblSampler::cubeMapToGGX() +{ + for (int currentMipLevel = 0; currentMipLevel <= this->mipmapLevels; + ++currentMipLevel) { + auto roughness = (currentMipLevel) / (this->mipmapLevels - 1); + this->applyFilter(1, roughness, currentMipLevel, + this->ggxTexture->textureId(), this->ggxSampleCount); + } +} +void IblSampler::cubeMapToSheen() +{ + for (auto currentMipLevel = 0; currentMipLevel <= this->mipmapLevels; + ++currentMipLevel) { + auto roughness = (currentMipLevel) / (this->mipmapLevels - 1); + this->applyFilter(2, roughness, currentMipLevel, + this->sheenTexture->textureId(), + this->sheenSamplCount); + } } \ No newline at end of file diff --git a/src/viewer3d/iblsampler.h b/src/viewer3d/iblsampler.h index f9e5b628..c86760cb 100644 --- a/src/viewer3d/iblsampler.h +++ b/src/viewer3d/iblsampler.h @@ -25,14 +25,19 @@ class IblSampler { int lowestMipLevel = 4; int lutResolution = 1024; - int mipmapCount = -1; - - GLuint lambertianTextureID; - GLuint ggxTextureID; - GLuint sheenTextureID; - - GLuint ggxLutTextureID; - GLuint charlieLutTextureID; + int mipmapLevels = -1; + + QOpenGLTexture* lambertianTexture; + QOpenGLTexture* ggxTexture; + QOpenGLTexture* sheenTexture; + // GLuint lambertianTextureID; + // GLuint ggxTextureID; + // GLuint sheenTextureID; + + QOpenGLTexture* ggxLutTextureID; + QOpenGLTexture* charlieLutTextureID; + // GLuint ggxLutTextureID; + // GLuint charlieLutTextureID; QOpenGLTexture* inputTexture; QOpenGLTexture* cubemapTexture; From d155b3dc11103195994289d35ec0a702d8a827cd Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 20 Dec 2022 10:58:08 -0500 Subject: [PATCH 064/100] add lut filtering --- src/viewer3d/assets/ibl_filtering.frag | 229 ++++++++++++------------- src/viewer3d/iblsampler.cpp | 203 +++++++++++++++------- src/viewer3d/iblsampler.h | 8 +- src/viewer3d/viewer3d.cpp | 2 + 4 files changed, 254 insertions(+), 188 deletions(-) diff --git a/src/viewer3d/assets/ibl_filtering.frag b/src/viewer3d/assets/ibl_filtering.frag index 0423fe7e..fad7a9df 100644 --- a/src/viewer3d/assets/ibl_filtering.frag +++ b/src/viewer3d/assets/ibl_filtering.frag @@ -1,9 +1,9 @@ -//#version 450 -//#extension GL_ARB_separate_shader_objects : enable +// #version 450 +// #extension GL_ARB_separate_shader_objects : enable -precision mediump float; +// precision mediump float; #define MATH_PI 3.1415926535897932384626433832795 -//#define MATH_INV_PI (1.0 / MATH_PI) +// #define MATH_INV_PI (1.0 / MATH_PI) uniform samplerCube uCubeMap; @@ -12,57 +12,51 @@ const int cLambertian = 0; const int cGGX = 1; const int cCharlie = 2; - -//layout(push_constant) uniform FilterParameters { -uniform float u_roughness; -uniform int u_sampleCount; -uniform int u_width; -uniform float u_lodBias; -uniform int u_distribution; // enum +// layout(push_constant) uniform FilterParameters { +uniform float u_roughness; +uniform int u_sampleCount; +uniform int u_width; +uniform float u_lodBias; +uniform int u_distribution; // enum uniform int u_currentFace; uniform int u_isGeneratingLUT; -//layout (location = 0) in vec2 inUV; -in vec2 texCoord; - +// layout (location = 0) in vec2 inUV; +in vec2 v_texCoord; out vec4 fragmentColor; -//layout(location = 6) out vec3 outLUT; - +// layout(location = 6) out vec3 outLUT; vec3 uvToXYZ(int face, vec2 uv) { - if(face == 0) - return vec3( 1.f, uv.y, -uv.x); + if (face == 0) + return vec3(1.f, uv.y, -uv.x); - else if(face == 1) - return vec3( -1.f, uv.y, uv.x); + else if (face == 1) + return vec3(-1.f, uv.y, uv.x); - else if(face == 2) - return vec3( +uv.x, -1.f, +uv.y); + else if (face == 2) + return vec3(+uv.x, -1.f, +uv.y); - else if(face == 3) - return vec3( +uv.x, 1.f, -uv.y); + else if (face == 3) + return vec3(+uv.x, 1.f, -uv.y); - else if(face == 4) - return vec3( +uv.x, uv.y, 1.f); + else if (face == 4) + return vec3(+uv.x, uv.y, 1.f); - else {//if(face == 5) - return vec3( -uv.x, +uv.y, -1.f);} + else { // if(face == 5) + return vec3(-uv.x, +uv.y, -1.f); + } } vec2 dirToUV(vec3 dir) { - return vec2( - 0.5f + 0.5f * atan(dir.z, dir.x) / MATH_PI, - 1.f - acos(dir.y) / MATH_PI); + return vec2(0.5f + 0.5f * atan(dir.z, dir.x) / MATH_PI, + 1.f - acos(dir.y) / MATH_PI); } -float saturate(float v) -{ - return clamp(v, 0.0f, 1.0f); -} +float saturate(float v) { return clamp(v, 0.0f, 1.0f); } // Hammersley Points on the Hemisphere // CC BY 3.0 (Holger Dammertz) @@ -80,8 +74,9 @@ float radicalInverse_VdC(uint bits) // hammersley2d describes a sequence of points in the 2d unit square [0,1)^2 // that can be used for quasi Monte Carlo integration -vec2 hammersley2d(int i, int N) { - return vec2(float(i)/float(N), radicalInverse_VdC(uint(i))); +vec2 hammersley2d(int i, int N) +{ + return vec2(float(i) / float(N), radicalInverse_VdC(uint(i))); } // Hemisphere Sample @@ -94,15 +89,12 @@ mat3 generateTBN(vec3 normal) float NdotUp = dot(normal, vec3(0.0, 1.0, 0.0)); float epsilon = 0.0000001; - if (1.0 - abs(NdotUp) <= epsilon) - { + if (1.0 - abs(NdotUp) <= epsilon) { // Sampling +Y or -Y, so we need a more robust bitangent. - if (NdotUp > 0.0) - { + if (NdotUp > 0.0) { bitangent = vec3(0.0, 0.0, 1.0); } - else - { + else { bitangent = vec3(0.0, 0.0, -1.0); } } @@ -113,15 +105,15 @@ mat3 generateTBN(vec3 normal) return mat3(tangent, bitangent, normal); } -struct MicrofacetDistributionSample -{ +struct MicrofacetDistributionSample { float pdf; float cosTheta; float sinTheta; float phi; }; -float D_GGX(float NdotH, float roughness) { +float D_GGX(float NdotH, float roughness) +{ float a = NdotH * roughness; float k = roughness / (1.0 - NdotH * NdotH + a * a); return k * k * (1.0 / MATH_PI); @@ -138,7 +130,8 @@ MicrofacetDistributionSample GGX(vec2 xi, float roughness) // evaluate sampling equations float alpha = roughness * roughness; - ggx.cosTheta = saturate(sqrt((1.0 - xi.y) / (1.0 + (alpha * alpha - 1.0) * xi.y))); + ggx.cosTheta = + saturate(sqrt((1.0 - xi.y) / (1.0 + (alpha * alpha - 1.0) * xi.y))); ggx.sinTheta = sqrt(1.0 - ggx.cosTheta * ggx.cosTheta); ggx.phi = 2.0 * MATH_PI * xi.x; @@ -165,26 +158,26 @@ float D_Ashikhmin(float NdotH, float roughness) float sin2h = 1.0 - cos2h; float sin4h = sin2h * sin2h; float cot2 = -cos2h / (a2 * sin2h); - return 1.0 / (MATH_PI * (4.0 * a2 + 1.0) * sin4h) * (4.0 * exp(cot2) + sin4h); + return 1.0 / (MATH_PI * (4.0 * a2 + 1.0) * sin4h) * + (4.0 * exp(cot2) + sin4h); } // NDF float D_Charlie(float sheenRoughness, float NdotH) { - sheenRoughness = max(sheenRoughness, 0.000001); //clamp (0,1] + sheenRoughness = max(sheenRoughness, 0.000001); // clamp (0,1] float invR = 1.0 / sheenRoughness; float cos2h = NdotH * NdotH; float sin2h = 1.0 - cos2h; return (2.0 + invR) * pow(sin2h, invR * 0.5) / (2.0 * MATH_PI); } - MicrofacetDistributionSample Charlie(vec2 xi, float roughness) { MicrofacetDistributionSample charlie; float alpha = roughness * roughness; - charlie.sinTheta = pow(xi.y, alpha / (2.0*alpha + 1.0)); + charlie.sinTheta = pow(xi.y, alpha / (2.0 * alpha + 1.0)); charlie.cosTheta = sqrt(1.0 - charlie.sinTheta * charlie.sinTheta); charlie.phi = 2.0 * MATH_PI * xi.x; @@ -204,16 +197,19 @@ MicrofacetDistributionSample Lambertian(vec2 xi, float roughness) // Cosine weighted hemisphere sampling // http://www.pbr-book.org/3ed-2018/Monte_Carlo_Integration/2D_Sampling_with_Multidimensional_Transformations.html#Cosine-WeightedHemisphereSampling lambertian.cosTheta = sqrt(1.0 - xi.y); - lambertian.sinTheta = sqrt(xi.y); // equivalent to `sqrt(1.0 - cosTheta*cosTheta)`; + lambertian.sinTheta = + sqrt(xi.y); // equivalent to `sqrt(1.0 - cosTheta*cosTheta)`; lambertian.phi = 2.0 * MATH_PI * xi.x; - lambertian.pdf = lambertian.cosTheta / MATH_PI; // evaluation for solid angle, therefore drop the sinTheta + lambertian.pdf = + lambertian.cosTheta / + MATH_PI; // evaluation for solid angle, therefore drop the sinTheta return lambertian; } - -// getImportanceSample returns an importance sample direction with pdf in the .w component +// getImportanceSample returns an importance sample direction with pdf in the .w +// component vec4 getImportanceSample(int sampleIndex, vec3 N, float roughness) { // generate a quasi monte carlo point in the unit square [0.1)^2 @@ -223,28 +219,24 @@ vec4 getImportanceSample(int sampleIndex, vec3 N, float roughness) // generate the points on the hemisphere with a fitting mapping for // the distribution (e.g. lambertian uses a cosine importance) - if(u_distribution == cLambertian) - { + if (u_distribution == cLambertian) { importanceSample = Lambertian(xi, roughness); } - else if(u_distribution == cGGX) - { + else if (u_distribution == cGGX) { // Trowbridge-Reitz / GGX microfacet model (Walter et al) // https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.html importanceSample = GGX(xi, roughness); } - else if(u_distribution == cCharlie) - { + else if (u_distribution == cCharlie) { importanceSample = Charlie(xi, roughness); } // transform the hemisphere sample to the normal coordinate frame // i.e. rotate the hemisphere to the normal direction - vec3 localSpaceDirection = normalize(vec3( - importanceSample.sinTheta * cos(importanceSample.phi), - importanceSample.sinTheta * sin(importanceSample.phi), - importanceSample.cosTheta - )); + vec3 localSpaceDirection = + normalize(vec3(importanceSample.sinTheta * cos(importanceSample.phi), + importanceSample.sinTheta * sin(importanceSample.phi), + importanceSample.cosTheta)); mat3 TBN = generateTBN(N); vec3 direction = TBN * localSpaceDirection; @@ -259,35 +251,35 @@ float computeLod(float pdf) // // Solid angle of current sample -- bigger for less likely samples // float omegaS = 1.0 / (float(u_sampleCount) * pdf); // // Solid angle of texel - // // note: the factor of 4.0 * MATH_PI + // // note: the factor of 4.0 * MATH_PI // float omegaP = 4.0 * MATH_PI / (6.0 * float(u_width) * float(u_width)); - // // Mip level is determined by the ratio of our sample's solid angle to a texel's solid angle + // // Mip level is determined by the ratio of our sample's solid angle to a + // texel's solid angle // // note that 0.5 * log2 is equivalent to log4 // float lod = 0.5 * log2(omegaS / omegaP); // babylon introduces a factor of K (=4) to the solid angle ratio // this helps to avoid undersampling the environment map - // this does not appear in the original formulation by Jaroslav Krivanek and Mark Colbert - // log4(4) == 1 - // lod += 1.0; + // this does not appear in the original formulation by Jaroslav Krivanek and + // Mark Colbert log4(4) == 1 lod += 1.0; - // We achieved good results by using the original formulation from Krivanek & Colbert adapted to cubemaps + // We achieved good results by using the original formulation from Krivanek + // & Colbert adapted to cubemaps // https://cgg.mff.cuni.cz/~jaroslav/papers/2007-sketch-fis/Final_sap_0073.pdf - float lod = 0.5 * log2( 6.0 * float(u_width) * float(u_width) / (float(u_sampleCount) * pdf)); - + float lod = 0.5 * log2(6.0 * float(u_width) * float(u_width) / + (float(u_sampleCount) * pdf)); return lod; } vec3 filterColor(vec3 N) { - //return textureLod(uCubeMap, N, 3.0).rgb; + // return textureLod(uCubeMap, N, 3.0).rgb; vec3 color = vec3(0.f); float weight = 0.0f; - for(int i = 0; i < u_sampleCount; ++i) - { + for (int i = 0; i < u_sampleCount; ++i) { vec4 importanceSample = getImportanceSample(i, N, u_roughness); vec3 H = vec3(importanceSample.xyz); @@ -299,29 +291,26 @@ vec3 filterColor(vec3 N) // apply the bias to the lod lod += u_lodBias; - if(u_distribution == cLambertian) - { + if (u_distribution == cLambertian) { // sample lambertian at a lower resolution to avoid fireflies vec3 lambertian = textureLod(uCubeMap, H, lod).rgb; //// the below operations cancel each other out // lambertian *= NdotH; // lamberts law // lambertian /= pdf; // invert bias from importance sampling - // lambertian /= MATH_PI; // convert irradiance to radiance https://seblagarde.wordpress.com/2012/01/08/pi-or-not-to-pi-in-game-lighting-equation/ + // lambertian /= MATH_PI; // convert irradiance to radiance + // https://seblagarde.wordpress.com/2012/01/08/pi-or-not-to-pi-in-game-lighting-equation/ color += lambertian; } - else if(u_distribution == cGGX || u_distribution == cCharlie) - { + else if (u_distribution == cGGX || u_distribution == cCharlie) { // Note: reflect takes incident vector. vec3 V = N; vec3 L = normalize(reflect(-V, H)); float NdotL = dot(N, L); - if (NdotL > 0.0) - { - if(u_roughness == 0.0) - { + if (NdotL > 0.0) { + if (u_roughness == 0.0) { // without this the roughness=0 lod is too high lod = u_lodBias; } @@ -332,21 +321,20 @@ vec3 filterColor(vec3 N) } } - if(weight != 0.0f) - { + if (weight != 0.0f) { color /= weight; } - else - { + else { color /= float(u_sampleCount); } - return color.rgb ; + return color.rgb; } // From the filament docs. Geometric Shadowing function // https://google.github.io/filament/Filament.html#toc4.4.2 -float V_SmithGGXCorrelated(float NoV, float NoL, float roughness) { +float V_SmithGGXCorrelated(float NoV, float NoL, float roughness) +{ float a2 = pow(roughness, 4.0); float GGXV = NoL * sqrt(NoV * NoV * (1.0 - a2) + a2); float GGXL = NoV * sqrt(NoL * NoL * (1.0 - a2) + a2); @@ -360,7 +348,8 @@ float V_Ashikhmin(float NdotL, float NdotV) } // Compute LUT for GGX distribution. -// See https://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf +// See +// https://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf vec3 LUT(float NdotV, float roughness) { // Compute spherical view vector: (sin(phi), 0, cos(phi)) @@ -369,17 +358,17 @@ vec3 LUT(float NdotV, float roughness) // The macro surface normal just points up. vec3 N = vec3(0.0, 0.0, 1.0); - // To make the LUT independant from the material's F0, which is part of the Fresnel term - // when substituted by Schlick's approximation, we factor it out of the integral, - // yielding to the form: F0 * I1 + I2 - // I1 and I2 are slighlty different in the Fresnel term, but both only depend on - // NoL and roughness, so they are both numerically integrated and written into two channels. + // To make the LUT independant from the material's F0, which is part of the + // Fresnel term when substituted by Schlick's approximation, we factor it + // out of the integral, yielding to the form: F0 * I1 + I2 I1 and I2 are + // slighlty different in the Fresnel term, but both only depend on NoL and + // roughness, so they are both numerically integrated and written into two + // channels. float A = 0.0; float B = 0.0; float C = 0.0; - for(int i = 0; i < u_sampleCount; ++i) - { + for (int i = 0; i < u_sampleCount; ++i) { // Importance sampling, depending on the distribution. vec4 importanceSample = getImportanceSample(i, N, roughness); vec3 H = importanceSample.xyz; @@ -389,24 +378,22 @@ vec3 LUT(float NdotV, float roughness) float NdotL = saturate(L.z); float NdotH = saturate(H.z); float VdotH = saturate(dot(V, H)); - if (NdotL > 0.0) - { - if (u_distribution == cGGX) - { + if (NdotL > 0.0) { + if (u_distribution == cGGX) { // LUT for GGX distribution. // Taken from: https://bruop.github.io/ibl // Shadertoy: https://www.shadertoy.com/view/3lXXDB // Terms besides V are from the GGX PDF we're dividing by. - float V_pdf = V_SmithGGXCorrelated(NdotV, NdotL, roughness) * VdotH * NdotL / NdotH; + float V_pdf = V_SmithGGXCorrelated(NdotV, NdotL, roughness) * + VdotH * NdotL / NdotH; float Fc = pow(1.0 - VdotH, 5.0); A += (1.0 - Fc) * V_pdf; B += Fc * V_pdf; C += 0.0; } - if (u_distribution == cCharlie) - { + if (u_distribution == cCharlie) { // LUT for Charlie distribution. float sheenDistribution = D_Charlie(roughness, NdotH); float sheenVisibility = V_Ashikhmin(NdotL, NdotV); @@ -419,35 +406,33 @@ vec3 LUT(float NdotV, float roughness) } // The PDF is simply pdf(v, h) -> NDF * . - // To parametrize the PDF over l, use the Jacobian transform, yielding to: pdf(v, l) -> NDF * / 4 - // Since the BRDF divide through the PDF to be normalized, the 4 can be pulled out of the integral. - return vec3(4.0 * A, 4.0 * B, 4.0 * 2.0 * MATH_PI * C) / float(u_sampleCount); + // To parametrize the PDF over l, use the Jacobian transform, yielding to: + // pdf(v, l) -> NDF * / 4 Since the BRDF divide through the PDF to + // be normalized, the 4 can be pulled out of the integral. + return vec3(4.0 * A, 4.0 * B, 4.0 * 2.0 * MATH_PI * C) / + float(u_sampleCount); } - - // entry point void main() { vec3 color = vec3(0); - if(u_isGeneratingLUT == 0) - { - vec2 newUV = texCoord ; + if (u_isGeneratingLUT == 0) { + vec2 newUV = v_texCoord; - newUV = newUV*2.0-1.0; + newUV = newUV * 2.0 - 1.0; vec3 scan = uvToXYZ(u_currentFace, newUV); vec3 direction = normalize(scan); direction.y = -direction.y; - + color = filterColor(direction); } - else - { - color = LUT(texCoord.x, texCoord.y); + else { + color = LUT(v_texCoord.x, v_texCoord.y); } - - fragmentColor = vec4(color,1.0); + + fragmentColor = vec4(color, 1.0); } diff --git a/src/viewer3d/iblsampler.cpp b/src/viewer3d/iblsampler.cpp index 3427ea6d..0fa0f7c0 100644 --- a/src/viewer3d/iblsampler.cpp +++ b/src/viewer3d/iblsampler.cpp @@ -36,68 +36,6 @@ IblSampler::IblSampler() ":assets/ibl_filtering.frag"); } -// stbi_loadf_from_memory -// https://stackoverflow.com/questions/32666824/qopengltexture-qt-from-raw-data-freeimage -void IblSampler::loadPanorama(const QString& path) -{ - int width, height, numComponents; - QFile file(path); - file.open(QFile::ReadOnly); - auto byteArray = file.readAll(); - auto textureData = stbi_loadf_from_memory( - (unsigned char*)byteArray.constData(), byteArray.length(), &width, - &height, &numComponents, 3); - QOpenGLTexture* text = new QOpenGLTexture(QOpenGLTexture::Target2D); - text->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); - text->create(); - - // given some `width`, `height` and `data_ptr` - text->setSize(width, height, 3); - text->setFormat(QOpenGLTexture::RG32F); - text->allocateStorage(); - text->setData(QOpenGLTexture::RGB, QOpenGLTexture::Float32, textureData); - - inputTexture = text; -} - -// https://stackoverflow.com/questions/50666781/create-cubemap-from-qopenglframebuffer - -QOpenGLTexture* IblSampler::createCubemap(bool withMipmaps) -{ - auto cubemap = new QOpenGLTexture(QOpenGLTexture::TargetCubeMap); - if (withMipmaps) - cubemap->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, - QOpenGLTexture::Linear); - else - cubemap->setMinMagFilters(QOpenGLTexture::Linear, - QOpenGLTexture::Linear); - - cubemap->setWrapMode(QOpenGLTexture::ClampToEdge); - cubemap->create(); - - cubemap->setSize(textureSize, textureSize, 3); - // cubemap->setMipLevels() - cubemap->setFormat(QOpenGLTexture::RGB32F); - cubemap->allocateStorage(); - - return cubemap; -} - -QOpenGLTexture* IblSampler::createLut() -{ - auto texture = new QOpenGLTexture(QOpenGLTexture::Target2D); - texture->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); - texture->setWrapMode(QOpenGLTexture::ClampToEdge); - texture->create(); - - texture->setSize(textureSize, textureSize, 3); - // cubemap->setMipLevels() - texture->setFormat(QOpenGLTexture::RGBA32F); - texture->allocateStorage(); - - return texture; -} - void IblSampler::init(const QString& panoramaPath) { mipmapLevels = @@ -167,8 +105,85 @@ void IblSampler::init(const QString& panoramaPath) this->loadPanorama(panoramaPath); cubemapTexture = this->createCubemap(true); + lambertianTexture = this->createCubemap(false); + ggxTexture = this->createCubemap(true); + sheenTexture = this->createCubemap(true); + ggxLutTexture = this->createLut(); + charlieLutTexture = this->createLut(); +} + +void IblSampler::filterAll() +{ this->panoramaToCubemap(); + this->cubeMapToLambertian(); + this->cubeMapToGGX(); + this->cubeMapToSheen(); + + this->sampleGGXLut(); + this->sampleCharlieLut(); +} + +// stbi_loadf_from_memory +// https://stackoverflow.com/questions/32666824/qopengltexture-qt-from-raw-data-freeimage +void IblSampler::loadPanorama(const QString& path) +{ + int width, height, numComponents; + QFile file(path); + file.open(QFile::ReadOnly); + auto byteArray = file.readAll(); + auto textureData = stbi_loadf_from_memory( + (unsigned char*)byteArray.constData(), byteArray.length(), &width, + &height, &numComponents, 3); + QOpenGLTexture* text = new QOpenGLTexture(QOpenGLTexture::Target2D); + text->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); + text->create(); + + // given some `width`, `height` and `data_ptr` + text->setSize(width, height, 3); + text->setFormat(QOpenGLTexture::RG32F); + text->allocateStorage(); + text->setData(QOpenGLTexture::RGB, QOpenGLTexture::Float32, textureData); + + inputTexture = text; +} + +// https://stackoverflow.com/questions/50666781/create-cubemap-from-qopenglframebuffer + +QOpenGLTexture* IblSampler::createCubemap(bool withMipmaps) +{ + auto cubemap = new QOpenGLTexture(QOpenGLTexture::TargetCubeMap); + if (withMipmaps) + cubemap->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, + QOpenGLTexture::Linear); + else + cubemap->setMinMagFilters(QOpenGLTexture::Linear, + QOpenGLTexture::Linear); + + cubemap->setWrapMode(QOpenGLTexture::ClampToEdge); + cubemap->create(); + + cubemap->setSize(textureSize, textureSize, 3); + // cubemap->setMipLevels() + cubemap->setFormat(QOpenGLTexture::RGB32F); + cubemap->allocateStorage(); + + return cubemap; +} + +QOpenGLTexture* IblSampler::createLut() +{ + auto texture = new QOpenGLTexture(QOpenGLTexture::Target2D); + texture->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); + texture->setWrapMode(QOpenGLTexture::ClampToEdge); + texture->create(); + + texture->setSize(textureSize, textureSize, 3); + // cubemap->setMipLevels() + texture->setFormat(QOpenGLTexture::RGBA32F); + texture->allocateStorage(); + + return texture; } void IblSampler::panoramaToCubemap() @@ -257,7 +272,7 @@ QOpenGLShaderProgram* IblSampler::createShader(const QString& vertSource, void IblSampler::applyFilter(int distribution, float roughness, int targetMipLevel, int targetTexture, - int sampleCount, float lodBias = 0.0) + int sampleCount, float lodBias) { auto currentTextureSize = this->textureSize >> targetMipLevel; @@ -279,7 +294,7 @@ void IblSampler::applyFilter(int distribution, float roughness, shader->bind(); cubemapTexture->bind(0); - shader->setUniformValue("u_cubemapTexture", 0); + shader->setUniformValue("uCubeMap", 0); shader->setUniformValue("u_roughness", roughness); shader->setUniformValue("u_sampleCount", sampleCount); @@ -332,4 +347,64 @@ void IblSampler::cubeMapToSheen() this->sheenTexture->textureId(), this->sheenSamplCount); } +} + +void IblSampler::sampleLut(int distribution, int targetTextureId, + int currentTextureSize) +{ + auto vertSource = shaderCache->generateShaderSource("fullscreen.vert"); + auto fragSource = shaderCache->generateShaderSource("ibl_filtering.frag"); + + auto shader = createShader(vertSource, fragSource); + + // render each face + gl->glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->handle()); + gl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, + GL_TEXTURE_2D, targetTextureId, 0); + + gl->glViewport(0, 0, currentTextureSize, currentTextureSize); + gl->glClearColor(0, 0, 0, 1); + gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + shader->bind(); + cubemapTexture->bind(0); + shader->setUniformValue("uCubeMap", 0); + + shader->setUniformValue("u_roughness", 0.0f); + shader->setUniformValue("u_sampleCount", 512); + shader->setUniformValue("u_width", 0.0f); + shader->setUniformValue("u_lodBias", 0.0f); + shader->setUniformValue("u_distribution", distribution); + shader->setUniformValue("u_currentFace", 0); + shader->setUniformValue("u_isGeneratingLUT", 1); + + vbo->bind(); + gl->glEnableVertexAttribArray((int)VertexUsage::Position); + gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, GL_FALSE, + 5 * sizeof(float), nullptr); + gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, + GL_FALSE, 5 * sizeof(float), + reinterpret_cast(3 * sizeof(float))); + + gl->glDrawArrays(GL_TRIANGLES, 0, 6); + + vbo->release(); + + // gl->glBindFramebuffer(GL_FRAMEBUFFER, 0); + auto ctx = QOpenGLContext::currentContext(); + gl->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); +} + +void IblSampler::sampleGGXLut() +{ + this->ggxLutTexture = this->createLut(); + this->sampleLut(1, this->ggxLutTexture->textureId(), this->lutResolution); +} + +void IblSampler::sampleCharlieLut() +{ + this->charlieLutTexture = this->createLut(); + this->sampleLut(2, this->charlieLutTexture->textureId(), + this->lutResolution); } \ No newline at end of file diff --git a/src/viewer3d/iblsampler.h b/src/viewer3d/iblsampler.h index c86760cb..0a24bb6c 100644 --- a/src/viewer3d/iblsampler.h +++ b/src/viewer3d/iblsampler.h @@ -34,8 +34,8 @@ class IblSampler { // GLuint ggxTextureID; // GLuint sheenTextureID; - QOpenGLTexture* ggxLutTextureID; - QOpenGLTexture* charlieLutTextureID; + QOpenGLTexture* ggxLutTexture; + QOpenGLTexture* charlieLutTexture; // GLuint ggxLutTextureID; // GLuint charlieLutTextureID; @@ -68,9 +68,13 @@ class IblSampler { void applyFilter(int distribution, float roughness, int targetMipLevel, int targetTexture, int sampleCount, float lodBias = 0.0); + void sampleLut(int distribution, int targetTextureId, + int currentTextureSize); void init(const QString& panoramaPath); QOpenGLShaderProgram* createShader(const QString& vertSource, const QString& fragSource); + + void filterAll(); }; \ No newline at end of file diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 2aea8ad7..d1b3720d 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -83,6 +83,8 @@ void Viewer3D::initializeGL() iblSampler->gl = gl; iblSampler->init(":assets/panorama.hdr"); + iblSampler->filterAll(); + // do all the conversions // iblSampler->panoramaToCubemap(); } From f25ad7361a4b75d8c84c63a37c5f62abc7333773 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 20 Dec 2022 11:31:16 -0500 Subject: [PATCH 065/100] add pbr shaders --- src/viewer3d/assets/brdf.glsl | 207 ++++++++++++ src/viewer3d/assets/functions.glsl | 86 +++++ src/viewer3d/assets/iridiscence.glsl | 100 ++++++ src/viewer3d/assets/material_info.glsl | 365 +++++++++++++++++++++ src/viewer3d/assets/pbr.frag | 435 +++++++++++++++++++++++++ src/viewer3d/assets/punctual.glsl | 141 ++++++++ src/viewer3d/assets/textures.glsl | 345 ++++++++++++++++++++ src/viewer3d/assets/tonemapping.glsl | 109 +++++++ 8 files changed, 1788 insertions(+) create mode 100644 src/viewer3d/assets/brdf.glsl create mode 100644 src/viewer3d/assets/functions.glsl create mode 100644 src/viewer3d/assets/iridiscence.glsl create mode 100644 src/viewer3d/assets/material_info.glsl create mode 100644 src/viewer3d/assets/pbr.frag create mode 100644 src/viewer3d/assets/punctual.glsl create mode 100644 src/viewer3d/assets/textures.glsl create mode 100644 src/viewer3d/assets/tonemapping.glsl diff --git a/src/viewer3d/assets/brdf.glsl b/src/viewer3d/assets/brdf.glsl new file mode 100644 index 00000000..21aa85ef --- /dev/null +++ b/src/viewer3d/assets/brdf.glsl @@ -0,0 +1,207 @@ +// +// Fresnel +// +// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html +// https://github.com/wdas/brdf/tree/master/src/brdfs +// https://google.github.io/filament/Filament.md.html +// + +// The following equation models the Fresnel reflectance term of the spec equation (aka F()) +// Implementation of fresnel from [4], Equation 15 +vec3 F_Schlick(vec3 f0, vec3 f90, float VdotH) +{ + return f0 + (f90 - f0) * pow(clamp(1.0 - VdotH, 0.0, 1.0), 5.0); +} + +float F_Schlick(float f0, float f90, float VdotH) +{ + float x = clamp(1.0 - VdotH, 0.0, 1.0); + float x2 = x * x; + float x5 = x * x2 * x2; + return f0 + (f90 - f0) * x5; +} + +float F_Schlick(float f0, float VdotH) +{ + float f90 = 1.0; //clamp(50.0 * f0, 0.0, 1.0); + return F_Schlick(f0, f90, VdotH); +} + +vec3 F_Schlick(vec3 f0, float f90, float VdotH) +{ + float x = clamp(1.0 - VdotH, 0.0, 1.0); + float x2 = x * x; + float x5 = x * x2 * x2; + return f0 + (f90 - f0) * x5; +} + +vec3 F_Schlick(vec3 f0, float VdotH) +{ + float f90 = 1.0; //clamp(dot(f0, vec3(50.0 * 0.33)), 0.0, 1.0); + return F_Schlick(f0, f90, VdotH); +} + +vec3 Schlick_to_F0(vec3 f, vec3 f90, float VdotH) { + float x = clamp(1.0 - VdotH, 0.0, 1.0); + float x2 = x * x; + float x5 = clamp(x * x2 * x2, 0.0, 0.9999); + + return (f - f90 * x5) / (1.0 - x5); +} + +float Schlick_to_F0(float f, float f90, float VdotH) { + float x = clamp(1.0 - VdotH, 0.0, 1.0); + float x2 = x * x; + float x5 = clamp(x * x2 * x2, 0.0, 0.9999); + + return (f - f90 * x5) / (1.0 - x5); +} + +vec3 Schlick_to_F0(vec3 f, float VdotH) { + return Schlick_to_F0(f, vec3(1.0), VdotH); +} + +float Schlick_to_F0(float f, float VdotH) { + return Schlick_to_F0(f, 1.0, VdotH); +} + + +// Smith Joint GGX +// Note: Vis = G / (4 * NdotL * NdotV) +// see Eric Heitz. 2014. Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs. Journal of Computer Graphics Techniques, 3 +// see Real-Time Rendering. Page 331 to 336. +// see https://google.github.io/filament/Filament.md.html#materialsystem/specularbrdf/geometricshadowing(specularg) +float V_GGX(float NdotL, float NdotV, float alphaRoughness) +{ + float alphaRoughnessSq = alphaRoughness * alphaRoughness; + + float GGXV = NdotL * sqrt(NdotV * NdotV * (1.0 - alphaRoughnessSq) + alphaRoughnessSq); + float GGXL = NdotV * sqrt(NdotL * NdotL * (1.0 - alphaRoughnessSq) + alphaRoughnessSq); + + float GGX = GGXV + GGXL; + if (GGX > 0.0) + { + return 0.5 / GGX; + } + return 0.0; +} + + +// The following equation(s) model the distribution of microfacet normals across the area being drawn (aka D()) +// Implementation from "Average Irregularity Representation of a Roughened Surface for Ray Reflection" by T. S. Trowbridge, and K. P. Reitz +// Follows the distribution function recommended in the SIGGRAPH 2013 course notes from EPIC Games [1], Equation 3. +float D_GGX(float NdotH, float alphaRoughness) +{ + float alphaRoughnessSq = alphaRoughness * alphaRoughness; + float f = (NdotH * NdotH) * (alphaRoughnessSq - 1.0) + 1.0; + return alphaRoughnessSq / (M_PI * f * f); +} + + +float lambdaSheenNumericHelper(float x, float alphaG) +{ + float oneMinusAlphaSq = (1.0 - alphaG) * (1.0 - alphaG); + float a = mix(21.5473, 25.3245, oneMinusAlphaSq); + float b = mix(3.82987, 3.32435, oneMinusAlphaSq); + float c = mix(0.19823, 0.16801, oneMinusAlphaSq); + float d = mix(-1.97760, -1.27393, oneMinusAlphaSq); + float e = mix(-4.32054, -4.85967, oneMinusAlphaSq); + return a / (1.0 + b * pow(x, c)) + d * x + e; +} + + +float lambdaSheen(float cosTheta, float alphaG) +{ + if (abs(cosTheta) < 0.5) + { + return exp(lambdaSheenNumericHelper(cosTheta, alphaG)); + } + else + { + return exp(2.0 * lambdaSheenNumericHelper(0.5, alphaG) - lambdaSheenNumericHelper(1.0 - cosTheta, alphaG)); + } +} + + +float V_Sheen(float NdotL, float NdotV, float sheenRoughness) +{ + sheenRoughness = max(sheenRoughness, 0.000001); //clamp (0,1] + float alphaG = sheenRoughness * sheenRoughness; + + return clamp(1.0 / ((1.0 + lambdaSheen(NdotV, alphaG) + lambdaSheen(NdotL, alphaG)) * + (4.0 * NdotV * NdotL)), 0.0, 1.0); +} + + +//Sheen implementation------------------------------------------------------------------------------------- +// See https://github.com/sebavan/glTF/tree/KHR_materials_sheen/extensions/2.0/Khronos/KHR_materials_sheen + +// Estevez and Kulla http://www.aconty.com/pdf/s2017_pbs_imageworks_sheen.pdf +float D_Charlie(float sheenRoughness, float NdotH) +{ + sheenRoughness = max(sheenRoughness, 0.000001); //clamp (0,1] + float alphaG = sheenRoughness * sheenRoughness; + float invR = 1.0 / alphaG; + float cos2h = NdotH * NdotH; + float sin2h = 1.0 - cos2h; + return (2.0 + invR) * pow(sin2h, invR * 0.5) / (2.0 * M_PI); +} + + +//https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#acknowledgments AppendixB +vec3 BRDF_lambertian(vec3 f0, vec3 f90, vec3 diffuseColor, float specularWeight, float VdotH) +{ + // see https://seblagarde.wordpress.com/2012/01/08/pi-or-not-to-pi-in-game-lighting-equation/ + return (1.0 - specularWeight * F_Schlick(f0, f90, VdotH)) * (diffuseColor / M_PI); +} + + +#ifdef MATERIAL_IRIDESCENCE +//https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#acknowledgments AppendixB +vec3 BRDF_lambertianIridescence(vec3 f0, vec3 f90, vec3 iridescenceFresnel, float iridescenceFactor, vec3 diffuseColor, float specularWeight, float VdotH) +{ + // Use the maximum component of the iridescence Fresnel color + // Maximum is used instead of the RGB value to not get inverse colors for the diffuse BRDF + vec3 iridescenceFresnelMax = vec3(max(max(iridescenceFresnel.r, iridescenceFresnel.g), iridescenceFresnel.b)); + + vec3 schlickFresnel = F_Schlick(f0, f90, VdotH); + + // Blend default specular Fresnel with iridescence Fresnel + vec3 F = mix(schlickFresnel, iridescenceFresnelMax, iridescenceFactor); + + // see https://seblagarde.wordpress.com/2012/01/08/pi-or-not-to-pi-in-game-lighting-equation/ + return (1.0 - specularWeight * F) * (diffuseColor / M_PI); +} +#endif + + +// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#acknowledgments AppendixB +vec3 BRDF_specularGGX(vec3 f0, vec3 f90, float alphaRoughness, float specularWeight, float VdotH, float NdotL, float NdotV, float NdotH) +{ + vec3 F = F_Schlick(f0, f90, VdotH); + float Vis = V_GGX(NdotL, NdotV, alphaRoughness); + float D = D_GGX(NdotH, alphaRoughness); + + return specularWeight * F * Vis * D; +} + + +#ifdef MATERIAL_IRIDESCENCE +vec3 BRDF_specularGGXIridescence(vec3 f0, vec3 f90, vec3 iridescenceFresnel, float alphaRoughness, float iridescenceFactor, float specularWeight, float VdotH, float NdotL, float NdotV, float NdotH) +{ + vec3 F = mix(F_Schlick(f0, f90, VdotH), iridescenceFresnel, iridescenceFactor); + float Vis = V_GGX(NdotL, NdotV, alphaRoughness); + float D = D_GGX(NdotH, alphaRoughness); + + return specularWeight * F * Vis * D; +} +#endif + + +// f_sheen +vec3 BRDF_specularSheen(vec3 sheenColor, float sheenRoughness, float NdotL, float NdotV, float NdotH) +{ + float sheenDistribution = D_Charlie(sheenRoughness, NdotH); + float sheenVisibility = V_Sheen(NdotL, NdotV, sheenRoughness); + return sheenColor * sheenDistribution * sheenVisibility; +} \ No newline at end of file diff --git a/src/viewer3d/assets/functions.glsl b/src/viewer3d/assets/functions.glsl new file mode 100644 index 00000000..02fd0229 --- /dev/null +++ b/src/viewer3d/assets/functions.glsl @@ -0,0 +1,86 @@ +const float M_PI = 3.141592653589793; + + +in vec3 v_Position; + + +#ifdef HAS_NORMAL_VEC3 +#ifdef HAS_TANGENT_VEC4 +in mat3 v_TBN; +#else +in vec3 v_Normal; +#endif +#endif + + +#ifdef HAS_COLOR_0_VEC3 +in vec3 v_Color; +#endif +#ifdef HAS_COLOR_0_VEC4 +in vec4 v_Color; +#endif + + +vec4 getVertexColor() +{ + vec4 color = vec4(1.0); + +#ifdef HAS_COLOR_0_VEC3 + color.rgb = v_Color.rgb; +#endif +#ifdef HAS_COLOR_0_VEC4 + color = v_Color; +#endif + + return color; +} + + +struct NormalInfo { + vec3 ng; // Geometry normal + vec3 t; // Geometry tangent + vec3 b; // Geometry bitangent + vec3 n; // Shading normal + vec3 ntex; // Normal from texture, scaling is accounted for. +}; + + +float clampedDot(vec3 x, vec3 y) +{ + return clamp(dot(x, y), 0.0, 1.0); +} + + +float max3(vec3 v) +{ + return max(max(v.x, v.y), v.z); +} + + +float sq(float t) +{ + return t * t; +} + +vec2 sq(vec2 t) +{ + return t * t; +} + +vec3 sq(vec3 t) +{ + return t * t; +} + +vec4 sq(vec4 t) +{ + return t * t; +} + + +float applyIorToRoughness(float roughness, float ior) +{ + // Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and + // an IOR of 1.5 results in the default amount of microfacet refraction. + return roughness * clamp(ior * 2.0 - 2.0, 0.0, 1.0); +} \ No newline at end of file diff --git a/src/viewer3d/assets/iridiscence.glsl b/src/viewer3d/assets/iridiscence.glsl new file mode 100644 index 00000000..4f2ddd89 --- /dev/null +++ b/src/viewer3d/assets/iridiscence.glsl @@ -0,0 +1,100 @@ +// XYZ to sRGB color space +const mat3 XYZ_TO_REC709 = mat3( + 3.2404542, -0.9692660, 0.0556434, + -1.5371385, 1.8760108, -0.2040259, + -0.4985314, 0.0415560, 1.0572252 +); + +// Assume air interface for top +// Note: We don't handle the case fresnel0 == 1 +vec3 Fresnel0ToIor(vec3 fresnel0) { + vec3 sqrtF0 = sqrt(fresnel0); + return (vec3(1.0) + sqrtF0) / (vec3(1.0) - sqrtF0); +} + +// Conversion FO/IOR +vec3 IorToFresnel0(vec3 transmittedIor, float incidentIor) { + return sq((transmittedIor - vec3(incidentIor)) / (transmittedIor + vec3(incidentIor))); +} + +// ior is a value between 1.0 and 3.0. 1.0 is air interface +float IorToFresnel0(float transmittedIor, float incidentIor) { + return sq((transmittedIor - incidentIor) / (transmittedIor + incidentIor)); +} + +// Fresnel equations for dielectric/dielectric interfaces. +// Ref: https://belcour.github.io/blog/research/2017/05/01/brdf-thin-film.html +// Evaluation XYZ sensitivity curves in Fourier space +vec3 evalSensitivity(float OPD, vec3 shift) { + float phase = 2.0 * M_PI * OPD * 1.0e-9; + vec3 val = vec3(5.4856e-13, 4.4201e-13, 5.2481e-13); + vec3 pos = vec3(1.6810e+06, 1.7953e+06, 2.2084e+06); + vec3 var = vec3(4.3278e+09, 9.3046e+09, 6.6121e+09); + + vec3 xyz = val * sqrt(2.0 * M_PI * var) * cos(pos * phase + shift) * exp(-sq(phase) * var); + xyz.x += 9.7470e-14 * sqrt(2.0 * M_PI * 4.5282e+09) * cos(2.2399e+06 * phase + shift[0]) * exp(-4.5282e+09 * sq(phase)); + xyz /= 1.0685e-7; + + vec3 srgb = XYZ_TO_REC709 * xyz; + return srgb; +} + +vec3 evalIridescence(float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0) { + vec3 I; + + // Force iridescenceIor -> outsideIOR when thinFilmThickness -> 0.0 + float iridescenceIor = mix(outsideIOR, eta2, smoothstep(0.0, 0.03, thinFilmThickness)); + // Evaluate the cosTheta on the base layer (Snell law) + float sinTheta2Sq = sq(outsideIOR / iridescenceIor) * (1.0 - sq(cosTheta1)); + + // Handle TIR: + float cosTheta2Sq = 1.0 - sinTheta2Sq; + if (cosTheta2Sq < 0.0) { + return vec3(1.0); + } + + float cosTheta2 = sqrt(cosTheta2Sq); + + // First interface + float R0 = IorToFresnel0(iridescenceIor, outsideIOR); + float R12 = F_Schlick(R0, cosTheta1); + float R21 = R12; + float T121 = 1.0 - R12; + float phi12 = 0.0; + if (iridescenceIor < outsideIOR) phi12 = M_PI; + float phi21 = M_PI - phi12; + + // Second interface + vec3 baseIOR = Fresnel0ToIor(clamp(baseF0, 0.0, 0.9999)); // guard against 1.0 + vec3 R1 = IorToFresnel0(baseIOR, iridescenceIor); + vec3 R23 = F_Schlick(R1, cosTheta2); + vec3 phi23 = vec3(0.0); + if (baseIOR[0] < iridescenceIor) phi23[0] = M_PI; + if (baseIOR[1] < iridescenceIor) phi23[1] = M_PI; + if (baseIOR[2] < iridescenceIor) phi23[2] = M_PI; + + // Phase shift + float OPD = 2.0 * iridescenceIor * thinFilmThickness * cosTheta2; + vec3 phi = vec3(phi21) + phi23; + + // Compound terms + vec3 R123 = clamp(R12 * R23, 1e-5, 0.9999); + vec3 r123 = sqrt(R123); + vec3 Rs = sq(T121) * R23 / (vec3(1.0) - R123); + + // Reflectance term for m = 0 (DC term amplitude) + vec3 C0 = R12 + Rs; + I = C0; + + // Reflectance term for m > 0 (pairs of diracs) + vec3 Cm = Rs - T121; + for (int m = 1; m <= 2; ++m) + { + Cm *= r123; + vec3 Sm = 2.0 * evalSensitivity(float(m) * OPD, float(m) * phi); + I += Cm * Sm; + } + + // Since out of gamut colors might be produced, negative color values are clamped to 0. + return max(I, vec3(0.0)); +} \ No newline at end of file diff --git a/src/viewer3d/assets/material_info.glsl b/src/viewer3d/assets/material_info.glsl new file mode 100644 index 00000000..6d6d8928 --- /dev/null +++ b/src/viewer3d/assets/material_info.glsl @@ -0,0 +1,365 @@ +// Metallic Roughness +uniform float u_MetallicFactor; +uniform float u_RoughnessFactor; +uniform vec4 u_BaseColorFactor; + +// Specular Glossiness +uniform vec3 u_SpecularFactor; +uniform vec4 u_DiffuseFactor; +uniform float u_GlossinessFactor; + +// Sheen +uniform float u_SheenRoughnessFactor; +uniform vec3 u_SheenColorFactor; + +// Clearcoat +uniform float u_ClearcoatFactor; +uniform float u_ClearcoatRoughnessFactor; + +// Specular +uniform vec3 u_KHR_materials_specular_specularColorFactor; +uniform float u_KHR_materials_specular_specularFactor; + +// Transmission +uniform float u_TransmissionFactor; + +// Volume +uniform float u_ThicknessFactor; +uniform vec3 u_AttenuationColor; +uniform float u_AttenuationDistance; + +// Iridescence +uniform float u_IridescenceFactor; +uniform float u_IridescenceIor; +uniform float u_IridescenceThicknessMinimum; +uniform float u_IridescenceThicknessMaximum; + +// Emissive Strength +uniform float u_EmissiveStrength; + +// PBR Next IOR +uniform float u_Ior; + +// Alpha mode +uniform float u_AlphaCutoff; + +uniform vec3 u_Camera; + +#ifdef MATERIAL_TRANSMISSION +uniform ivec2 u_ScreenSize; +#endif + +uniform mat4 u_ModelMatrix; +uniform mat4 u_ViewMatrix; +uniform mat4 u_ProjectionMatrix; + + +struct MaterialInfo +{ + float ior; + float perceptualRoughness; // roughness value, as authored by the model creator (input to shader) + vec3 f0; // full reflectance color (n incidence angle) + + float alphaRoughness; // roughness mapped to a more linear change in the roughness (proposed by [2]) + vec3 c_diff; + + vec3 f90; // reflectance color at grazing angle + float metallic; + + vec3 baseColor; + + float sheenRoughnessFactor; + vec3 sheenColorFactor; + + vec3 clearcoatF0; + vec3 clearcoatF90; + float clearcoatFactor; + vec3 clearcoatNormal; + float clearcoatRoughness; + + // KHR_materials_specular + float specularWeight; // product of specularFactor and specularTexture.a + + float transmissionFactor; + + float thickness; + vec3 attenuationColor; + float attenuationDistance; + + // KHR_materials_iridescence + float iridescenceFactor; + float iridescenceIor; + float iridescenceThickness; +}; + + +// Get normal, tangent and bitangent vectors. +NormalInfo getNormalInfo(vec3 v) +{ + vec2 UV = getNormalUV(); + vec3 uv_dx = dFdx(vec3(UV, 0.0)); + vec3 uv_dy = dFdy(vec3(UV, 0.0)); + + if (length(uv_dx) + length(uv_dy) <= 1e-6) { + uv_dx = vec3(1.0, 0.0, 0.0); + uv_dy = vec3(0.0, 1.0, 0.0); + } + + vec3 t_ = (uv_dy.t * dFdx(v_Position) - uv_dx.t * dFdy(v_Position)) / + (uv_dx.s * uv_dy.t - uv_dy.s * uv_dx.t); + + vec3 n, t, b, ng; + + // Compute geometrical TBN: +#ifdef HAS_NORMAL_VEC3 +#ifdef HAS_TANGENT_VEC4 + // Trivial TBN computation, present as vertex attribute. + // Normalize eigenvectors as matrix is linearly interpolated. + t = normalize(v_TBN[0]); + b = normalize(v_TBN[1]); + ng = normalize(v_TBN[2]); +#else + // Normals are either present as vertex attributes or approximated. + ng = normalize(v_Normal); + t = normalize(t_ - ng * dot(ng, t_)); + b = cross(ng, t); +#endif +#else + ng = normalize(cross(dFdx(v_Position), dFdy(v_Position))); + t = normalize(t_ - ng * dot(ng, t_)); + b = cross(ng, t); +#endif + + + // For a back-facing surface, the tangential basis vectors are negated. + if (gl_FrontFacing == false) + { + t *= -1.0; + b *= -1.0; + ng *= -1.0; + } + + // Compute normals: + NormalInfo info; + info.ng = ng; +#ifdef HAS_NORMAL_MAP + info.ntex = texture(u_NormalSampler, UV).rgb * 2.0 - vec3(1.0); + info.ntex *= vec3(u_NormalScale, u_NormalScale, 1.0); + info.ntex = normalize(info.ntex); + info.n = normalize(mat3(t, b, ng) * info.ntex); +#else + info.n = ng; +#endif + info.t = t; + info.b = b; + return info; +} + + +#ifdef MATERIAL_CLEARCOAT +vec3 getClearcoatNormal(NormalInfo normalInfo) +{ +#ifdef HAS_CLEARCOAT_NORMAL_MAP + vec3 n = texture(u_ClearcoatNormalSampler, getClearcoatNormalUV()).rgb * 2.0 - vec3(1.0); + n *= vec3(u_ClearcoatNormalScale, u_ClearcoatNormalScale, 1.0); + n = mat3(normalInfo.t, normalInfo.b, normalInfo.ng) * normalize(n); + return n; +#else + return normalInfo.ng; +#endif +} +#endif + + +vec4 getBaseColor() +{ + vec4 baseColor = vec4(1); + +#if defined(MATERIAL_SPECULARGLOSSINESS) + baseColor = u_DiffuseFactor; +#elif defined(MATERIAL_METALLICROUGHNESS) + baseColor = u_BaseColorFactor; +#endif + +#if defined(MATERIAL_SPECULARGLOSSINESS) && defined(HAS_DIFFUSE_MAP) + baseColor *= texture(u_DiffuseSampler, getDiffuseUV()); +#elif defined(MATERIAL_METALLICROUGHNESS) && defined(HAS_BASE_COLOR_MAP) + baseColor *= texture(u_BaseColorSampler, getBaseColorUV()); +#endif + + return baseColor * getVertexColor(); +} + + +#ifdef MATERIAL_SPECULARGLOSSINESS +MaterialInfo getSpecularGlossinessInfo(MaterialInfo info) +{ + info.f0 = u_SpecularFactor; + info.perceptualRoughness = u_GlossinessFactor; + +#ifdef HAS_SPECULAR_GLOSSINESS_MAP + vec4 sgSample = texture(u_SpecularGlossinessSampler, getSpecularGlossinessUV()); + info.perceptualRoughness *= sgSample.a ; // glossiness to roughness + info.f0 *= sgSample.rgb; // specular +#endif // ! HAS_SPECULAR_GLOSSINESS_MAP + + info.perceptualRoughness = 1.0 - info.perceptualRoughness; // 1 - glossiness + info.c_diff = info.baseColor.rgb * (1.0 - max(max(info.f0.r, info.f0.g), info.f0.b)); + return info; +} +#endif + + +#ifdef MATERIAL_METALLICROUGHNESS +MaterialInfo getMetallicRoughnessInfo(MaterialInfo info) +{ + info.metallic = u_MetallicFactor; + info.perceptualRoughness = u_RoughnessFactor; + +#ifdef HAS_METALLIC_ROUGHNESS_MAP + // Roughness is stored in the 'g' channel, metallic is stored in the 'b' channel. + // This layout intentionally reserves the 'r' channel for (optional) occlusion map data + vec4 mrSample = texture(u_MetallicRoughnessSampler, getMetallicRoughnessUV()); + info.perceptualRoughness *= mrSample.g; + info.metallic *= mrSample.b; +#endif + + // Achromatic f0 based on IOR. + info.c_diff = mix(info.baseColor.rgb, vec3(0), info.metallic); + info.f0 = mix(info.f0, info.baseColor.rgb, info.metallic); + return info; +} +#endif + + +#ifdef MATERIAL_SHEEN +MaterialInfo getSheenInfo(MaterialInfo info) +{ + info.sheenColorFactor = u_SheenColorFactor; + info.sheenRoughnessFactor = u_SheenRoughnessFactor; + +#ifdef HAS_SHEEN_COLOR_MAP + vec4 sheenColorSample = texture(u_SheenColorSampler, getSheenColorUV()); + info.sheenColorFactor *= sheenColorSample.rgb; +#endif + +#ifdef HAS_SHEEN_ROUGHNESS_MAP + vec4 sheenRoughnessSample = texture(u_SheenRoughnessSampler, getSheenRoughnessUV()); + info.sheenRoughnessFactor *= sheenRoughnessSample.a; +#endif + return info; +} +#endif + + +#ifdef MATERIAL_SPECULAR +MaterialInfo getSpecularInfo(MaterialInfo info) +{ + vec4 specularTexture = vec4(1.0); +#ifdef HAS_SPECULAR_MAP + specularTexture.a = texture(u_SpecularSampler, getSpecularUV()).a; +#endif +#ifdef HAS_SPECULAR_COLOR_MAP + specularTexture.rgb = texture(u_SpecularColorSampler, getSpecularColorUV()).rgb; +#endif + + vec3 dielectricSpecularF0 = min(info.f0 * u_KHR_materials_specular_specularColorFactor * specularTexture.rgb, vec3(1.0)); + info.f0 = mix(dielectricSpecularF0, info.baseColor.rgb, info.metallic); + info.specularWeight = u_KHR_materials_specular_specularFactor * specularTexture.a; + info.c_diff = mix(info.baseColor.rgb, vec3(0), info.metallic); + return info; +} +#endif + + +#ifdef MATERIAL_TRANSMISSION +MaterialInfo getTransmissionInfo(MaterialInfo info) +{ + info.transmissionFactor = u_TransmissionFactor; + +#ifdef HAS_TRANSMISSION_MAP + vec4 transmissionSample = texture(u_TransmissionSampler, getTransmissionUV()); + info.transmissionFactor *= transmissionSample.r; +#endif + return info; +} +#endif + + +#ifdef MATERIAL_VOLUME +MaterialInfo getVolumeInfo(MaterialInfo info) +{ + info.thickness = u_ThicknessFactor; + info.attenuationColor = u_AttenuationColor; + info.attenuationDistance = u_AttenuationDistance; + +#ifdef HAS_THICKNESS_MAP + vec4 thicknessSample = texture(u_ThicknessSampler, getThicknessUV()); + info.thickness *= thicknessSample.g; +#endif + return info; +} +#endif + + +#ifdef MATERIAL_IRIDESCENCE +MaterialInfo getIridescenceInfo(MaterialInfo info) +{ + info.iridescenceFactor = u_IridescenceFactor; + info.iridescenceIor = u_IridescenceIor; + info.iridescenceThickness = u_IridescenceThicknessMaximum; + + #ifdef HAS_IRIDESCENCE_MAP + info.iridescenceFactor *= texture(u_IridescenceSampler, getIridescenceUV()).r; + #endif + + #ifdef HAS_IRIDESCENCE_THICKNESS_MAP + float thicknessSampled = texture(u_IridescenceThicknessSampler, getIridescenceThicknessUV()).g; + float thickness = mix(u_IridescenceThicknessMinimum, u_IridescenceThicknessMaximum, thicknessSampled); + info.iridescenceThickness = thickness; + #endif + + return info; +} +#endif + + +#ifdef MATERIAL_CLEARCOAT +MaterialInfo getClearCoatInfo(MaterialInfo info, NormalInfo normalInfo) +{ + info.clearcoatFactor = u_ClearcoatFactor; + info.clearcoatRoughness = u_ClearcoatRoughnessFactor; + info.clearcoatF0 = vec3(pow((info.ior - 1.0) / (info.ior + 1.0), 2.0)); + info.clearcoatF90 = vec3(1.0); + +#ifdef HAS_CLEARCOAT_MAP + vec4 clearcoatSample = texture(u_ClearcoatSampler, getClearcoatUV()); + info.clearcoatFactor *= clearcoatSample.r; +#endif + +#ifdef HAS_CLEARCOAT_ROUGHNESS_MAP + vec4 clearcoatSampleRoughness = texture(u_ClearcoatRoughnessSampler, getClearcoatRoughnessUV()); + info.clearcoatRoughness *= clearcoatSampleRoughness.g; +#endif + + info.clearcoatNormal = getClearcoatNormal(normalInfo); + info.clearcoatRoughness = clamp(info.clearcoatRoughness, 0.0, 1.0); + return info; +} +#endif + + +#ifdef MATERIAL_IOR +MaterialInfo getIorInfo(MaterialInfo info) +{ + info.f0 = vec3(pow(( u_Ior - 1.0) / (u_Ior + 1.0), 2.0)); + info.ior = u_Ior; + return info; +} +#endif + + +float albedoSheenScalingLUT(float NdotV, float sheenRoughnessFactor) +{ + return texture(u_SheenELUT, vec2(NdotV, sheenRoughnessFactor)).r; +} \ No newline at end of file diff --git a/src/viewer3d/assets/pbr.frag b/src/viewer3d/assets/pbr.frag new file mode 100644 index 00000000..50093d95 --- /dev/null +++ b/src/viewer3d/assets/pbr.frag @@ -0,0 +1,435 @@ +// +// This fragment shader defines a reference implementation for Physically Based Shading of +// a microfacet surface material defined by a glTF model. +// +// References: +// [1] Real Shading in Unreal Engine 4 +// http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf +// [2] Physically Based Shading at Disney +// http://blog.selfshadow.com/publications/s2012-shading-course/burley/s2012_pbs_disney_brdf_notes_v3.pdf +// [3] README.md - Environment Maps +// https://github.com/KhronosGroup/glTF-WebGL-PBR/#environment-maps +// [4] "An Inexpensive BRDF Model for Physically based Rendering" by Christophe Schlick +// https://www.cs.virginia.edu/~jdl/bib/appearance/analytic%20models/schlick94b.pdf +// [5] "KHR_materials_clearcoat" +// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat + +//precision highp float; + + +#include +#include +#include +#include +#include +#include +#include + +#ifdef MATERIAL_IRIDESCENCE +#include +#endif + + +out vec4 g_finalColor; + + +void main() +{ + vec4 baseColor = getBaseColor(); + +#if ALPHAMODE == ALPHAMODE_OPAQUE + baseColor.a = 1.0; +#endif + + vec3 v = normalize(u_Camera - v_Position); + NormalInfo normalInfo = getNormalInfo(v); + vec3 n = normalInfo.n; + vec3 t = normalInfo.t; + vec3 b = normalInfo.b; + + float NdotV = clampedDot(n, v); + float TdotV = clampedDot(t, v); + float BdotV = clampedDot(b, v); + + MaterialInfo materialInfo; + materialInfo.baseColor = baseColor.rgb; + + // The default index of refraction of 1.5 yields a dielectric normal incidence reflectance of 0.04. + materialInfo.ior = 1.5; + materialInfo.f0 = vec3(0.04); + materialInfo.specularWeight = 1.0; + + // If the MR debug output is selected, we have to enforce evaluation of the non-iridescence BRDF functions. +#if DEBUG == DEBUG_METALLIC_ROUGHNESS +#undef MATERIAL_IRIDESCENCE +#endif + +#ifdef MATERIAL_IOR + materialInfo = getIorInfo(materialInfo); +#endif + +#ifdef MATERIAL_SPECULARGLOSSINESS + materialInfo = getSpecularGlossinessInfo(materialInfo); +#endif + +#ifdef MATERIAL_METALLICROUGHNESS + materialInfo = getMetallicRoughnessInfo(materialInfo); +#endif + +#ifdef MATERIAL_SHEEN + materialInfo = getSheenInfo(materialInfo); +#endif + +#ifdef MATERIAL_CLEARCOAT + materialInfo = getClearCoatInfo(materialInfo, normalInfo); +#endif + +#ifdef MATERIAL_SPECULAR + materialInfo = getSpecularInfo(materialInfo); +#endif + +#ifdef MATERIAL_TRANSMISSION + materialInfo = getTransmissionInfo(materialInfo); +#endif + +#ifdef MATERIAL_VOLUME + materialInfo = getVolumeInfo(materialInfo); +#endif + +#ifdef MATERIAL_IRIDESCENCE + materialInfo = getIridescenceInfo(materialInfo); +#endif + + materialInfo.perceptualRoughness = clamp(materialInfo.perceptualRoughness, 0.0, 1.0); + materialInfo.metallic = clamp(materialInfo.metallic, 0.0, 1.0); + + // Roughness is authored as perceptual roughness; as is convention, + // convert to material roughness by squaring the perceptual roughness. + materialInfo.alphaRoughness = materialInfo.perceptualRoughness * materialInfo.perceptualRoughness; + + // Compute reflectance. + float reflectance = max(max(materialInfo.f0.r, materialInfo.f0.g), materialInfo.f0.b); + + // Anything less than 2% is physically impossible and is instead considered to be shadowing. Compare to "Real-Time-Rendering" 4th editon on page 325. + materialInfo.f90 = vec3(1.0); + + // LIGHTING + vec3 f_specular = vec3(0.0); + vec3 f_diffuse = vec3(0.0); + vec3 f_emissive = vec3(0.0); + vec3 f_clearcoat = vec3(0.0); + vec3 f_sheen = vec3(0.0); + vec3 f_transmission = vec3(0.0); + + float albedoSheenScaling = 1.0; + +#ifdef MATERIAL_IRIDESCENCE + vec3 iridescenceFresnel = materialInfo.f0; + vec3 iridescenceF0 = materialInfo.f0; + + if (materialInfo.iridescenceThickness == 0.0) { + materialInfo.iridescenceFactor = 0.0; + } + + if (materialInfo.iridescenceFactor > 0.0) { + iridescenceFresnel = evalIridescence(1.0, materialInfo.iridescenceIor, NdotV, materialInfo.iridescenceThickness, materialInfo.f0); + iridescenceF0 = Schlick_to_F0(iridescenceFresnel, NdotV); + } +#endif + + // Calculate lighting contribution from image based lighting source (IBL) +#ifdef USE_IBL +#ifdef MATERIAL_IRIDESCENCE + f_specular += getIBLRadianceGGXIridescence(n, v, materialInfo.perceptualRoughness, materialInfo.f0, iridescenceFresnel, materialInfo.iridescenceFactor, materialInfo.specularWeight); + f_diffuse += getIBLRadianceLambertianIridescence(n, v, materialInfo.perceptualRoughness, materialInfo.c_diff, materialInfo.f0, iridescenceF0, materialInfo.iridescenceFactor, materialInfo.specularWeight); +#else + f_specular += getIBLRadianceGGX(n, v, materialInfo.perceptualRoughness, materialInfo.f0, materialInfo.specularWeight); + f_diffuse += getIBLRadianceLambertian(n, v, materialInfo.perceptualRoughness, materialInfo.c_diff, materialInfo.f0, materialInfo.specularWeight); +#endif + +#ifdef MATERIAL_CLEARCOAT + f_clearcoat += getIBLRadianceGGX(materialInfo.clearcoatNormal, v, materialInfo.clearcoatRoughness, materialInfo.clearcoatF0, 1.0); +#endif + +#ifdef MATERIAL_SHEEN + f_sheen += getIBLRadianceCharlie(n, v, materialInfo.sheenRoughnessFactor, materialInfo.sheenColorFactor); +#endif +#endif + +#if defined(MATERIAL_TRANSMISSION) && defined(USE_IBL) + f_transmission += getIBLVolumeRefraction( + n, v, + materialInfo.perceptualRoughness, + materialInfo.c_diff, materialInfo.f0, materialInfo.f90, + v_Position, u_ModelMatrix, u_ViewMatrix, u_ProjectionMatrix, + materialInfo.ior, materialInfo.thickness, materialInfo.attenuationColor, materialInfo.attenuationDistance); +#endif + + float ao = 1.0; + // Apply optional PBR terms for additional (optional) shading +#ifdef HAS_OCCLUSION_MAP + ao = texture(u_OcclusionSampler, getOcclusionUV()).r; + f_diffuse = mix(f_diffuse, f_diffuse * ao, u_OcclusionStrength); + // apply ambient occlusion to all lighting that is not punctual + f_specular = mix(f_specular, f_specular * ao, u_OcclusionStrength); + f_sheen = mix(f_sheen, f_sheen * ao, u_OcclusionStrength); + f_clearcoat = mix(f_clearcoat, f_clearcoat * ao, u_OcclusionStrength); +#endif + +#ifdef USE_PUNCTUAL + for (int i = 0; i < LIGHT_COUNT; ++i) + { + Light light = u_Lights[i]; + + vec3 pointToLight; + if (light.type != LightType_Directional) + { + pointToLight = light.position - v_Position; + } + else + { + pointToLight = -light.direction; + } + + // BSTF + vec3 l = normalize(pointToLight); // Direction from surface point to light + vec3 h = normalize(l + v); // Direction of the vector between l and v, called halfway vector + float NdotL = clampedDot(n, l); + float NdotV = clampedDot(n, v); + float NdotH = clampedDot(n, h); + float LdotH = clampedDot(l, h); + float VdotH = clampedDot(v, h); + if (NdotL > 0.0 || NdotV > 0.0) + { + // Calculation of analytical light + // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#acknowledgments AppendixB + vec3 intensity = getLighIntensity(light, pointToLight); +#ifdef MATERIAL_IRIDESCENCE + f_diffuse += intensity * NdotL * BRDF_lambertianIridescence(materialInfo.f0, materialInfo.f90, iridescenceFresnel, materialInfo.iridescenceFactor, materialInfo.c_diff, materialInfo.specularWeight, VdotH); + f_specular += intensity * NdotL * BRDF_specularGGXIridescence(materialInfo.f0, materialInfo.f90, iridescenceFresnel, materialInfo.alphaRoughness, materialInfo.iridescenceFactor, materialInfo.specularWeight, VdotH, NdotL, NdotV, NdotH); +#else + f_diffuse += intensity * NdotL * BRDF_lambertian(materialInfo.f0, materialInfo.f90, materialInfo.c_diff, materialInfo.specularWeight, VdotH); + f_specular += intensity * NdotL * BRDF_specularGGX(materialInfo.f0, materialInfo.f90, materialInfo.alphaRoughness, materialInfo.specularWeight, VdotH, NdotL, NdotV, NdotH); +#endif + +#ifdef MATERIAL_SHEEN + f_sheen += intensity * getPunctualRadianceSheen(materialInfo.sheenColorFactor, materialInfo.sheenRoughnessFactor, NdotL, NdotV, NdotH); + albedoSheenScaling = min(1.0 - max3(materialInfo.sheenColorFactor) * albedoSheenScalingLUT(NdotV, materialInfo.sheenRoughnessFactor), + 1.0 - max3(materialInfo.sheenColorFactor) * albedoSheenScalingLUT(NdotL, materialInfo.sheenRoughnessFactor)); +#endif + +#ifdef MATERIAL_CLEARCOAT + f_clearcoat += intensity * getPunctualRadianceClearCoat(materialInfo.clearcoatNormal, v, l, h, VdotH, + materialInfo.clearcoatF0, materialInfo.clearcoatF90, materialInfo.clearcoatRoughness); +#endif + } + + // BDTF +#ifdef MATERIAL_TRANSMISSION + // If the light ray travels through the geometry, use the point it exits the geometry again. + // That will change the angle to the light source, if the material refracts the light ray. + vec3 transmissionRay = getVolumeTransmissionRay(n, v, materialInfo.thickness, materialInfo.ior, u_ModelMatrix); + pointToLight -= transmissionRay; + l = normalize(pointToLight); + + vec3 intensity = getLighIntensity(light, pointToLight); + vec3 transmittedLight = intensity * getPunctualRadianceTransmission(n, v, l, materialInfo.alphaRoughness, materialInfo.f0, materialInfo.f90, materialInfo.c_diff, materialInfo.ior); + +#ifdef MATERIAL_VOLUME + transmittedLight = applyVolumeAttenuation(transmittedLight, length(transmissionRay), materialInfo.attenuationColor, materialInfo.attenuationDistance); +#endif + + f_transmission += transmittedLight; +#endif + } +#endif + + f_emissive = u_EmissiveFactor; +#ifdef MATERIAL_EMISSIVE_STRENGTH + f_emissive *= u_EmissiveStrength; +#endif +#ifdef HAS_EMISSIVE_MAP + f_emissive *= texture(u_EmissiveSampler, getEmissiveUV()).rgb; +#endif + + // Layer blending + + float clearcoatFactor = 0.0; + vec3 clearcoatFresnel = vec3(0); + +#ifdef MATERIAL_CLEARCOAT + clearcoatFactor = materialInfo.clearcoatFactor; + clearcoatFresnel = F_Schlick(materialInfo.clearcoatF0, materialInfo.clearcoatF90, clampedDot(materialInfo.clearcoatNormal, v)); + f_clearcoat = f_clearcoat * clearcoatFactor; +#endif + +#ifdef MATERIAL_TRANSMISSION + vec3 diffuse = mix(f_diffuse, f_transmission, materialInfo.transmissionFactor); +#else + vec3 diffuse = f_diffuse; +#endif + + vec3 color = vec3(0); +#ifdef MATERIAL_UNLIT + color = baseColor.rgb; +#else + color = f_emissive + diffuse + f_specular; + color = f_sheen + color * albedoSheenScaling; + color = color * (1.0 - clearcoatFactor * clearcoatFresnel) + f_clearcoat; +#endif + +#if DEBUG == DEBUG_NONE + +#if ALPHAMODE == ALPHAMODE_MASK + // Late discard to avoid samplig artifacts. See https://github.com/KhronosGroup/glTF-Sample-Viewer/issues/267 + if (baseColor.a < u_AlphaCutoff) + { + discard; + } + baseColor.a = 1.0; +#endif + +#ifdef LINEAR_OUTPUT + g_finalColor = vec4(color.rgb, baseColor.a); +#else + g_finalColor = vec4(toneMap(color), baseColor.a); +#endif + +#else + // In case of missing data for a debug view, render a checkerboard. + g_finalColor = vec4(1.0); + { + float frequency = 0.02; + float gray = 0.9; + + vec2 v1 = step(0.5, fract(frequency * gl_FragCoord.xy)); + vec2 v2 = step(0.5, vec2(1.0) - fract(frequency * gl_FragCoord.xy)); + g_finalColor.rgb *= gray + v1.x * v1.y + v2.x * v2.y; + } +#endif + + // Debug views: + + // Generic: +#if DEBUG == DEBUG_UV_0 && defined(HAS_TEXCOORD_0_VEC2) + g_finalColor.rgb = vec3(v_texcoord_0, 0); +#endif +#if DEBUG == DEBUG_UV_1 && defined(HAS_TEXCOORD_1_VEC2) + g_finalColor.rgb = vec3(v_texcoord_1, 0); +#endif +#if DEBUG == DEBUG_NORMAL_TEXTURE && defined(HAS_NORMAL_MAP) + g_finalColor.rgb = (normalInfo.ntex + 1.0) / 2.0; +#endif +#if DEBUG == DEBUG_NORMAL_SHADING + g_finalColor.rgb = (n + 1.0) / 2.0; +#endif +#if DEBUG == DEBUG_NORMAL_GEOMETRY + g_finalColor.rgb = (normalInfo.ng + 1.0) / 2.0; +#endif +#if DEBUG == DEBUG_TANGENT + g_finalColor.rgb = (normalInfo.t + 1.0) / 2.0; +#endif +#if DEBUG == DEBUG_BITANGENT + g_finalColor.rgb = (normalInfo.b + 1.0) / 2.0; +#endif +#if DEBUG == DEBUG_ALPHA + g_finalColor.rgb = vec3(baseColor.a); +#endif +#if DEBUG == DEBUG_OCCLUSION && defined(HAS_OCCLUSION_MAP) + g_finalColor.rgb = vec3(ao); +#endif +#if DEBUG == DEBUG_EMISSIVE + g_finalColor.rgb = linearTosRGB(f_emissive); +#endif + + // MR: +#ifdef MATERIAL_METALLICROUGHNESS +#if DEBUG == DEBUG_METALLIC_ROUGHNESS + g_finalColor.rgb = linearTosRGB(f_diffuse + f_specular); +#endif +#if DEBUG == DEBUG_METALLIC + g_finalColor.rgb = vec3(materialInfo.metallic); +#endif +#if DEBUG == DEBUG_ROUGHNESS + g_finalColor.rgb = vec3(materialInfo.perceptualRoughness); +#endif +#if DEBUG == DEBUG_BASE_COLOR + g_finalColor.rgb = linearTosRGB(materialInfo.baseColor); +#endif +#endif + + // Clearcoat: +#ifdef MATERIAL_CLEARCOAT +#if DEBUG == DEBUG_CLEARCOAT + g_finalColor.rgb = linearTosRGB(f_clearcoat); +#endif +#if DEBUG == DEBUG_CLEARCOAT_FACTOR + g_finalColor.rgb = vec3(materialInfo.clearcoatFactor); +#endif +#if DEBUG == DEBUG_CLEARCOAT_ROUGHNESS + g_finalColor.rgb = vec3(materialInfo.clearcoatRoughness); +#endif +#if DEBUG == DEBUG_CLEARCOAT_NORMAL + g_finalColor.rgb = (materialInfo.clearcoatNormal + vec3(1)) / 2.0; +#endif +#endif + + // Sheen: +#ifdef MATERIAL_SHEEN +#if DEBUG == DEBUG_SHEEN + g_finalColor.rgb = linearTosRGB(f_sheen); +#endif +#if DEBUG == DEBUG_SHEEN_COLOR + g_finalColor.rgb = materialInfo.sheenColorFactor; +#endif +#if DEBUG == DEBUG_SHEEN_ROUGHNESS + g_finalColor.rgb = vec3(materialInfo.sheenRoughnessFactor); +#endif +#endif + + // Specular: +#ifdef MATERIAL_SPECULAR +#if DEBUG == DEBUG_SPECULAR + g_finalColor.rgb = linearTosRGB(f_specular); +#endif +#if DEBUG == DEBUG_SPECULAR_FACTOR + g_finalColor.rgb = vec3(materialInfo.specularWeight); +#endif + +#if DEBUG == DEBUG_SPECULAR_COLOR +vec3 specularTexture = vec3(1.0); +#ifdef HAS_SPECULAR_COLOR_MAP + specularTexture.rgb = texture(u_SpecularColorSampler, getSpecularColorUV()).rgb; +#endif + g_finalColor.rgb = u_KHR_materials_specular_specularColorFactor * specularTexture.rgb; +#endif +#endif + + // Transmission, Volume: +#ifdef MATERIAL_TRANSMISSION +#if DEBUG == DEBUG_TRANSMISSION_VOLUME + g_finalColor.rgb = linearTosRGB(f_transmission); +#endif +#if DEBUG == DEBUG_TRANSMISSION_FACTOR + g_finalColor.rgb = vec3(materialInfo.transmissionFactor); +#endif +#endif +#ifdef MATERIAL_VOLUME +#if DEBUG == DEBUG_VOLUME_THICKNESS + g_finalColor.rgb = vec3(materialInfo.thickness); +#endif +#endif + + // Iridescence: +#ifdef MATERIAL_IRIDESCENCE +#if DEBUG == DEBUG_IRIDESCENCE + g_finalColor.rgb = iridescenceFresnel; +#endif +#if DEBUG == DEBUG_IRIDESCENCE_FACTOR + g_finalColor.rgb = vec3(materialInfo.iridescenceFactor); +#endif +#if DEBUG == DEBUG_IRIDESCENCE_THICKNESS + g_finalColor.rgb = vec3(materialInfo.iridescenceThickness / 1200.0); +#endif +#endif +} \ No newline at end of file diff --git a/src/viewer3d/assets/punctual.glsl b/src/viewer3d/assets/punctual.glsl new file mode 100644 index 00000000..8de31b50 --- /dev/null +++ b/src/viewer3d/assets/punctual.glsl @@ -0,0 +1,141 @@ +// KHR_lights_punctual extension. +// see https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual +struct Light +{ + vec3 direction; + float range; + + vec3 color; + float intensity; + + vec3 position; + float innerConeCos; + + float outerConeCos; + int type; +}; + + +const int LightType_Directional = 0; +const int LightType_Point = 1; +const int LightType_Spot = 2; + + +#ifdef USE_PUNCTUAL +uniform Light u_Lights[LIGHT_COUNT + 1]; //Array [0] is not allowed +#endif + + +// https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_lights_punctual/README.md#range-property +float getRangeAttenuation(float range, float distance) +{ + if (range <= 0.0) + { + // negative range means unlimited + return 1.0 / pow(distance, 2.0); + } + return max(min(1.0 - pow(distance / range, 4.0), 1.0), 0.0) / pow(distance, 2.0); +} + + +// https://github.com/KhronosGroup/glTF/blob/master/extensions/2.0/Khronos/KHR_lights_punctual/README.md#inner-and-outer-cone-angles +float getSpotAttenuation(vec3 pointToLight, vec3 spotDirection, float outerConeCos, float innerConeCos) +{ + float actualCos = dot(normalize(spotDirection), normalize(-pointToLight)); + if (actualCos > outerConeCos) + { + if (actualCos < innerConeCos) + { + return smoothstep(outerConeCos, innerConeCos, actualCos); + } + return 1.0; + } + return 0.0; +} + + +vec3 getLighIntensity(Light light, vec3 pointToLight) +{ + float rangeAttenuation = 1.0; + float spotAttenuation = 1.0; + + if (light.type != LightType_Directional) + { + rangeAttenuation = getRangeAttenuation(light.range, length(pointToLight)); + } + if (light.type == LightType_Spot) + { + spotAttenuation = getSpotAttenuation(pointToLight, light.direction, light.outerConeCos, light.innerConeCos); + } + + return rangeAttenuation * spotAttenuation * light.intensity * light.color; +} + + +vec3 getPunctualRadianceTransmission(vec3 normal, vec3 view, vec3 pointToLight, float alphaRoughness, + vec3 f0, vec3 f90, vec3 baseColor, float ior) +{ + float transmissionRougness = applyIorToRoughness(alphaRoughness, ior); + + vec3 n = normalize(normal); // Outward direction of surface point + vec3 v = normalize(view); // Direction from surface point to view + vec3 l = normalize(pointToLight); + vec3 l_mirror = normalize(l + 2.0*n*dot(-l, n)); // Mirror light reflection vector on surface + vec3 h = normalize(l_mirror + v); // Halfway vector between transmission light vector and v + + float D = D_GGX(clamp(dot(n, h), 0.0, 1.0), transmissionRougness); + vec3 F = F_Schlick(f0, f90, clamp(dot(v, h), 0.0, 1.0)); + float Vis = V_GGX(clamp(dot(n, l_mirror), 0.0, 1.0), clamp(dot(n, v), 0.0, 1.0), transmissionRougness); + + // Transmission BTDF + return (1.0 - F) * baseColor * D * Vis; +} + + +vec3 getPunctualRadianceClearCoat(vec3 clearcoatNormal, vec3 v, vec3 l, vec3 h, float VdotH, vec3 f0, vec3 f90, float clearcoatRoughness) +{ + float NdotL = clampedDot(clearcoatNormal, l); + float NdotV = clampedDot(clearcoatNormal, v); + float NdotH = clampedDot(clearcoatNormal, h); + return NdotL * BRDF_specularGGX(f0, f90, clearcoatRoughness * clearcoatRoughness, 1.0, VdotH, NdotL, NdotV, NdotH); +} + + +vec3 getPunctualRadianceSheen(vec3 sheenColor, float sheenRoughness, float NdotL, float NdotV, float NdotH) +{ + return NdotL * BRDF_specularSheen(sheenColor, sheenRoughness, NdotL, NdotV, NdotH); +} + + +// Compute attenuated light as it travels through a volume. +vec3 applyVolumeAttenuation(vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance) +{ + if (attenuationDistance == 0.0) + { + // Attenuation distance is +∞ (which we indicate by zero), i.e. the transmitted color is not attenuated at all. + return radiance; + } + else + { + // Compute light attenuation using Beer's law. + vec3 attenuationCoefficient = -log(attenuationColor) / attenuationDistance; + vec3 transmittance = exp(-attenuationCoefficient * transmissionDistance); // Beer's law + return transmittance * radiance; + } +} + + +vec3 getVolumeTransmissionRay(vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix) +{ + // Direction of refracted light. + vec3 refractionVector = refract(-v, normalize(n), 1.0 / ior); + + // Compute rotation-independant scaling of the model matrix. + vec3 modelScale; + modelScale.x = length(vec3(modelMatrix[0].xyz)); + modelScale.y = length(vec3(modelMatrix[1].xyz)); + modelScale.z = length(vec3(modelMatrix[2].xyz)); + + // The thickness is specified in local space. + return normalize(refractionVector) * thickness * modelScale; +} \ No newline at end of file diff --git a/src/viewer3d/assets/textures.glsl b/src/viewer3d/assets/textures.glsl new file mode 100644 index 00000000..5d509a50 --- /dev/null +++ b/src/viewer3d/assets/textures.glsl @@ -0,0 +1,345 @@ +// IBL + + +uniform int u_MipCount; +uniform samplerCube u_LambertianEnvSampler; +uniform samplerCube u_GGXEnvSampler; +uniform sampler2D u_GGXLUT; +uniform samplerCube u_CharlieEnvSampler; +uniform sampler2D u_CharlieLUT; +uniform sampler2D u_SheenELUT; +uniform mat3 u_EnvRotation; + + +// General Material + + +uniform sampler2D u_NormalSampler; +uniform float u_NormalScale; +uniform int u_NormalUVSet; +uniform mat3 u_NormalUVTransform; + +uniform vec3 u_EmissiveFactor; +uniform sampler2D u_EmissiveSampler; +uniform int u_EmissiveUVSet; +uniform mat3 u_EmissiveUVTransform; + +uniform sampler2D u_OcclusionSampler; +uniform int u_OcclusionUVSet; +uniform float u_OcclusionStrength; +uniform mat3 u_OcclusionUVTransform; + + +in vec2 v_texcoord_0; +in vec2 v_texcoord_1; + + +vec2 getNormalUV() +{ + vec3 uv = vec3(u_NormalUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); + +#ifdef HAS_NORMAL_UV_TRANSFORM + uv = u_NormalUVTransform * uv; +#endif + + return uv.xy; +} + + +vec2 getEmissiveUV() +{ + vec3 uv = vec3(u_EmissiveUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); + +#ifdef HAS_EMISSIVE_UV_TRANSFORM + uv = u_EmissiveUVTransform * uv; +#endif + + return uv.xy; +} + + +vec2 getOcclusionUV() +{ + vec3 uv = vec3(u_OcclusionUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); + +#ifdef HAS_OCCLUSION_UV_TRANSFORM + uv = u_OcclusionUVTransform * uv; +#endif + + return uv.xy; +} + + +// Metallic Roughness Material + + +#ifdef MATERIAL_METALLICROUGHNESS + +uniform sampler2D u_BaseColorSampler; +uniform int u_BaseColorUVSet; +uniform mat3 u_BaseColorUVTransform; + +uniform sampler2D u_MetallicRoughnessSampler; +uniform int u_MetallicRoughnessUVSet; +uniform mat3 u_MetallicRoughnessUVTransform; + +vec2 getBaseColorUV() +{ + vec3 uv = vec3(u_BaseColorUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); + +#ifdef HAS_BASECOLOR_UV_TRANSFORM + uv = u_BaseColorUVTransform * uv; +#endif + + return uv.xy; +} + +vec2 getMetallicRoughnessUV() +{ + vec3 uv = vec3(u_MetallicRoughnessUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); + +#ifdef HAS_METALLICROUGHNESS_UV_TRANSFORM + uv = u_MetallicRoughnessUVTransform * uv; +#endif + + return uv.xy; +} + +#endif + + +// Specular Glossiness Material + + +#ifdef MATERIAL_SPECULARGLOSSINESS + +uniform sampler2D u_DiffuseSampler; +uniform int u_DiffuseUVSet; +uniform mat3 u_DiffuseUVTransform; + +uniform sampler2D u_SpecularGlossinessSampler; +uniform int u_SpecularGlossinessUVSet; +uniform mat3 u_SpecularGlossinessUVTransform; + + +vec2 getSpecularGlossinessUV() +{ + vec3 uv = vec3(u_SpecularGlossinessUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); + +#ifdef HAS_SPECULARGLOSSINESS_UV_TRANSFORM + uv = u_SpecularGlossinessUVTransform * uv; +#endif + + return uv.xy; +} + +vec2 getDiffuseUV() +{ + vec3 uv = vec3(u_DiffuseUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); + +#ifdef HAS_DIFFUSE_UV_TRANSFORM + uv = u_DiffuseUVTransform * uv; +#endif + + return uv.xy; +} + +#endif + + +// Clearcoat Material + + +#ifdef MATERIAL_CLEARCOAT + +uniform sampler2D u_ClearcoatSampler; +uniform int u_ClearcoatUVSet; +uniform mat3 u_ClearcoatUVTransform; + +uniform sampler2D u_ClearcoatRoughnessSampler; +uniform int u_ClearcoatRoughnessUVSet; +uniform mat3 u_ClearcoatRoughnessUVTransform; + +uniform sampler2D u_ClearcoatNormalSampler; +uniform int u_ClearcoatNormalUVSet; +uniform mat3 u_ClearcoatNormalUVTransform; +uniform float u_ClearcoatNormalScale; + + +vec2 getClearcoatUV() +{ + vec3 uv = vec3(u_ClearcoatUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_CLEARCOAT_UV_TRANSFORM + uv = u_ClearcoatUVTransform * uv; +#endif + return uv.xy; +} + +vec2 getClearcoatRoughnessUV() +{ + vec3 uv = vec3(u_ClearcoatRoughnessUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_CLEARCOATROUGHNESS_UV_TRANSFORM + uv = u_ClearcoatRoughnessUVTransform * uv; +#endif + return uv.xy; +} + +vec2 getClearcoatNormalUV() +{ + vec3 uv = vec3(u_ClearcoatNormalUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_CLEARCOATNORMAL_UV_TRANSFORM + uv = u_ClearcoatNormalUVTransform * uv; +#endif + return uv.xy; +} + +#endif + + +// Sheen Material + + +#ifdef MATERIAL_SHEEN + +uniform sampler2D u_SheenColorSampler; +uniform int u_SheenColorUVSet; +uniform mat3 u_SheenColorUVTransform; +uniform sampler2D u_SheenRoughnessSampler; +uniform int u_SheenRoughnessUVSet; +uniform mat3 u_SheenRoughnessUVTransform; + + +vec2 getSheenColorUV() +{ + vec3 uv = vec3(u_SheenColorUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_SHEENCOLOR_UV_TRANSFORM + uv = u_SheenColorUVTransform * uv; +#endif + return uv.xy; +} + +vec2 getSheenRoughnessUV() +{ + vec3 uv = vec3(u_SheenRoughnessUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_SHEENROUGHNESS_UV_TRANSFORM + uv = u_SheenRoughnessUVTransform * uv; +#endif + return uv.xy; +} + +#endif + + +// Specular Material + + +#ifdef MATERIAL_SPECULAR + +uniform sampler2D u_SpecularSampler; +uniform int u_SpecularUVSet; +uniform mat3 u_SpecularUVTransform; +uniform sampler2D u_SpecularColorSampler; +uniform int u_SpecularColorUVSet; +uniform mat3 u_SpecularColorUVTransform; + + +vec2 getSpecularUV() +{ + vec3 uv = vec3(u_SpecularUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_SPECULAR_UV_TRANSFORM + uv = u_SpecularUVTransform * uv; +#endif + return uv.xy; +} + +vec2 getSpecularColorUV() +{ + vec3 uv = vec3(u_SpecularColorUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_SPECULARCOLOR_UV_TRANSFORM + uv = u_SpecularColorUVTransform * uv; +#endif + return uv.xy; +} + +#endif + + +// Transmission Material + + +#ifdef MATERIAL_TRANSMISSION + +uniform sampler2D u_TransmissionSampler; +uniform int u_TransmissionUVSet; +uniform mat3 u_TransmissionUVTransform; +uniform sampler2D u_TransmissionFramebufferSampler; +uniform ivec2 u_TransmissionFramebufferSize; + + +vec2 getTransmissionUV() +{ + vec3 uv = vec3(u_TransmissionUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_TRANSMISSION_UV_TRANSFORM + uv = u_TransmissionUVTransform * uv; +#endif + return uv.xy; +} + +#endif + + +// Volume Material + + +#ifdef MATERIAL_VOLUME + +uniform sampler2D u_ThicknessSampler; +uniform int u_ThicknessUVSet; +uniform mat3 u_ThicknessUVTransform; + + +vec2 getThicknessUV() +{ + vec3 uv = vec3(u_ThicknessUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_THICKNESS_UV_TRANSFORM + uv = u_ThicknessUVTransform * uv; +#endif + return uv.xy; +} + +#endif + + +// Iridescence + + +#ifdef MATERIAL_IRIDESCENCE + +uniform sampler2D u_IridescenceSampler; +uniform int u_IridescenceUVSet; +uniform mat3 u_IridescenceUVTransform; + +uniform sampler2D u_IridescenceThicknessSampler; +uniform int u_IridescenceThicknessUVSet; +uniform mat3 u_IridescenceThicknessUVTransform; + + +vec2 getIridescenceUV() +{ + vec3 uv = vec3(u_IridescenceUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_IRIDESCENCE_UV_TRANSFORM + uv = u_IridescenceUVTransform * uv; +#endif + return uv.xy; +} + +vec2 getIridescenceThicknessUV() +{ + vec3 uv = vec3(u_IridescenceThicknessUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); +#ifdef HAS_IRIDESCENCETHICKNESS_UV_TRANSFORM + uv = u_IridescenceThicknessUVTransform * uv; +#endif + return uv.xy; +} + +#endif \ No newline at end of file diff --git a/src/viewer3d/assets/tonemapping.glsl b/src/viewer3d/assets/tonemapping.glsl new file mode 100644 index 00000000..cedd32db --- /dev/null +++ b/src/viewer3d/assets/tonemapping.glsl @@ -0,0 +1,109 @@ +uniform float u_Exposure; + + +const float GAMMA = 2.2; +const float INV_GAMMA = 1.0 / GAMMA; + + +// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT +const mat3 ACESInputMat = mat3 +( + 0.59719, 0.07600, 0.02840, + 0.35458, 0.90834, 0.13383, + 0.04823, 0.01566, 0.83777 +); + + +// ODT_SAT => XYZ => D60_2_D65 => sRGB +const mat3 ACESOutputMat = mat3 +( + 1.60475, -0.10208, -0.00327, + -0.53108, 1.10813, -0.07276, + -0.07367, -0.00605, 1.07602 +); + + +// linear to sRGB approximation +// see http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html +vec3 linearTosRGB(vec3 color) +{ + return pow(color, vec3(INV_GAMMA)); +} + + +// sRGB to linear approximation +// see http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html +vec3 sRGBToLinear(vec3 srgbIn) +{ + return vec3(pow(srgbIn.xyz, vec3(GAMMA))); +} + + +vec4 sRGBToLinear(vec4 srgbIn) +{ + return vec4(sRGBToLinear(srgbIn.xyz), srgbIn.w); +} + + +// ACES tone map (faster approximation) +// see: https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/ +vec3 toneMapACES_Narkowicz(vec3 color) +{ + const float A = 2.51; + const float B = 0.03; + const float C = 2.43; + const float D = 0.59; + const float E = 0.14; + return clamp((color * (A * color + B)) / (color * (C * color + D) + E), 0.0, 1.0); +} + + +// ACES filmic tone map approximation +// see https://github.com/TheRealMJP/BakingLab/blob/master/BakingLab/ACES.hlsl +vec3 RRTAndODTFit(vec3 color) +{ + vec3 a = color * (color + 0.0245786) - 0.000090537; + vec3 b = color * (0.983729 * color + 0.4329510) + 0.238081; + return a / b; +} + + +// tone mapping +vec3 toneMapACES_Hill(vec3 color) +{ + color = ACESInputMat * color; + + // Apply RRT and ODT + color = RRTAndODTFit(color); + + color = ACESOutputMat * color; + + // Clamp to [0, 1] + color = clamp(color, 0.0, 1.0); + + return color; +} + + +vec3 toneMap(vec3 color) +{ + color *= u_Exposure; + +#ifdef TONEMAP_ACES_NARKOWICZ + color = toneMapACES_Narkowicz(color); +#endif + +#ifdef TONEMAP_ACES_HILL + color = toneMapACES_Hill(color); +#endif + +#ifdef TONEMAP_ACES_HILL_EXPOSURE_BOOST + // boost exposure as discussed in https://github.com/mrdoob/three.js/pull/19621 + // this factor is based on the exposure correction of Krzysztof Narkowicz in his + // implemetation of ACES tone mapping + color /= 0.6; + color = toneMapACES_Hill(color); +#endif + + return linearTosRGB(color); +} \ No newline at end of file From 3d912ea6f76cb0161c4bea96a1d0ffbb4ee12afa Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 20 Dec 2022 11:44:36 -0500 Subject: [PATCH 066/100] add primitive shader --- src/viewer3d/assets/animation.glsl | 211 +++++++++++++++++++++++++++++ src/viewer3d/assets/primitive.vert | 150 ++++++++++++++++++++ 2 files changed, 361 insertions(+) create mode 100644 src/viewer3d/assets/animation.glsl create mode 100644 src/viewer3d/assets/primitive.vert diff --git a/src/viewer3d/assets/animation.glsl b/src/viewer3d/assets/animation.glsl new file mode 100644 index 00000000..7b40fcde --- /dev/null +++ b/src/viewer3d/assets/animation.glsl @@ -0,0 +1,211 @@ +#ifdef HAS_MORPH_TARGETS +uniform highp sampler2DArray u_MorphTargetsSampler; +#endif + +#ifdef USE_MORPHING +uniform float u_morphWeights[WEIGHT_COUNT]; +#endif + +#ifdef HAS_JOINTS_0_VEC4 +in vec4 a_joints_0; +#endif + +#ifdef HAS_JOINTS_1_VEC4 +in vec4 a_joints_1; +#endif + +#ifdef HAS_WEIGHTS_0_VEC4 +in vec4 a_weights_0; +#endif + +#ifdef HAS_WEIGHTS_1_VEC4 +in vec4 a_weights_1; +#endif + +#ifdef USE_SKINNING +uniform sampler2D u_jointsSampler; +#endif + +#ifdef USE_SKINNING + +mat4 getMatrixFromTexture(sampler2D s, int index) +{ + mat4 result = mat4(1); + int texSize = textureSize(s, 0)[0]; + int pixelIndex = index * 4; + for (int i = 0; i < 4; ++i) + { + int x = (pixelIndex + i) % texSize; + //Rounding mode of integers is undefined: + //https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf (section 12.33) + int y = (pixelIndex + i - x) / texSize; + result[i] = texelFetch(s, ivec2(x,y), 0); + } + return result; +} + +mat4 getSkinningMatrix() +{ + mat4 skin = mat4(0); + +#if defined(HAS_WEIGHTS_0_VEC4) && defined(HAS_JOINTS_0_VEC4) + skin += + a_weights_0.x * getMatrixFromTexture(u_jointsSampler, int(a_joints_0.x) * 2) + + a_weights_0.y * getMatrixFromTexture(u_jointsSampler, int(a_joints_0.y) * 2) + + a_weights_0.z * getMatrixFromTexture(u_jointsSampler, int(a_joints_0.z) * 2) + + a_weights_0.w * getMatrixFromTexture(u_jointsSampler, int(a_joints_0.w) * 2); +#endif + +#if defined(HAS_WEIGHTS_1_VEC4) && defined(HAS_JOINTS_1_VEC4) + skin += + a_weights_1.x * getMatrixFromTexture(u_jointsSampler, int(a_joints_1.x) * 2) + + a_weights_1.y * getMatrixFromTexture(u_jointsSampler, int(a_joints_1.y) * 2) + + a_weights_1.z * getMatrixFromTexture(u_jointsSampler, int(a_joints_1.z) * 2) + + a_weights_1.w * getMatrixFromTexture(u_jointsSampler, int(a_joints_1.w) * 2); +#endif + if (skin == mat4(0)) { + return mat4(1); + } + return skin; +} + + +mat4 getSkinningNormalMatrix() +{ + mat4 skin = mat4(0); + +#if defined(HAS_WEIGHTS_0_VEC4) && defined(HAS_JOINTS_0_VEC4) + skin += + a_weights_0.x * getMatrixFromTexture(u_jointsSampler, int(a_joints_0.x) * 2 + 1) + + a_weights_0.y * getMatrixFromTexture(u_jointsSampler, int(a_joints_0.y) * 2 + 1) + + a_weights_0.z * getMatrixFromTexture(u_jointsSampler, int(a_joints_0.z) * 2 + 1) + + a_weights_0.w * getMatrixFromTexture(u_jointsSampler, int(a_joints_0.w) * 2 + 1); +#endif + +#if defined(HAS_WEIGHTS_1_VEC4) && defined(HAS_JOINTS_1_VEC4) + skin += + a_weights_1.x * getMatrixFromTexture(u_jointsSampler, int(a_joints_1.x) * 2 + 1) + + a_weights_1.y * getMatrixFromTexture(u_jointsSampler, int(a_joints_1.y) * 2 + 1) + + a_weights_1.z * getMatrixFromTexture(u_jointsSampler, int(a_joints_1.z) * 2 + 1) + + a_weights_1.w * getMatrixFromTexture(u_jointsSampler, int(a_joints_1.w) * 2 + 1); +#endif + if (skin == mat4(0)) { + return mat4(1); + } + return skin; +} + +#endif // !USE_SKINNING + + +#ifdef USE_MORPHING + +#ifdef HAS_MORPH_TARGETS +vec4 getDisplacement(int vertexID, int targetIndex, int texSize) +{ + int x = vertexID % texSize; + //Rounding mode of integers is undefined: + //https://www.khronos.org/registry/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf (section 12.33) + int y = (vertexID - x) / texSize; + return texelFetch(u_MorphTargetsSampler, ivec3(x, y, targetIndex), 0); +} +#endif + + +vec4 getTargetPosition(int vertexID) +{ + vec4 pos = vec4(0); +#ifdef HAS_MORPH_TARGET_POSITION + int texSize = textureSize(u_MorphTargetsSampler, 0)[0]; + for(int i = 0; i < WEIGHT_COUNT; i++) + { + vec4 displacement = getDisplacement(vertexID, MORPH_TARGET_POSITION_OFFSET + i, texSize); + pos += u_morphWeights[i] * displacement; + } +#endif + + return pos; +} + +vec3 getTargetNormal(int vertexID) +{ + vec3 normal = vec3(0); + +#ifdef HAS_MORPH_TARGET_NORMAL + int texSize = textureSize(u_MorphTargetsSampler, 0)[0]; + for(int i = 0; i < WEIGHT_COUNT; i++) + { + vec3 displacement = getDisplacement(vertexID, MORPH_TARGET_NORMAL_OFFSET + i, texSize).xyz; + normal += u_morphWeights[i] * displacement; + } +#endif + + return normal; +} + + +vec3 getTargetTangent(int vertexID) +{ + vec3 tangent = vec3(0); + +#ifdef HAS_MORPH_TARGET_TANGENT + int texSize = textureSize(u_MorphTargetsSampler, 0)[0]; + for(int i = 0; i < WEIGHT_COUNT; i++) + { + vec3 displacement = getDisplacement(vertexID, MORPH_TARGET_TANGENT_OFFSET + i, texSize).xyz; + tangent += u_morphWeights[i] * displacement; + } +#endif + + return tangent; +} + +vec2 getTargetTexCoord0(int vertexID) +{ + vec2 uv = vec2(0); + +#ifdef HAS_MORPH_TARGET_TEXCOORD_0 + int texSize = textureSize(u_MorphTargetsSampler, 0)[0]; + for(int i = 0; i < WEIGHT_COUNT; i++) + { + vec2 displacement = getDisplacement(vertexID, MORPH_TARGET_TEXCOORD_0_OFFSET + i, texSize).xy; + uv += u_morphWeights[i] * displacement; + } +#endif + + return uv; +} + +vec2 getTargetTexCoord1(int vertexID) +{ + vec2 uv = vec2(0); + +#ifdef HAS_MORPH_TARGET_TEXCOORD_1 + int texSize = textureSize(u_MorphTargetsSampler, 0)[0]; + for(int i = 0; i < WEIGHT_COUNT; i++) + { + vec2 displacement = getDisplacement(vertexID, MORPH_TARGET_TEXCOORD_1_OFFSET + i, texSize).xy; + uv += u_morphWeights[i] * displacement; + } +#endif + + return uv; +} + +vec4 getTargetColor0(int vertexID) +{ + vec4 color = vec4(0); + +#ifdef HAS_MORPH_TARGET_COLOR_0 + int texSize = textureSize(u_MorphTargetsSampler, 0)[0]; + for(int i = 0; i < WEIGHT_COUNT; i++) + { + vec4 displacement = getDisplacement(vertexID, MORPH_TARGET_COLOR_0_OFFSET + i, texSize); + color += u_morphWeights[i] * displacement; + } +#endif + + return color; +} + +#endif // !USE_MORPHING \ No newline at end of file diff --git a/src/viewer3d/assets/primitive.vert b/src/viewer3d/assets/primitive.vert new file mode 100644 index 00000000..06bda084 --- /dev/null +++ b/src/viewer3d/assets/primitive.vert @@ -0,0 +1,150 @@ +#include + + +uniform mat4 u_ViewProjectionMatrix; +uniform mat4 u_ModelMatrix; +uniform mat4 u_NormalMatrix; + + +in vec3 a_position; +out vec3 v_Position; + +#ifdef HAS_NORMAL_VEC3 +in vec3 a_normal; +#endif + +#ifdef HAS_NORMAL_VEC3 +#ifdef HAS_TANGENT_VEC4 +in vec4 a_tangent; +out mat3 v_TBN; +#else +out vec3 v_Normal; +#endif +#endif + +#ifdef HAS_TEXCOORD_0_VEC2 +in vec2 a_texcoord_0; +#endif + +#ifdef HAS_TEXCOORD_1_VEC2 +in vec2 a_texcoord_1; +#endif + +out vec2 v_texcoord_0; +out vec2 v_texcoord_1; + +#ifdef HAS_COLOR_0_VEC3 +in vec3 a_color_0; +out vec3 v_Color; +#endif + +#ifdef HAS_COLOR_0_VEC4 +in vec4 a_color_0; +out vec4 v_Color; +#endif + + +vec4 getPosition() +{ + vec4 pos = vec4(a_position, 1.0); + +#ifdef USE_MORPHING + pos += getTargetPosition(gl_VertexID); +#endif + +#ifdef USE_SKINNING + pos = getSkinningMatrix() * pos; +#endif + + return pos; +} + + +#ifdef HAS_NORMAL_VEC3 +vec3 getNormal() +{ + vec3 normal = a_normal; + +#ifdef USE_MORPHING + normal += getTargetNormal(gl_VertexID); +#endif + +#ifdef USE_SKINNING + normal = mat3(getSkinningNormalMatrix()) * normal; +#endif + + return normalize(normal); +} +#endif + +#ifdef HAS_NORMAL_VEC3 +#ifdef HAS_TANGENT_VEC4 +vec3 getTangent() +{ + vec3 tangent = a_tangent.xyz; + +#ifdef USE_MORPHING + tangent += getTargetTangent(gl_VertexID); +#endif + +#ifdef USE_SKINNING + tangent = mat3(getSkinningMatrix()) * tangent; +#endif + + return normalize(tangent); +} +#endif +#endif + + +void main() +{ + gl_PointSize = 1.0f; + vec4 pos = u_ModelMatrix * getPosition(); + v_Position = vec3(pos.xyz) / pos.w; + +#ifdef HAS_NORMAL_VEC3 +#ifdef HAS_TANGENT_VEC4 + vec3 tangent = getTangent(); + vec3 normalW = normalize(vec3(u_NormalMatrix * vec4(getNormal(), 0.0))); + vec3 tangentW = normalize(vec3(u_ModelMatrix * vec4(tangent, 0.0))); + vec3 bitangentW = cross(normalW, tangentW) * a_tangent.w; + v_TBN = mat3(tangentW, bitangentW, normalW); +#else + v_Normal = normalize(vec3(u_NormalMatrix * vec4(getNormal(), 0.0))); +#endif +#endif + + v_texcoord_0 = vec2(0.0, 0.0); + v_texcoord_1 = vec2(0.0, 0.0); + +#ifdef HAS_TEXCOORD_0_VEC2 + v_texcoord_0 = a_texcoord_0; +#endif + +#ifdef HAS_TEXCOORD_1_VEC2 + v_texcoord_1 = a_texcoord_1; +#endif + +#ifdef USE_MORPHING + v_texcoord_0 += getTargetTexCoord0(gl_VertexID); + v_texcoord_1 += getTargetTexCoord1(gl_VertexID); +#endif + + +#if defined(HAS_COLOR_0_VEC3) + v_Color = a_color_0; +#if defined(USE_MORPHING) + v_Color = clamp(v_Color + getTargetColor0(gl_VertexID).xyz, 0.0f, 1.0f); +#endif +#endif + +#if defined(HAS_COLOR_0_VEC4) + v_Color = a_color_0; +#if defined(USE_MORPHING) + v_Color = clamp(v_Color + getTargetColor0(gl_VertexID), 0.0f, 1.0f); +#endif +#endif + + gl_Position = u_ViewProjectionMatrix * pos; +} \ No newline at end of file From df8d788e08347f280a4b3055cf6b4f344c883bcd Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 25 Dec 2022 02:05:53 -0500 Subject: [PATCH 067/100] add basic albedo rendering --- src/viewer3d/assets.qrc | 11 +++ src/viewer3d/assets/ibl.glsl | 179 +++++++++++++++++++++++++++++++++++ src/viewer3d/viewer3d.cpp | 172 +++++++++++++++++++++++++++++---- src/viewer3d/viewer3d.h | 32 ++++++- 4 files changed, 371 insertions(+), 23 deletions(-) create mode 100644 src/viewer3d/assets/ibl.glsl diff --git a/src/viewer3d/assets.qrc b/src/viewer3d/assets.qrc index 8c351708..bbabf730 100644 --- a/src/viewer3d/assets.qrc +++ b/src/viewer3d/assets.qrc @@ -6,5 +6,16 @@ assets/fullscreen.vert assets/panorama_to_cubemap.frag assets/ibl_filtering.frag + assets/animation.glsl + assets/brdf.glsl + assets/functions.glsl + assets/ibl.glsl + assets/iridiscence.glsl + assets/material_info.glsl + assets/pbr.frag + assets/primitive.vert + assets/punctual.glsl + assets/textures.glsl + assets/tonemapping.glsl \ No newline at end of file diff --git a/src/viewer3d/assets/ibl.glsl b/src/viewer3d/assets/ibl.glsl new file mode 100644 index 00000000..25bae222 --- /dev/null +++ b/src/viewer3d/assets/ibl.glsl @@ -0,0 +1,179 @@ +uniform float u_EnvIntensity; + +vec3 getDiffuseLight(vec3 n) +{ + return texture(u_LambertianEnvSampler, u_EnvRotation * n).rgb * u_EnvIntensity; +} + + +vec4 getSpecularSample(vec3 reflection, float lod) +{ + return textureLod(u_GGXEnvSampler, u_EnvRotation * reflection, lod) * u_EnvIntensity; +} + + +vec4 getSheenSample(vec3 reflection, float lod) +{ + return textureLod(u_CharlieEnvSampler, u_EnvRotation * reflection, lod) * u_EnvIntensity; +} + + +vec3 getIBLRadianceGGX(vec3 n, vec3 v, float roughness, vec3 F0, float specularWeight) +{ + float NdotV = clampedDot(n, v); + float lod = roughness * float(u_MipCount - 1); + vec3 reflection = normalize(reflect(-v, n)); + + vec2 brdfSamplePoint = clamp(vec2(NdotV, roughness), vec2(0.0, 0.0), vec2(1.0, 1.0)); + vec2 f_ab = texture(u_GGXLUT, brdfSamplePoint).rg; + vec4 specularSample = getSpecularSample(reflection, lod); + + vec3 specularLight = specularSample.rgb; + + // see https://bruop.github.io/ibl/#single_scattering_results at Single Scattering Results + // Roughness dependent fresnel, from Fdez-Aguera + vec3 Fr = max(vec3(1.0 - roughness), F0) - F0; + vec3 k_S = F0 + Fr * pow(1.0 - NdotV, 5.0); + vec3 FssEss = k_S * f_ab.x + f_ab.y; + + return specularWeight * specularLight * FssEss; +} + + +#ifdef MATERIAL_IRIDESCENCE +vec3 getIBLRadianceGGXIridescence(vec3 n, vec3 v, float roughness, vec3 F0, vec3 iridescenceFresnel, float iridescenceFactor, float specularWeight) +{ + float NdotV = clampedDot(n, v); + float lod = roughness * float(u_MipCount - 1); + vec3 reflection = normalize(reflect(-v, n)); + + vec2 brdfSamplePoint = clamp(vec2(NdotV, roughness), vec2(0.0, 0.0), vec2(1.0, 1.0)); + vec2 f_ab = texture(u_GGXLUT, brdfSamplePoint).rg; + vec4 specularSample = getSpecularSample(reflection, lod); + + vec3 specularLight = specularSample.rgb; + + // see https://bruop.github.io/ibl/#single_scattering_results at Single Scattering Results + // Roughness dependent fresnel, from Fdez-Aguera + vec3 Fr = max(vec3(1.0 - roughness), F0) - F0; + vec3 k_S = mix(F0 + Fr * pow(1.0 - NdotV, 5.0), iridescenceFresnel, iridescenceFactor); + vec3 FssEss = k_S * f_ab.x + f_ab.y; + + return specularWeight * specularLight * FssEss; +} +#endif + + +#ifdef MATERIAL_TRANSMISSION +vec3 getTransmissionSample(vec2 fragCoord, float roughness, float ior) +{ + float framebufferLod = log2(float(u_TransmissionFramebufferSize.x)) * applyIorToRoughness(roughness, ior); + vec3 transmittedLight = textureLod(u_TransmissionFramebufferSampler, fragCoord.xy, framebufferLod).rgb; + return transmittedLight; +} +#endif + + +#ifdef MATERIAL_TRANSMISSION +vec3 getIBLVolumeRefraction(vec3 n, vec3 v, float perceptualRoughness, vec3 baseColor, vec3 f0, vec3 f90, + vec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec3 attenuationColor, float attenuationDistance) +{ + vec3 transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix); + vec3 refractedRayExit = position + transmissionRay; + + // Project refracted vector on the framebuffer, while mapping to normalized device coordinates. + vec4 ndcPos = projMatrix * viewMatrix * vec4(refractedRayExit, 1.0); + vec2 refractionCoords = ndcPos.xy / ndcPos.w; + refractionCoords += 1.0; + refractionCoords /= 2.0; + + // Sample framebuffer to get pixel the refracted ray hits. + vec3 transmittedLight = getTransmissionSample(refractionCoords, perceptualRoughness, ior); + + vec3 attenuatedColor = applyVolumeAttenuation(transmittedLight, length(transmissionRay), attenuationColor, attenuationDistance); + + // Sample GGX LUT to get the specular component. + float NdotV = clampedDot(n, v); + vec2 brdfSamplePoint = clamp(vec2(NdotV, perceptualRoughness), vec2(0.0, 0.0), vec2(1.0, 1.0)); + vec2 brdf = texture(u_GGXLUT, brdfSamplePoint).rg; + vec3 specularColor = f0 * brdf.x + f90 * brdf.y; + + return (1.0 - specularColor) * attenuatedColor * baseColor; +} +#endif + + +// specularWeight is introduced with KHR_materials_specular +vec3 getIBLRadianceLambertian(vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 F0, float specularWeight) +{ + float NdotV = clampedDot(n, v); + vec2 brdfSamplePoint = clamp(vec2(NdotV, roughness), vec2(0.0, 0.0), vec2(1.0, 1.0)); + vec2 f_ab = texture(u_GGXLUT, brdfSamplePoint).rg; + + vec3 irradiance = getDiffuseLight(n); + + // see https://bruop.github.io/ibl/#single_scattering_results at Single Scattering Results + // Roughness dependent fresnel, from Fdez-Aguera + + vec3 Fr = max(vec3(1.0 - roughness), F0) - F0; + vec3 k_S = F0 + Fr * pow(1.0 - NdotV, 5.0); + vec3 FssEss = specularWeight * k_S * f_ab.x + f_ab.y; // <--- GGX / specular light contribution (scale it down if the specularWeight is low) + + // Multiple scattering, from Fdez-Aguera + float Ems = (1.0 - (f_ab.x + f_ab.y)); + vec3 F_avg = specularWeight * (F0 + (1.0 - F0) / 21.0); + vec3 FmsEms = Ems * FssEss * F_avg / (1.0 - F_avg * Ems); + vec3 k_D = diffuseColor * (1.0 - FssEss + FmsEms); // we use +FmsEms as indicated by the formula in the blog post (might be a typo in the implementation) + + return (FmsEms + k_D) * irradiance; +} + + +#ifdef MATERIAL_IRIDESCENCE +// specularWeight is introduced with KHR_materials_specular +vec3 getIBLRadianceLambertianIridescence(vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 F0, vec3 iridescenceF0, float iridescenceFactor, float specularWeight) +{ + float NdotV = clampedDot(n, v); + vec2 brdfSamplePoint = clamp(vec2(NdotV, roughness), vec2(0.0, 0.0), vec2(1.0, 1.0)); + vec2 f_ab = texture(u_GGXLUT, brdfSamplePoint).rg; + + vec3 irradiance = getDiffuseLight(n); + + // Use the maximum component of the iridescence Fresnel color + // Maximum is used instead of the RGB value to not get inverse colors for the diffuse BRDF + vec3 iridescenceF0Max = vec3(max(max(iridescenceF0.r, iridescenceF0.g), iridescenceF0.b)); + + // Blend between base F0 and iridescence F0 + vec3 mixedF0 = mix(F0, iridescenceF0Max, iridescenceFactor); + + // see https://bruop.github.io/ibl/#single_scattering_results at Single Scattering Results + // Roughness dependent fresnel, from Fdez-Aguera + + vec3 Fr = max(vec3(1.0 - roughness), mixedF0) - mixedF0; + vec3 k_S = mixedF0 + Fr * pow(1.0 - NdotV, 5.0); + vec3 FssEss = specularWeight * k_S * f_ab.x + f_ab.y; // <--- GGX / specular light contribution (scale it down if the specularWeight is low) + + // Multiple scattering, from Fdez-Aguera + float Ems = (1.0 - (f_ab.x + f_ab.y)); + vec3 F_avg = specularWeight * (mixedF0 + (1.0 - mixedF0) / 21.0); + vec3 FmsEms = Ems * FssEss * F_avg / (1.0 - F_avg * Ems); + vec3 k_D = diffuseColor * (1.0 - FssEss + FmsEms); // we use +FmsEms as indicated by the formula in the blog post (might be a typo in the implementation) + + return (FmsEms + k_D) * irradiance; +} +#endif + + +vec3 getIBLRadianceCharlie(vec3 n, vec3 v, float sheenRoughness, vec3 sheenColor) +{ + float NdotV = clampedDot(n, v); + float lod = sheenRoughness * float(u_MipCount - 1); + vec3 reflection = normalize(reflect(-v, n)); + + vec2 brdfSamplePoint = clamp(vec2(NdotV, sheenRoughness), vec2(0.0, 0.0), vec2(1.0, 1.0)); + float brdf = texture(u_CharlieLUT, brdfSamplePoint).b; + vec4 sheenSample = getSheenSample(reflection, lod); + + vec3 sheenLight = sheenSample.rgb; + return sheenLight * sheenColor * brdf; +} \ No newline at end of file diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index d1b3720d..8b526b84 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -20,6 +20,7 @@ #include #include "iblsampler.h" +#include "shadercache.h" #define TINYGLTF_IMPLEMENTATION #define TINYGLTF_NO_STB_IMAGE @@ -45,9 +46,15 @@ class Mesh { int numElements = 0; std::map vbos; QOpenGLBuffer* indexBuffer; + QList attribs; tinygltf::Primitive primitive; tinygltf::Accessor indexAccessor; + + // transformation props + QMatrix4x4 transform; + QMatrix3x3 normalMatrix; + Material* material = nullptr; }; QOpenGLShaderProgram* createMainShader(); @@ -64,10 +71,25 @@ void Viewer3D::initializeGL() if (vao->create()) vao->bind(); + shaderCache = new ShaderCache(); + shaderCache->addShaderFile("animation.glsl", ":assets/animation.glsl"); + shaderCache->addShaderFile("brdf.glsl", ":assets/brdf.glsl"); + shaderCache->addShaderFile("functions.glsl", ":assets/functions.glsl"); + shaderCache->addShaderFile("iridiscence.glsl", ":assets/iridiscence.glsl"); + shaderCache->addShaderFile("ibl.glsl", ":assets/ibl.glsl"); + shaderCache->addShaderFile("material_info.glsl", + ":assets/material_info.glsl"); + shaderCache->addShaderFile("pbr.frag", ":assets/pbr.frag"); + shaderCache->addShaderFile("primitive.vert", ":assets/primitive.vert"); + shaderCache->addShaderFile("punctual.glsl", ":assets/punctual.glsl"); + shaderCache->addShaderFile("textures.glsl", ":assets/textures.glsl"); + shaderCache->addShaderFile("tonemapping.glsl", ":assets/tonemapping.glsl"); + mainProgram = createMainShader(); mesh = loadMesh(); gltfMesh = loadMeshFromRc(":assets/cube.gltf"); + gltfMesh->material = this->loadMaterial(); // setup matrices worldMatrix.setToIdentity(); @@ -105,25 +127,26 @@ void Viewer3D::paintGL() // todo: bind textures // iblSampler->inputTexture->bind(0); - iblSampler->cubemapTexture->bind(0); - - mainProgram->bind(); - mainProgram->setUniformValue("worldMatrix", worldMatrix); - mainProgram->setUniformValue("viewMatrix", viewMatrix); - mainProgram->setUniformValue("projMatrix", projMatrix); - - mesh->bind(); - // setup attrib array - gl->glEnableVertexAttribArray((int)VertexUsage::Position); - gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); - gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, GL_FALSE, - 5 * sizeof(float), nullptr); - gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, - GL_FALSE, 5 * sizeof(float), - reinterpret_cast(3 * sizeof(float))); - - // render - gl->glDrawArrays(GL_TRIANGLES, 0, 6); + // iblSampler->ggxLutTexture->bind(0); + + // mainProgram->bind(); + // mainProgram->setUniformValue("worldMatrix", worldMatrix); + // mainProgram->setUniformValue("viewMatrix", viewMatrix); + // mainProgram->setUniformValue("projMatrix", projMatrix); + + // mesh->bind(); + // // setup attrib array + // gl->glEnableVertexAttribArray((int)VertexUsage::Position); + // gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + // gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, + // GL_FALSE, + // 5 * sizeof(float), nullptr); + // gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, + // GL_FALSE, 5 * sizeof(float), + // reinterpret_cast(3 * sizeof(float))); + + // // render + // gl->glDrawArrays(GL_TRIANGLES, 0, 6); // render gltf mesh renderGltfMesh(gltfMesh); @@ -195,6 +218,7 @@ void Viewer3D::buildView() // offset by center eyePos += center; + camPos = eyePos; viewMatrix.setToIdentity(); viewMatrix.lookAt(eyePos, center, QVector3D(0, 1, 0)); @@ -395,6 +419,7 @@ Mesh* loadMeshFromRc(const QString& path) tinygltf::Primitive primitive = mesh.primitives[0]; tinygltf::Accessor indexAccessor = model.accessors[primitive.indices]; + QList attribs; // assign vertex channels to buffers for (auto& attrib : primitive.attributes) { @@ -428,6 +453,7 @@ Mesh* loadMeshFromRc(const QString& path) accessor.normalized ? GL_TRUE : GL_FALSE, byteStride, BUFFER_OFFSET(accessor.byteOffset)); + attribs.append((VertexUsage)vaa); } else std::cout << "vaa missing: " << attrib.first << std::endl; @@ -438,6 +464,7 @@ Mesh* loadMeshFromRc(const QString& path) Mesh* finalMesh = new Mesh; finalMesh->vao = vao; finalMesh->vbos = vbos; + finalMesh->attribs = attribs; finalMesh->indexBuffer = vbos.at(indexAccessor.bufferView); finalMesh->primitive = primitive; @@ -445,8 +472,60 @@ Mesh* loadMeshFromRc(const QString& path) return finalMesh; } -void renderGltfMesh(Mesh* mesh) +// https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/glTF-WebGL-PBR/mesh.js#L113 +// https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/Renderer/renderer.js +void Viewer3D::renderGltfMesh(Mesh* mesh) { + // setup material + auto& mat = mesh->material; + auto& shader = mat->shader; + shader->bind(); + + QMatrix4x4 mvp; + mvp.setToIdentity(); + mvp = projMatrix * viewMatrix * worldMatrix; + + auto modelInverse = worldMatrix.inverted(); + auto normalMatrix = modelInverse.transposed(); + + shader->setUniformValue("u_ViewProjectionMatrix", projMatrix * viewMatrix); + shader->setUniformValue("u_ModelMatrix", worldMatrix); + shader->setUniformValue("u_NormalMatrix", normalMatrix); + shader->setUniformValue("u_Exposure", 1); + shader->setUniformValue("u_Camera", camPos); + + // default mat props + shader->setUniformValue("u_BaseColorFactor", QVector4D(1, 1, 1, 1)); + shader->setUniformValue("u_MetallicFactor", 1.f); + shader->setUniformValue("u_RoughnessFactor", 1.f); + shader->setUniformValue("u_EmissiveStrength", 1.f); + shader->setUniformValue("u_BaseColorUVSet", 0); + + // albedo + // mainProgram->setUniformValue("u_BaseColorFactor", mat->albedo); + shader->setUniformValue("u_BaseColorSampler", 0); + mat->albedoMap->bind(0); + + // pbr maps - they start at 8 + // https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/Renderer/renderer.js#L732 + shader->setUniformValue("u_LambertianEnvSampler", 8); + iblSampler->lambertianTexture->bind(8); + shader->setUniformValue("u_GGXEnvSampler", 9); + iblSampler->ggxTexture->bind(9); + shader->setUniformValue("u_GGXLUT", 10); + iblSampler->ggxLutTexture->bind(10); + shader->setUniformValue("u_CharlieEnvSampler", 11); + iblSampler->sheenTexture->bind(11); + shader->setUniformValue("u_CharlieLUT", 12); + iblSampler->charlieLutTexture->bind(12); + + shader->setUniformValue("u_MipCount", iblSampler->mipmapLevels); + QMatrix3x3 envRot; + envRot.setToIdentity(); + shader->setUniformValue("u_EnvRotation", envRot); + shader->setUniformValue("u_EnvIntensity", 1.0f); + + // render mesh mesh->vao->bind(); tinygltf::Primitive primitive = mesh->primitive; tinygltf::Accessor indexAccessor = mesh->indexAccessor; @@ -454,6 +533,11 @@ void renderGltfMesh(Mesh* mesh) // glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbos.at(indexAccessor.bufferView)); mesh->indexBuffer->bind(); + gl->glEnableVertexAttribArray((int)VertexUsage::Position); + gl->glEnableVertexAttribArray((int)VertexUsage::Normal); + gl->glEnableVertexAttribArray((int)VertexUsage::Tangent); + gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + glDrawElements(primitive.mode, indexAccessor.count, indexAccessor.componentType, BUFFER_OFFSET(indexAccessor.byteOffset)); @@ -492,4 +576,50 @@ bool loadGltfModel(tinygltf::Model& model, const QString& filename) std::cout << "Loaded glTF: " << filename.toStdString() << std::endl; return res; -} \ No newline at end of file +} + +Material* Viewer3D::loadMaterial() +{ + auto mat = new Material(); + + QStringList flags; + flags << "USE_IBL"; + flags << "HAS_NORMAL_VEC3"; + flags << "HAS_TANGENT_VEC4"; + flags << "HAS_TEXCOORD_0_VEC2"; + flags << "HAS_BASE_COLOR_MAP 1"; // albedo only for now + flags << "MATERIAL_METALLICROUGHNESS 1"; // MR mode + flags << "ALPHAMODE ALPHAMODE_OPAQUE"; + + auto vertShader = + shaderCache->generateShaderSource("primitive.vert", flags); + auto fragShader = shaderCache->generateShaderSource("pbr.frag", flags); + + auto shader = new QOpenGLShaderProgram; + shader->addShaderFromSourceCode(QOpenGLShader::Vertex, vertShader); + shader->addShaderFromSourceCode(QOpenGLShader::Fragment, fragShader); + shader->link(); + + shader->bindAttributeLocation("a_position", (int)VertexUsage::Position); + shader->bindAttributeLocation("a_normal", (int)VertexUsage::Normal); + shader->bindAttributeLocation("a_tangent", (int)VertexUsage::Tangent); + shader->bindAttributeLocation("a_color_0", (int)VertexUsage::Color); + shader->bindAttributeLocation("a_texcoord_0", (int)VertexUsage::TexCoord0); + shader->bindAttributeLocation("a_texcoord_1", (int)VertexUsage::TexCoord1); + + mat->shader = shader; + + // textures + mat->albedoMap = loadTexture(":assets/brick.jpg"); + + return mat; +} +QOpenGLTexture* Viewer3D::loadTexture(const QString& path) +{ + QImage image(path); + return new QOpenGLTexture(image); +} + +// void Viewer3D::renderMesh(Mesh* mesh) { + +// } \ No newline at end of file diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index a3e81168..24c241c7 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -21,9 +21,30 @@ class QOpenGLShaderProgram; class QOpenGLBuffer; class QOpenGLVertexArrayObject; class Mesh; +class ShaderCache; class IblSampler; +struct Material { + QOpenGLShaderProgram* shader = nullptr; + + QOpenGLTexture* albedoMap = nullptr; + QOpenGLTexture* normalMap = nullptr; + QOpenGLTexture* metalnessMap = nullptr; + QOpenGLTexture* roughnessMap = nullptr; + QOpenGLTexture* heightMap = nullptr; + QOpenGLTexture* aoMap = nullptr; + QOpenGLTexture* emissiveMap = nullptr; + QOpenGLTexture* alphaMap = nullptr; + + QVector3D albedo = QVector3D(1, 1, 1); + float normalIntensity = 1.0; + float roughness = 1.0; + float heightScale = 1.0; + float alpha = 1.0; + QVector3D emission = QVector3D(1, 1, 1); +}; + class Viewer3D : public QOpenGLWidget { QOpenGLTexture* texture = nullptr; QOpenGLShaderProgram* mainProgram = nullptr; @@ -44,14 +65,15 @@ class Viewer3D : public QOpenGLWidget { QMatrix4x4 viewMatrix; QMatrix4x4 worldMatrix; - QVector3D m_eye; - QVector3D m_target = {0, 0, -1}; + // QVector3D m_eye; + // QVector3D m_target = {0, 0, -1}; // trackball params float zoom = 5; float zoomSpeed = 0.3f; QPoint prevPos; QVector3D center = {0, 0, 0}; + QVector3D camPos = {0, 0, 0}; float yaw = 0; float pitch = 0; float dragSpeed = 0.5f; @@ -60,6 +82,7 @@ class Viewer3D : public QOpenGLWidget { bool middleMouseDown = false; IblSampler* iblSampler; + ShaderCache* shaderCache; protected: void initializeGL(); @@ -73,4 +96,9 @@ class Viewer3D : public QOpenGLWidget { void wheelEvent(QWheelEvent* e) override; void buildView(); + + Material* loadMaterial(); + QOpenGLTexture* loadTexture(const QString& path); + // void renderMesh(Mesh* mesh); + void renderGltfMesh(Mesh* mesh); }; \ No newline at end of file From 06a5161a8b5c25260df95c0f9049a90c7d0abde7 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 25 Dec 2022 06:43:21 -0500 Subject: [PATCH 068/100] fix missing normal render bug --- src/viewer3d/assets/pbr.frag | 1 - src/viewer3d/iblsampler.cpp | 32 +++++++++++++++----- src/viewer3d/main.cpp | 2 ++ src/viewer3d/viewer3d.cpp | 58 +++++++++++++++++++++++++++++------- src/viewer3d/viewer3d.h | 3 ++ 5 files changed, 78 insertions(+), 18 deletions(-) diff --git a/src/viewer3d/assets/pbr.frag b/src/viewer3d/assets/pbr.frag index 50093d95..7ec967e8 100644 --- a/src/viewer3d/assets/pbr.frag +++ b/src/viewer3d/assets/pbr.frag @@ -32,7 +32,6 @@ out vec4 g_finalColor; - void main() { vec4 baseColor = getBaseColor(); diff --git a/src/viewer3d/iblsampler.cpp b/src/viewer3d/iblsampler.cpp index 0fa0f7c0..56045e8e 100644 --- a/src/viewer3d/iblsampler.cpp +++ b/src/viewer3d/iblsampler.cpp @@ -111,6 +111,16 @@ void IblSampler::init(const QString& panoramaPath) ggxLutTexture = this->createLut(); charlieLutTexture = this->createLut(); + + // ggxTexture->bind(); + // ggxTexture->generateMipMaps(0); + // sheenTexture->bind(); + // sheenTexture->generateMipMaps(0); + // sheenTexture->release(); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, ggxTexture->textureId()); + gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, sheenTexture->textureId()); + gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); } void IblSampler::filterAll() @@ -141,7 +151,7 @@ void IblSampler::loadPanorama(const QString& path) // given some `width`, `height` and `data_ptr` text->setSize(width, height, 3); - text->setFormat(QOpenGLTexture::RG32F); + text->setFormat(QOpenGLTexture::RGB32F); text->allocateStorage(); text->setData(QOpenGLTexture::RGB, QOpenGLTexture::Float32, textureData); @@ -153,6 +163,8 @@ void IblSampler::loadPanorama(const QString& path) QOpenGLTexture* IblSampler::createCubemap(bool withMipmaps) { auto cubemap = new QOpenGLTexture(QOpenGLTexture::TargetCubeMap); + cubemap->create(); + if (withMipmaps) cubemap->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, QOpenGLTexture::Linear); @@ -161,13 +173,19 @@ QOpenGLTexture* IblSampler::createCubemap(bool withMipmaps) QOpenGLTexture::Linear); cubemap->setWrapMode(QOpenGLTexture::ClampToEdge); - cubemap->create(); + cubemap->setSize(textureSize, textureSize, 1); - cubemap->setSize(textureSize, textureSize, 3); // cubemap->setMipLevels() cubemap->setFormat(QOpenGLTexture::RGB32F); cubemap->allocateStorage(); + // cubemap->generateMipMaps(0); + // cubemap->bind(); + // gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); + // cubemap->release(); + // cubemap->setMipBaseLevel(0); + // cubemap->setMipMaxLevel(11); + return cubemap; } @@ -227,13 +245,13 @@ void IblSampler::panoramaToCubemap() vbo->release(); } - cubemapTexture->bind(); - cubemapTexture->generateMipMaps(); - cubemapTexture->release(); - // gl->glBindFramebuffer(GL_FRAMEBUFFER, 0); auto ctx = QOpenGLContext::currentContext(); gl->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); + + cubemapTexture->bind(); + cubemapTexture->generateMipMaps(); + cubemapTexture->release(); } QOpenGLShaderProgram* IblSampler::createShader(const QString& vertSource, diff --git a/src/viewer3d/main.cpp b/src/viewer3d/main.cpp index edee976c..450386c2 100644 --- a/src/viewer3d/main.cpp +++ b/src/viewer3d/main.cpp @@ -21,6 +21,8 @@ int main(int argc, char* argv[]) qDebug("Requesting 3.3 core context"); fmt.setVersion(3, 3); fmt.setProfile(QSurfaceFormat::CoreProfile); + // https://doc.qt.io/qt-6/qopengldebuglogger.html + fmt.setOption(QSurfaceFormat::DebugContext); // } // else { // qDebug("Requesting 3.0 context"); diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 8b526b84..ff81b8af 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -62,11 +63,29 @@ QOpenGLBuffer* loadMesh(); Mesh* loadMeshFromRc(const QString& path); void renderGltfMesh(Mesh* mesh); +Viewer3D::Viewer3D() : QOpenGLWidget() +{ + // QOpenGLContext* context = new QOpenGLContext; + // context->setFormat(QSurfaceFormat::defaultFormat()); + // context->create(); + // this->setContext(context); +} + void Viewer3D::initializeGL() { gl = QOpenGLContext::currentContext()->functions(); gl->initializeOpenGLFunctions(); + QOpenGLContext* ctx = QOpenGLContext::currentContext(); + QOpenGLDebugLogger* logger = new QOpenGLDebugLogger(this); + logger->initialize(); + QObject::connect(logger, &QOpenGLDebugLogger::messageLogged, + [=](const QOpenGLDebugMessage& debugMessage) { + qDebug() << debugMessage; + }); + + logger->startLogging(); + vao = new QOpenGLVertexArrayObject; if (vao->create()) vao->bind(); @@ -85,11 +104,12 @@ void Viewer3D::initializeGL() shaderCache->addShaderFile("textures.glsl", ":assets/textures.glsl"); shaderCache->addShaderFile("tonemapping.glsl", ":assets/tonemapping.glsl"); - mainProgram = createMainShader(); + // mainProgram = createMainShader(); - mesh = loadMesh(); + // mesh = loadMesh(); + auto mat = this->loadMaterial(); gltfMesh = loadMeshFromRc(":assets/cube.gltf"); - gltfMesh->material = this->loadMaterial(); + gltfMesh->material = mat; // setup matrices worldMatrix.setToIdentity(); @@ -497,7 +517,7 @@ void Viewer3D::renderGltfMesh(Mesh* mesh) // default mat props shader->setUniformValue("u_BaseColorFactor", QVector4D(1, 1, 1, 1)); shader->setUniformValue("u_MetallicFactor", 1.f); - shader->setUniformValue("u_RoughnessFactor", 1.f); + shader->setUniformValue("u_RoughnessFactor", 0.f); shader->setUniformValue("u_EmissiveStrength", 1.f); shader->setUniformValue("u_BaseColorUVSet", 0); @@ -583,22 +603,37 @@ Material* Viewer3D::loadMaterial() auto mat = new Material(); QStringList flags; - flags << "USE_IBL"; - flags << "HAS_NORMAL_VEC3"; - flags << "HAS_TANGENT_VEC4"; - flags << "HAS_TEXCOORD_0_VEC2"; - flags << "HAS_BASE_COLOR_MAP 1"; // albedo only for now + flags << "USE_IBL 1"; + flags << "HAS_NORMAL_VEC3 1"; + // flags << "LINEAR_OUTPUT 1"; + // flags << "TEST 1"; + // flags << "TEST2 1"; + // flags << "HAS_TANGENT_VEC4 1"; + // flags << "DEBUG_NORMAL_GEOMETRY 1"; + flags << "DEBUG_NONE 1"; // IMPORTANT!! caused many headaches.. + flags << "DEBUG DEBUG_NONE"; + // flags << "DEBUG DEBUG_METALLIC_ROUGHNESS"; + + flags << "HAS_TEXCOORD_0_VEC2 1"; + flags << "HAS_BASE_COLOR_MAP 1"; // albedo only for now + // flags << "HAS_NORMAL_MAP 1"; flags << "MATERIAL_METALLICROUGHNESS 1"; // MR mode + + flags << "ALPHAMODE_OPAQUE 0"; + flags << "ALPHAMODE_MASK 1"; + flags << "ALPHAMODE_BLEND 2"; flags << "ALPHAMODE ALPHAMODE_OPAQUE"; + // flags << "TONEMAP_ACES_NARKOWICZ 1"; + // flags << "TONEMAP_ACES_HILL_EXPOSURE_BOOST 1"; auto vertShader = shaderCache->generateShaderSource("primitive.vert", flags); auto fragShader = shaderCache->generateShaderSource("pbr.frag", flags); auto shader = new QOpenGLShaderProgram; + shader->bind(); shader->addShaderFromSourceCode(QOpenGLShader::Vertex, vertShader); shader->addShaderFromSourceCode(QOpenGLShader::Fragment, fragShader); - shader->link(); shader->bindAttributeLocation("a_position", (int)VertexUsage::Position); shader->bindAttributeLocation("a_normal", (int)VertexUsage::Normal); @@ -607,6 +642,9 @@ Material* Viewer3D::loadMaterial() shader->bindAttributeLocation("a_texcoord_0", (int)VertexUsage::TexCoord0); shader->bindAttributeLocation("a_texcoord_1", (int)VertexUsage::TexCoord1); + shader->link(); + // shader->release(); + mat->shader = shader; // textures diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index 24c241c7..fa53e3ec 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -101,4 +101,7 @@ class Viewer3D : public QOpenGLWidget { QOpenGLTexture* loadTexture(const QString& path); // void renderMesh(Mesh* mesh); void renderGltfMesh(Mesh* mesh); + +public: + Viewer3D(); }; \ No newline at end of file From 652d32e6954543104d0864a49bbe1bfc5e421f4a Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 25 Dec 2022 07:37:01 -0500 Subject: [PATCH 069/100] fix pbr texture generation --- src/viewer3d/iblsampler.cpp | 202 +++++++++++++++++++++++++----------- src/viewer3d/iblsampler.h | 32 +++--- src/viewer3d/viewer3d.cpp | 20 +++- 3 files changed, 175 insertions(+), 79 deletions(-) diff --git a/src/viewer3d/iblsampler.cpp b/src/viewer3d/iblsampler.cpp index 56045e8e..d2ab59ca 100644 --- a/src/viewer3d/iblsampler.cpp +++ b/src/viewer3d/iblsampler.cpp @@ -26,6 +26,29 @@ enum class VertexUsage : int { Count = 8 }; +void createSampleCube(QOpenGLFunctions* gl) +{ + GLuint tex; + gl->glGenTextures(1, &tex); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, tex); + + for (unsigned int i = 0; i < 6; ++i) { + gl->glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB16F, 256, + 256, 0, GL_RGB, GL_FLOAT, nullptr); + } + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, + GL_CLAMP_TO_EDGE); + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, + GL_CLAMP_TO_EDGE); + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, + GL_CLAMP_TO_EDGE); + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); +} + IblSampler::IblSampler() { shaderCache = new ShaderCache(); @@ -104,23 +127,33 @@ void IblSampler::init(const QString& panoramaPath) this->loadPanorama(panoramaPath); - cubemapTexture = this->createCubemap(true); - lambertianTexture = this->createCubemap(false); - ggxTexture = this->createCubemap(true); - sheenTexture = this->createCubemap(true); + // createSampleCube(gl); + + // cubemapTexture = this->createCubemap(true); + // lambertianTexture = this->createCubemap(false); + // ggxTexture = this->createCubemap(true); + // sheenTexture = this->createCubemap(true); + + // ggxLutTexture = this->createLut(); + // charlieLutTexture = this->createLut(); - ggxLutTexture = this->createLut(); - charlieLutTexture = this->createLut(); + cubemapTextureID = this->createCubemap(true); + lambertianTextureID = this->createCubemap(false); + ggxTextureID = this->createCubemap(true); + sheenTextureID = this->createCubemap(true); + + ggxLutTextureID = this->createLut(); + charlieLutTextureID = this->createLut(); // ggxTexture->bind(); // ggxTexture->generateMipMaps(0); // sheenTexture->bind(); // sheenTexture->generateMipMaps(0); // sheenTexture->release(); - gl->glBindTexture(GL_TEXTURE_CUBE_MAP, ggxTexture->textureId()); - gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); - gl->glBindTexture(GL_TEXTURE_CUBE_MAP, sheenTexture->textureId()); - gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); + // gl->glBindTexture(GL_TEXTURE_CUBE_MAP, ggxTexture->textureId()); + // gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); + // gl->glBindTexture(GL_TEXTURE_CUBE_MAP, sheenTexture->textureId()); + // gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); } void IblSampler::filterAll() @@ -160,48 +193,99 @@ void IblSampler::loadPanorama(const QString& path) // https://stackoverflow.com/questions/50666781/create-cubemap-from-qopenglframebuffer -QOpenGLTexture* IblSampler::createCubemap(bool withMipmaps) +// QOpenGLTexture* IblSampler::createCubemap(bool withMipmaps) +// { +// auto cubemap = new QOpenGLTexture(QOpenGLTexture::TargetCubeMap); +// cubemap->create(); + +// if (withMipmaps) +// cubemap->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, +// QOpenGLTexture::Linear); +// else +// cubemap->setMinMagFilters(QOpenGLTexture::Linear, +// QOpenGLTexture::Linear); + +// cubemap->setWrapMode(QOpenGLTexture::ClampToEdge); +// cubemap->setSize(textureSize, textureSize, 1); + +// // cubemap->setMipLevels() +// cubemap->setFormat(QOpenGLTexture::RGB16F); +// cubemap->allocateStorage(); + +// cubemap->generateMipMaps(0); +// // cubemap->bind(); +// // gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); +// // cubemap->release(); +// // cubemap->setMipBaseLevel(0); +// // cubemap->setMipMaxLevel(11); + +// return cubemap; +// } + +// QOpenGLTexture* IblSampler::createLut() +// { +// auto texture = new QOpenGLTexture(QOpenGLTexture::Target2D); +// texture->setMinMagFilters(QOpenGLTexture::Linear, +// QOpenGLTexture::Linear); +// texture->setWrapMode(QOpenGLTexture::ClampToEdge); +// texture->create(); + +// texture->setSize(textureSize, textureSize, 3); +// // cubemap->setMipLevels() +// texture->setFormat(QOpenGLTexture::RGBA32F); +// texture->allocateStorage(); + +// return texture; +// } + +GLuint IblSampler::createCubemap(bool withMipmaps) { - auto cubemap = new QOpenGLTexture(QOpenGLTexture::TargetCubeMap); - cubemap->create(); + GLuint tex; + gl->glGenTextures(1, &tex); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, tex); + + for (unsigned int i = 0; i < 6; ++i) { + gl->glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB16F, + textureSize, textureSize, 0, GL_RGB, GL_FLOAT, + nullptr); + } + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, + GL_CLAMP_TO_EDGE); + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, + GL_CLAMP_TO_EDGE); + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, + GL_CLAMP_TO_EDGE); if (withMipmaps) - cubemap->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, - QOpenGLTexture::Linear); + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR); else - cubemap->setMinMagFilters(QOpenGLTexture::Linear, - QOpenGLTexture::Linear); + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, + GL_LINEAR); + gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - cubemap->setWrapMode(QOpenGLTexture::ClampToEdge); - cubemap->setSize(textureSize, textureSize, 1); - - // cubemap->setMipLevels() - cubemap->setFormat(QOpenGLTexture::RGB32F); - cubemap->allocateStorage(); - - // cubemap->generateMipMaps(0); - // cubemap->bind(); - // gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); - // cubemap->release(); - // cubemap->setMipBaseLevel(0); - // cubemap->setMipMaxLevel(11); + if (withMipmaps) + gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); - return cubemap; + return tex; } -QOpenGLTexture* IblSampler::createLut() +GLuint IblSampler::createLut() { - auto texture = new QOpenGLTexture(QOpenGLTexture::Target2D); - texture->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); - texture->setWrapMode(QOpenGLTexture::ClampToEdge); - texture->create(); + GLuint tex; + gl->glGenTextures(1, &tex); + gl->glBindTexture(GL_TEXTURE_2D, tex); + + gl->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, lutResolution, lutResolution, + 0, GL_RGBA, GL_FLOAT, nullptr); - texture->setSize(textureSize, textureSize, 3); - // cubemap->setMipLevels() - texture->setFormat(QOpenGLTexture::RGBA32F); - texture->allocateStorage(); + gl->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + gl->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + gl->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + gl->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + gl->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - return texture; + return tex; } void IblSampler::panoramaToCubemap() @@ -219,7 +303,7 @@ void IblSampler::panoramaToCubemap() gl->glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->handle()); gl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, - cubemapTexture->textureId(), 0); + cubemapTextureID, 0); gl->glViewport(0, 0, textureSize, textureSize); gl->glClearColor(0, 0, 0, 1); @@ -248,10 +332,8 @@ void IblSampler::panoramaToCubemap() // gl->glBindFramebuffer(GL_FRAMEBUFFER, 0); auto ctx = QOpenGLContext::currentContext(); gl->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); - - cubemapTexture->bind(); - cubemapTexture->generateMipMaps(); - cubemapTexture->release(); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTextureID); + gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); } QOpenGLShaderProgram* IblSampler::createShader(const QString& vertSource, @@ -311,7 +393,9 @@ void IblSampler::applyFilter(int distribution, float roughness, gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); shader->bind(); - cubemapTexture->bind(0); + gl->glActiveTexture(GL_TEXTURE0); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTextureID); + // cubemapTexture->bind(0); shader->setUniformValue("uCubeMap", 0); shader->setUniformValue("u_roughness", roughness); @@ -343,7 +427,7 @@ void IblSampler::applyFilter(int distribution, float roughness, void IblSampler::cubeMapToLambertian() { - this->applyFilter(0, 0.0, 0, this->lambertianTexture->textureId(), + this->applyFilter(0, 0.0, 0, this->lambertianTextureID, this->lambertianSampleCount); } @@ -352,8 +436,8 @@ void IblSampler::cubeMapToGGX() for (int currentMipLevel = 0; currentMipLevel <= this->mipmapLevels; ++currentMipLevel) { auto roughness = (currentMipLevel) / (this->mipmapLevels - 1); - this->applyFilter(1, roughness, currentMipLevel, - this->ggxTexture->textureId(), this->ggxSampleCount); + this->applyFilter(1, roughness, currentMipLevel, this->ggxTextureID, + this->ggxSampleCount); } } void IblSampler::cubeMapToSheen() @@ -361,8 +445,7 @@ void IblSampler::cubeMapToSheen() for (auto currentMipLevel = 0; currentMipLevel <= this->mipmapLevels; ++currentMipLevel) { auto roughness = (currentMipLevel) / (this->mipmapLevels - 1); - this->applyFilter(2, roughness, currentMipLevel, - this->sheenTexture->textureId(), + this->applyFilter(2, roughness, currentMipLevel, this->sheenTextureID, this->sheenSamplCount); } } @@ -385,7 +468,9 @@ void IblSampler::sampleLut(int distribution, int targetTextureId, gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); shader->bind(); - cubemapTexture->bind(0); + // cubemapTexture->bind(0); + gl->glActiveTexture(GL_TEXTURE0); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTextureID); shader->setUniformValue("uCubeMap", 0); shader->setUniformValue("u_roughness", 0.0f); @@ -416,13 +501,12 @@ void IblSampler::sampleLut(int distribution, int targetTextureId, void IblSampler::sampleGGXLut() { - this->ggxLutTexture = this->createLut(); - this->sampleLut(1, this->ggxLutTexture->textureId(), this->lutResolution); + this->ggxLutTextureID = this->createLut(); + this->sampleLut(1, this->ggxLutTextureID, this->lutResolution); } void IblSampler::sampleCharlieLut() { - this->charlieLutTexture = this->createLut(); - this->sampleLut(2, this->charlieLutTexture->textureId(), - this->lutResolution); -} \ No newline at end of file + this->charlieLutTextureID = this->createLut(); + this->sampleLut(2, this->charlieLutTextureID, this->lutResolution); +} diff --git a/src/viewer3d/iblsampler.h b/src/viewer3d/iblsampler.h index 0a24bb6c..267f944d 100644 --- a/src/viewer3d/iblsampler.h +++ b/src/viewer3d/iblsampler.h @@ -27,22 +27,22 @@ class IblSampler { int mipmapLevels = -1; - QOpenGLTexture* lambertianTexture; - QOpenGLTexture* ggxTexture; - QOpenGLTexture* sheenTexture; - // GLuint lambertianTextureID; - // GLuint ggxTextureID; - // GLuint sheenTextureID; - - QOpenGLTexture* ggxLutTexture; - QOpenGLTexture* charlieLutTexture; - // GLuint ggxLutTextureID; - // GLuint charlieLutTextureID; + // QOpenGLTexture* lambertianTexture; + // QOpenGLTexture* ggxTexture; + // QOpenGLTexture* sheenTexture; + GLuint lambertianTextureID; + GLuint ggxTextureID; + GLuint sheenTextureID; + + // QOpenGLTexture* ggxLutTexture; + // QOpenGLTexture* charlieLutTexture; + GLuint ggxLutTextureID; + GLuint charlieLutTextureID; QOpenGLTexture* inputTexture; - QOpenGLTexture* cubemapTexture; + // QOpenGLTexture* cubemapTexture; // GLuint inputTextureID; - // GLuint cubemapTextureID; + GLuint cubemapTextureID; QOpenGLFramebufferObject* framebuffer; QOpenGLVertexArrayObject* vao; @@ -54,8 +54,10 @@ class IblSampler { void loadPanorama(const QString& path); - QOpenGLTexture* createCubemap(bool withMipmaps); - QOpenGLTexture* createLut(); + // QOpenGLTexture* createCubemap(bool withMipmaps); + // QOpenGLTexture* createLut(); + GLuint createCubemap(bool withMipmaps); + GLuint createLut(); // generation functions void panoramaToCubemap(); diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index ff81b8af..48464768 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -529,15 +529,25 @@ void Viewer3D::renderGltfMesh(Mesh* mesh) // pbr maps - they start at 8 // https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/Renderer/renderer.js#L732 shader->setUniformValue("u_LambertianEnvSampler", 8); - iblSampler->lambertianTexture->bind(8); + // iblSampler->lambertianTexture->bind(8); + gl->glActiveTexture(GL_TEXTURE0 + 8); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, iblSampler->lambertianTextureID); shader->setUniformValue("u_GGXEnvSampler", 9); - iblSampler->ggxTexture->bind(9); + // iblSampler->ggxTexture->bind(9); + gl->glActiveTexture(GL_TEXTURE0 + 9); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, iblSampler->ggxTextureID); shader->setUniformValue("u_GGXLUT", 10); - iblSampler->ggxLutTexture->bind(10); + // iblSampler->ggxLutTexture->bind(10); + gl->glActiveTexture(GL_TEXTURE0 + 10); + gl->glBindTexture(GL_TEXTURE_2D, iblSampler->ggxLutTextureID); shader->setUniformValue("u_CharlieEnvSampler", 11); - iblSampler->sheenTexture->bind(11); + // iblSampler->sheenTexture->bind(11); + gl->glActiveTexture(GL_TEXTURE0 + 11); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, iblSampler->sheenTextureID); shader->setUniformValue("u_CharlieLUT", 12); - iblSampler->charlieLutTexture->bind(12); + // iblSampler->charlieLutTexture->bind(12); + gl->glActiveTexture(GL_TEXTURE0 + 12); + gl->glBindTexture(GL_TEXTURE_2D, iblSampler->charlieLutTextureID); shader->setUniformValue("u_MipCount", iblSampler->mipmapLevels); QMatrix3x3 envRot; From 09bbf66cf00f1b2aeb42f94d0d7b8c153a0d1450 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 25 Dec 2022 07:53:30 -0500 Subject: [PATCH 070/100] fix tonemapping --- src/viewer3d/viewer3d.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 48464768..4638945a 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -511,13 +511,13 @@ void Viewer3D::renderGltfMesh(Mesh* mesh) shader->setUniformValue("u_ViewProjectionMatrix", projMatrix * viewMatrix); shader->setUniformValue("u_ModelMatrix", worldMatrix); shader->setUniformValue("u_NormalMatrix", normalMatrix); - shader->setUniformValue("u_Exposure", 1); + shader->setUniformValue("u_Exposure", 1.0f); shader->setUniformValue("u_Camera", camPos); // default mat props shader->setUniformValue("u_BaseColorFactor", QVector4D(1, 1, 1, 1)); - shader->setUniformValue("u_MetallicFactor", 1.f); - shader->setUniformValue("u_RoughnessFactor", 0.f); + shader->setUniformValue("u_MetallicFactor", 0.f); + shader->setUniformValue("u_RoughnessFactor", 1.f); shader->setUniformValue("u_EmissiveStrength", 1.f); shader->setUniformValue("u_BaseColorUVSet", 0); @@ -633,7 +633,7 @@ Material* Viewer3D::loadMaterial() flags << "ALPHAMODE_MASK 1"; flags << "ALPHAMODE_BLEND 2"; flags << "ALPHAMODE ALPHAMODE_OPAQUE"; - // flags << "TONEMAP_ACES_NARKOWICZ 1"; + flags << "TONEMAP_ACES_NARKOWICZ 1"; // flags << "TONEMAP_ACES_HILL_EXPOSURE_BOOST 1"; auto vertShader = From e0e23c1e54a74260dce5ee072a0a317672224fc1 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 25 Dec 2022 08:32:15 -0500 Subject: [PATCH 071/100] test other maps --- src/viewer3d/viewer3d.cpp | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 4638945a..64ce478e 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -519,12 +519,22 @@ void Viewer3D::renderGltfMesh(Mesh* mesh) shader->setUniformValue("u_MetallicFactor", 0.f); shader->setUniformValue("u_RoughnessFactor", 1.f); shader->setUniformValue("u_EmissiveStrength", 1.f); + shader->setUniformValue("u_NormalScale", 1.0f); shader->setUniformValue("u_BaseColorUVSet", 0); + shader->setUniformValue("u_NormalUVSet", 0); + shader->setUniformValue("u_EmissiveUVSet", 0); + shader->setUniformValue("u_MetallicRoughnessUVSet", 0); // albedo // mainProgram->setUniformValue("u_BaseColorFactor", mat->albedo); shader->setUniformValue("u_BaseColorSampler", 0); mat->albedoMap->bind(0); + // shader->setUniformValue("u_NormalSampler", 1); + // mat->normalMap->bind(1); + // shader->setUniformValue("u_MetallicRoughnessSampler", 2); + // mat->metalnessMap->bind(2); + // shader->setUniformValue("u_EmissiveSampler", 2); + // mat->emissiveMap->bind(3); // pbr maps - they start at 8 // https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/Renderer/renderer.js#L732 @@ -591,6 +601,8 @@ bool loadGltfModel(tinygltf::Model& model, const QString& filename) bool res = loader.LoadASCIIFromString(&model, &err, &warn, text.c_str(), text.length(), ""); + // bool res = loader.LoadASCIIFromFile(&model, &err, &warn, text.c_str(), + // text.length()); if (!warn.empty()) { std::cout << "WARN: " << warn << std::endl; } @@ -625,8 +637,10 @@ Material* Viewer3D::loadMaterial() // flags << "DEBUG DEBUG_METALLIC_ROUGHNESS"; flags << "HAS_TEXCOORD_0_VEC2 1"; - flags << "HAS_BASE_COLOR_MAP 1"; // albedo only for now + flags << "HAS_BASE_COLOR_MAP 1"; // flags << "HAS_NORMAL_MAP 1"; + // flags << "HAS_METALLIC_ROUGHNESS_MAP 1"; + // flags << "HAS_EMISSIVE_MAP 1"; flags << "MATERIAL_METALLICROUGHNESS 1"; // MR mode flags << "ALPHAMODE_OPAQUE 0"; @@ -658,14 +672,23 @@ Material* Viewer3D::loadMaterial() mat->shader = shader; // textures - mat->albedoMap = loadTexture(":assets/brick.jpg"); + // mat->albedoMap = loadTexture(":assets/brick.jpg"); + mat->albedoMap = loadTexture(":assets/Default_albedo.jpg"); + mat->normalMap = loadTexture(":assets/Default_normal.jpg"); + mat->metalnessMap = loadTexture(":assets/Default_metalRoughness.jpg"); + mat->emissiveMap = loadTexture(":assets/Default_emissive.jpg"); return mat; } QOpenGLTexture* Viewer3D::loadTexture(const QString& path) { QImage image(path); - return new QOpenGLTexture(image); + auto tex = new QOpenGLTexture(image); + tex->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, + QOpenGLTexture::Linear); + tex->generateMipMaps(); + + return tex; } // void Viewer3D::renderMesh(Mesh* mesh) { From 2be66affd94362d6c50cdeda71db93ea2f858d98 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 25 Dec 2022 08:54:18 -0500 Subject: [PATCH 072/100] add external functions to viewer --- src/viewer3d/viewer3d.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index fa53e3ec..7448bcac 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -104,4 +104,18 @@ class Viewer3D : public QOpenGLWidget { public: Viewer3D(); + + // public functions exposed to main app + void setAlbedoTexture(GLuint texId); + void setNormalTexture(GLuint texId); + void setMetalnessTexture(GLuint texId); + void setRoughnessTexture(GLuint texId); + void setAlphaTexture(GLuint texId); + void setAoTexture(GLuint texId); + void setEmissiveTexture(GLuint texId); + void setHeightTexture(GLuint texId); + + void resetTextures(); + void resetCamera(); + void loadEnvironment(const QString path); }; \ No newline at end of file From 31ae3c07201a7fb65c8ad1168e0de6c4d5f71bc1 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 27 Dec 2022 01:59:21 -0500 Subject: [PATCH 073/100] refactor renderer - move rendering to its dedicated class --- src/viewer3d/CMakeLists.txt | 5 + src/viewer3d/gltf/gltf.cpp | 0 src/viewer3d/gltf/tiny_gltf.h | 16 +- src/viewer3d/renderer/renderer.cpp | 319 +++++++++++++++++++++++++++++ src/viewer3d/renderer/renderer.h | 100 +++++++++ src/viewer3d/viewer3d.cpp | 305 ++------------------------- src/viewer3d/viewer3d.h | 24 +-- 7 files changed, 458 insertions(+), 311 deletions(-) create mode 100644 src/viewer3d/gltf/gltf.cpp create mode 100644 src/viewer3d/renderer/renderer.cpp create mode 100644 src/viewer3d/renderer/renderer.h diff --git a/src/viewer3d/CMakeLists.txt b/src/viewer3d/CMakeLists.txt index 612fdab5..ad5ae003 100644 --- a/src/viewer3d/CMakeLists.txt +++ b/src/viewer3d/CMakeLists.txt @@ -15,11 +15,16 @@ set(SRCS viewer3d.cpp iblsampler.cpp shadercache.cpp + gltf/gltf.cpp + geometry/sphere.cpp + renderer/renderer.cpp ) set(HEADERS viewer3d.h iblsampler.h shadercache.h + geometry/geometry.h + renderer/renderer.h gltf/json.hpp gltf/tiny_gltf.h gltf/stb_image.h diff --git a/src/viewer3d/gltf/gltf.cpp b/src/viewer3d/gltf/gltf.cpp new file mode 100644 index 00000000..e69de29b diff --git a/src/viewer3d/gltf/tiny_gltf.h b/src/viewer3d/gltf/tiny_gltf.h index 252ef782..8730bb49 100644 --- a/src/viewer3d/gltf/tiny_gltf.h +++ b/src/viewer3d/gltf/tiny_gltf.h @@ -465,8 +465,14 @@ class Value { #endif #define TINYGLTF_VALUE_GET(ctype, var) \ - template <> inline const ctype& Value::Get() const { return var; } \ - template <> inline ctype& Value::Get() { return var; } + template <> inline const ctype& Value::Get() const \ + { \ + return var; \ + } \ + template <> inline ctype& Value::Get() \ + { \ + return var; \ + } TINYGLTF_VALUE_GET(bool, boolean_value_) TINYGLTF_VALUE_GET(double, real_value_) TINYGLTF_VALUE_GET(int, int_value_) @@ -876,7 +882,7 @@ struct BufferView { size_t byteStride{0}; // minimum 4, maximum 252 (multiple of 4), default 0 = // understood to be tightly packed int target{0}; // ["ARRAY_BUFFER", "ELEMENT_ARRAY_BUFFER"] for vertex - // indices or attribs. Could be 0 for other data + // indices or attribs. Could be 0 for other data Value extras; ExtensionMap extensions; @@ -1542,7 +1548,7 @@ class TinyGLTF { #if defined(TINYGLTF_IMPLEMENTATION) || defined(__INTELLISENSE__) #include -//#include +// #include #ifndef TINYGLTF_NO_FS #include #include @@ -1686,7 +1692,7 @@ class TinyGLTF { #endif #elif !defined(__ANDROID__) && !defined(__OpenBSD__) -//#include +// #include #endif #if defined(__sparcv9) || defined(__powerpc__) diff --git a/src/viewer3d/renderer/renderer.cpp b/src/viewer3d/renderer/renderer.cpp new file mode 100644 index 00000000..574934a1 --- /dev/null +++ b/src/viewer3d/renderer/renderer.cpp @@ -0,0 +1,319 @@ +#include "renderer.h" +#include "../gltf/gltf.cpp" +#include "../iblsampler.h" +#include "../shadercache.h" + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define TINYGLTF_IMPLEMENTATION +#define TINYGLTF_NO_STB_IMAGE +#define TINYGLTF_NO_INCLUDE_STB_IMAGE +#define TINYGLTF_NO_STB_IMAGE_WRITE +#include "../gltf/tiny_gltf.h" + +class MeshPrivate { +public: + tinygltf::Primitive primitive; + tinygltf::Accessor indexAccessor; +}; + +void Renderer::init(QOpenGLFunctions* gl) +{ + this->gl = gl; + + // init shader cache + shaderCache = new ShaderCache(); + shaderCache->addShaderFile("animation.glsl", ":assets/animation.glsl"); + shaderCache->addShaderFile("brdf.glsl", ":assets/brdf.glsl"); + shaderCache->addShaderFile("functions.glsl", ":assets/functions.glsl"); + shaderCache->addShaderFile("iridiscence.glsl", ":assets/iridiscence.glsl"); + shaderCache->addShaderFile("ibl.glsl", ":assets/ibl.glsl"); + shaderCache->addShaderFile("material_info.glsl", + ":assets/material_info.glsl"); + shaderCache->addShaderFile("pbr.frag", ":assets/pbr.frag"); + shaderCache->addShaderFile("primitive.vert", ":assets/primitive.vert"); + shaderCache->addShaderFile("punctual.glsl", ":assets/punctual.glsl"); + shaderCache->addShaderFile("textures.glsl", ":assets/textures.glsl"); + shaderCache->addShaderFile("tonemapping.glsl", ":assets/tonemapping.glsl"); + + // init ibls + iblSampler = new IblSampler(); + iblSampler->gl = gl; +} + +void Renderer::loadEnvironment(const QString& path) +{ + iblSampler->init(path); + iblSampler->filterAll(); +} + +void Renderer::renderMesh(Mesh* mesh, Material* material) {} + +void Renderer::updateMaterial(Material* material) {} + +#define BUFFER_OFFSET(i) ((char*)NULL + (i)) +bool loadGltfModel(tinygltf::Model& model, const QString& filename); + +// https://github.com/syoyo/tinygltf/blob/release/examples/basic/main.cpp +Mesh* loadMeshFromRc(const QString& path) +{ + auto gl = QOpenGLContext::currentContext()->functions(); + + tinygltf::Model model; + if (!loadGltfModel(model, path)) { + return nullptr; + } + + // just convert the first mesh + if (model.meshes.size() == 0) + return nullptr; + + auto mesh = model.meshes[0]; + + auto vao = new QOpenGLVertexArrayObject(nullptr); + vao->create(); + vao->bind(); + + std::map vbos; + + // upload all model buffer views into GPU memory + for (size_t i = 0; i < model.bufferViews.size(); ++i) { + const tinygltf::BufferView& bufferView = model.bufferViews[i]; + if (bufferView.target == 0) { // TODO impl drawarrays + std::cout << "WARN: bufferView.target is zero" << std::endl; + continue; // Unsupported bufferView. + } + + const tinygltf::Buffer& buffer = model.buffers[bufferView.buffer]; + std::cout << "bufferview.target " << bufferView.target << std::endl; + + // vertex or index buffer + auto vbo = new QOpenGLBuffer((QOpenGLBuffer::Type)bufferView.target); + vbo->create(); + vbo->bind(); + vbo->setUsagePattern(QOpenGLBuffer::StaticDraw); + vbo->allocate(&buffer.data.at(0) + bufferView.byteOffset, + bufferView.byteLength); + vbo->release(); + + vbos[i] = vbo; + + // GLuint vbo; + // glGenBuffers(1, &vbo); + // vbos[i] = vbo; + // glBindBuffer(bufferView.target, vbo); + + // std::cout << "buffer.data.size = " << buffer.data.size() + // << ", bufferview.byteOffset = " << bufferView.byteOffset + // << std::endl; + + // glBufferData(bufferView.target, bufferView.byteLength, + // &buffer.data.at(0) + bufferView.byteOffset, + // GL_STATIC_DRAW); + } + + tinygltf::Primitive primitive = mesh.primitives[0]; + tinygltf::Accessor indexAccessor = model.accessors[primitive.indices]; + QList attribs; + + // assign vertex channels to buffers + for (auto& attrib : primitive.attributes) { + tinygltf::Accessor accessor = model.accessors[attrib.second]; + int byteStride = + accessor.ByteStride(model.bufferViews[accessor.bufferView]); + // glBindBuffer(GL_ARRAY_BUFFER, vbos[accessor.bufferView]); + vbos[accessor.bufferView]->bind(); + + int size = 1; + if (accessor.type != TINYGLTF_TYPE_SCALAR) { + size = accessor.type; + } + + int vaa = -1; + if (attrib.first.compare("POSITION") == 0) + vaa = (int)VertexUsage::Position; + if (attrib.first.compare("NORMAL") == 0) + vaa = (int)VertexUsage::Normal; + if (attrib.first.compare("TANGENT") == 0) + vaa = (int)VertexUsage::Tangent; + if (attrib.first.compare("TEXCOORD_0") == 0) + vaa = (int)VertexUsage::TexCoord0; + if (attrib.first.compare("TEXCOORD_1") == 0) + vaa = (int)VertexUsage::TexCoord1; + if (attrib.first.compare("TEXCOORD_2") == 0) + vaa = (int)VertexUsage::TexCoord2; + if (vaa > -1) { + gl->glEnableVertexAttribArray(vaa); + gl->glVertexAttribPointer(vaa, size, accessor.componentType, + accessor.normalized ? GL_TRUE : GL_FALSE, + byteStride, + BUFFER_OFFSET(accessor.byteOffset)); + attribs.append((VertexUsage)vaa); + } + else + std::cout << "vaa missing: " << attrib.first << std::endl; + } + + vao->release(); + + Mesh* finalMesh = new Mesh; + finalMesh->vao = vao; + finalMesh->vbos = vbos; + finalMesh->attribs = attribs; + + finalMesh->indexBuffer = vbos.at(indexAccessor.bufferView); + // finalMesh->primitive = primitive; + // finalMesh->indexAccessor = indexAccessor; + finalMesh->primitiveMode = primitive.mode; + finalMesh->numElements = indexAccessor.count; + finalMesh->indexType = indexAccessor.componentType; + finalMesh->indexByteOffset = indexAccessor.byteOffset; + + return finalMesh; +} + +// https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/glTF-WebGL-PBR/mesh.js#L113 +// https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/Renderer/renderer.js +void Renderer::renderGltfMesh(Mesh* mesh, Material* material, + const QVector3D& camPos, + const QMatrix4x4& worldMatrix, + const QMatrix4x4& viewMatrix, + const QMatrix4x4& projMatrix) +{ + // setup material + auto& mat = material; + auto& shader = mat->shader; + shader->bind(); + + QMatrix4x4 mvp; + mvp.setToIdentity(); + mvp = projMatrix * viewMatrix * worldMatrix; + + auto modelInverse = worldMatrix.inverted(); + auto normalMatrix = modelInverse.transposed(); + + shader->setUniformValue("u_ViewProjectionMatrix", projMatrix * viewMatrix); + shader->setUniformValue("u_ModelMatrix", worldMatrix); + shader->setUniformValue("u_NormalMatrix", normalMatrix); + shader->setUniformValue("u_Exposure", 1.0f); + shader->setUniformValue("u_Camera", camPos); + + // default mat props + shader->setUniformValue("u_BaseColorFactor", QVector4D(1, 1, 1, 1)); + shader->setUniformValue("u_MetallicFactor", 0.f); + shader->setUniformValue("u_RoughnessFactor", 1.f); + shader->setUniformValue("u_EmissiveStrength", 1.f); + shader->setUniformValue("u_NormalScale", 1.0f); + shader->setUniformValue("u_BaseColorUVSet", 0); + shader->setUniformValue("u_NormalUVSet", 0); + shader->setUniformValue("u_EmissiveUVSet", 0); + shader->setUniformValue("u_MetallicRoughnessUVSet", 0); + + // albedo + // mainProgram->setUniformValue("u_BaseColorFactor", mat->albedo); + shader->setUniformValue("u_BaseColorSampler", 0); + mat->albedoMap->bind(0); + // shader->setUniformValue("u_NormalSampler", 1); + // mat->normalMap->bind(1); + // shader->setUniformValue("u_MetallicRoughnessSampler", 2); + // mat->metalnessMap->bind(2); + // shader->setUniformValue("u_EmissiveSampler", 2); + // mat->emissiveMap->bind(3); + + // pbr maps - they start at 8 + // https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/Renderer/renderer.js#L732 + shader->setUniformValue("u_LambertianEnvSampler", 8); + // iblSampler->lambertianTexture->bind(8); + gl->glActiveTexture(GL_TEXTURE0 + 8); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, iblSampler->lambertianTextureID); + shader->setUniformValue("u_GGXEnvSampler", 9); + // iblSampler->ggxTexture->bind(9); + gl->glActiveTexture(GL_TEXTURE0 + 9); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, iblSampler->ggxTextureID); + shader->setUniformValue("u_GGXLUT", 10); + // iblSampler->ggxLutTexture->bind(10); + gl->glActiveTexture(GL_TEXTURE0 + 10); + gl->glBindTexture(GL_TEXTURE_2D, iblSampler->ggxLutTextureID); + shader->setUniformValue("u_CharlieEnvSampler", 11); + // iblSampler->sheenTexture->bind(11); + gl->glActiveTexture(GL_TEXTURE0 + 11); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, iblSampler->sheenTextureID); + shader->setUniformValue("u_CharlieLUT", 12); + // iblSampler->charlieLutTexture->bind(12); + gl->glActiveTexture(GL_TEXTURE0 + 12); + gl->glBindTexture(GL_TEXTURE_2D, iblSampler->charlieLutTextureID); + + shader->setUniformValue("u_MipCount", iblSampler->mipmapLevels); + QMatrix3x3 envRot; + envRot.setToIdentity(); + shader->setUniformValue("u_EnvRotation", envRot); + shader->setUniformValue("u_EnvIntensity", 1.0f); + + // render mesh + mesh->vao->bind(); + // tinygltf::Primitive primitive = mesh->primitive; + // tinygltf::Accessor indexAccessor = mesh->indexAccessor; + + // glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbos.at(indexAccessor.bufferView)); + mesh->indexBuffer->bind(); + + // gl->glEnableVertexAttribArray((int)VertexUsage::Position); + // gl->glEnableVertexAttribArray((int)VertexUsage::Normal); + // gl->glEnableVertexAttribArray((int)VertexUsage::Tangent); + // gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + + // glDrawElements(primitive.mode, indexAccessor.count, + // indexAccessor.componentType, + // BUFFER_OFFSET(indexAccessor.byteOffset)); + + glDrawElements(mesh->primitiveMode, mesh->numElements, mesh->indexType, + BUFFER_OFFSET(mesh->indexByteOffset)); + + mesh->vao->release(); +} + +bool loadGltfModel(tinygltf::Model& model, const QString& filename) +{ + QFile file(filename); + if (!file.open(QIODevice::ReadOnly)) { + qDebug() << "filenot opened \n"; + return false; + } + + auto text = file.readAll().toStdString(); + + tinygltf::TinyGLTF loader; + std::string err; + std::string warn; + + bool res = loader.LoadASCIIFromString(&model, &err, &warn, text.c_str(), + text.length(), ""); + // bool res = loader.LoadASCIIFromFile(&model, &err, &warn, text.c_str(), + // text.length()); + if (!warn.empty()) { + std::cout << "WARN: " << warn << std::endl; + } + + if (!err.empty()) { + std::cout << "ERR: " << err << std::endl; + } + + if (!res) + std::cout << "Failed to load glTF: " << filename.toStdString() + << std::endl; + else + std::cout << "Loaded glTF: " << filename.toStdString() << std::endl; + + return res; +} \ No newline at end of file diff --git a/src/viewer3d/renderer/renderer.h b/src/viewer3d/renderer/renderer.h new file mode 100644 index 00000000..b48904da --- /dev/null +++ b/src/viewer3d/renderer/renderer.h @@ -0,0 +1,100 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +class QOpenGLVertexArrayObject; +class QOpenGLBuffer; +class Material; +class QOpenGLFunctions; +class QOpenGLTexture; +class QOpenGLShaderProgram; +class IblSampler; +class ShaderCache; + +enum class VertexUsage : int { + Position = 0, + Color = 1, + TexCoord0 = 2, + TexCoord1 = 3, + TexCoord2 = 4, + TexCoord3 = 5, + Normal = 6, + Tangent = 7, + Count = 8 +}; + +enum class MeshType { Generated, Gltf }; + +class MeshPrivate; +class Mesh { +public: + QOpenGLVertexArrayObject* vao = nullptr; + std::map vbos; + QList attribs; + + QOpenGLBuffer* indexBuffer = nullptr; + // int elementCount; + int numElements = 0; + int indexByteOffset; + int primitiveMode; // GL_TRIANGLES + int indexType; // most likely GL_INT or GL_UNSIGNED_INT + + // transformation props + QMatrix4x4 transform; + QMatrix3x3 normalMatrix; + Material* material = nullptr; + + // determines how to render (for now) + // in the future, all meshes should be rendered the same + MeshType meshType; + + // MeshPrivate* priv = nullptr; +}; + +struct Material { + QOpenGLShaderProgram* shader = nullptr; + + QOpenGLTexture* albedoMap = nullptr; + QOpenGLTexture* normalMap = nullptr; + QOpenGLTexture* metalnessMap = nullptr; + QOpenGLTexture* roughnessMap = nullptr; + QOpenGLTexture* heightMap = nullptr; + QOpenGLTexture* aoMap = nullptr; + QOpenGLTexture* emissiveMap = nullptr; + QOpenGLTexture* alphaMap = nullptr; + + QVector3D albedo = QVector3D(1, 1, 1); + float normalIntensity = 1.0; + float roughness = 1.0; + float heightScale = 1.0; + float alpha = 1.0; + QVector3D emission = QVector3D(1, 1, 1); + + QStringList flags; + bool needsUpdate = false; +}; + +class Renderer { +public: + IblSampler* iblSampler; + ShaderCache* shaderCache; + QOpenGLFunctions* gl; + + void init(QOpenGLFunctions* gl); + void loadEnvironment(const QString& path); + + void renderMesh(Mesh* mesh, Material* material); + void updateMaterial(Material* material); + + void renderGltfMesh(Mesh* mesh, Material* material, const QVector3D& camPos, + const QMatrix4x4& worldMatrix, + const QMatrix4x4& viewMatrix, + const QMatrix4x4& projMatrix); +}; + +Mesh* loadMeshFromRc(const QString& path); diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 64ce478e..9db01cb1 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -23,40 +23,13 @@ #include "iblsampler.h" #include "shadercache.h" -#define TINYGLTF_IMPLEMENTATION -#define TINYGLTF_NO_STB_IMAGE -#define TINYGLTF_NO_INCLUDE_STB_IMAGE -#define TINYGLTF_NO_STB_IMAGE_WRITE -#include "gltf/tiny_gltf.h" - -enum class VertexUsage : int { - Position = 0, - Color = 1, - TexCoord0 = 2, - TexCoord1 = 3, - TexCoord2 = 4, - TexCoord3 = 5, - Normal = 6, - Tangent = 7, - Count = 8 -}; - -class Mesh { -public: - QOpenGLVertexArrayObject* vao = nullptr; - int numElements = 0; - std::map vbos; - QOpenGLBuffer* indexBuffer; - QList attribs; - - tinygltf::Primitive primitive; - tinygltf::Accessor indexAccessor; - - // transformation props - QMatrix4x4 transform; - QMatrix3x3 normalMatrix; - Material* material = nullptr; -}; +#include "renderer/renderer.h" + +// #define TINYGLTF_IMPLEMENTATION +// #define TINYGLTF_NO_STB_IMAGE +// #define TINYGLTF_NO_INCLUDE_STB_IMAGE +// #define TINYGLTF_NO_STB_IMAGE_WRITE +// #include "gltf/tiny_gltf.h" QOpenGLShaderProgram* createMainShader(); QOpenGLBuffer* loadMesh(); @@ -109,7 +82,7 @@ void Viewer3D::initializeGL() // mesh = loadMesh(); auto mat = this->loadMaterial(); gltfMesh = loadMeshFromRc(":assets/cube.gltf"); - gltfMesh->material = mat; + this->material = mat; // setup matrices worldMatrix.setToIdentity(); @@ -127,6 +100,10 @@ void Viewer3D::initializeGL() iblSampler->filterAll(); + renderer = new Renderer(); + renderer->init(this->gl); + renderer->loadEnvironment(":assets/panorama.hdr"); + // do all the conversions // iblSampler->panoramaToCubemap(); } @@ -169,7 +146,8 @@ void Viewer3D::paintGL() // gl->glDrawArrays(GL_TRIANGLES, 0, 6); // render gltf mesh - renderGltfMesh(gltfMesh); + renderer->renderGltfMesh(gltfMesh, material, camPos, worldMatrix, + viewMatrix, projMatrix); } void Viewer3D::resizeGL(int w, int h) @@ -375,251 +353,6 @@ QOpenGLBuffer* loadMesh() return vbo; } -bool loadGltfModel(tinygltf::Model& model, const QString& filename); - -#define BUFFER_OFFSET(i) ((char*)NULL + (i)) - -// https://github.com/syoyo/tinygltf/blob/release/examples/basic/main.cpp -Mesh* loadMeshFromRc(const QString& path) -{ - auto gl = QOpenGLContext::currentContext()->functions(); - - tinygltf::Model model; - if (!loadGltfModel(model, path)) { - return nullptr; - } - - // just convert the first mesh - if (model.meshes.size() == 0) - return nullptr; - - auto mesh = model.meshes[0]; - - auto vao = new QOpenGLVertexArrayObject(nullptr); - vao->create(); - vao->bind(); - - std::map vbos; - - // upload all model buffer views into GPU memory - for (size_t i = 0; i < model.bufferViews.size(); ++i) { - const tinygltf::BufferView& bufferView = model.bufferViews[i]; - if (bufferView.target == 0) { // TODO impl drawarrays - std::cout << "WARN: bufferView.target is zero" << std::endl; - continue; // Unsupported bufferView. - } - - const tinygltf::Buffer& buffer = model.buffers[bufferView.buffer]; - std::cout << "bufferview.target " << bufferView.target << std::endl; - - // vertex or index buffer - auto vbo = new QOpenGLBuffer((QOpenGLBuffer::Type)bufferView.target); - vbo->create(); - vbo->bind(); - vbo->setUsagePattern(QOpenGLBuffer::StaticDraw); - vbo->allocate(&buffer.data.at(0) + bufferView.byteOffset, - bufferView.byteLength); - vbo->release(); - - vbos[i] = vbo; - - // GLuint vbo; - // glGenBuffers(1, &vbo); - // vbos[i] = vbo; - // glBindBuffer(bufferView.target, vbo); - - // std::cout << "buffer.data.size = " << buffer.data.size() - // << ", bufferview.byteOffset = " << bufferView.byteOffset - // << std::endl; - - // glBufferData(bufferView.target, bufferView.byteLength, - // &buffer.data.at(0) + bufferView.byteOffset, - // GL_STATIC_DRAW); - } - - tinygltf::Primitive primitive = mesh.primitives[0]; - tinygltf::Accessor indexAccessor = model.accessors[primitive.indices]; - QList attribs; - - // assign vertex channels to buffers - for (auto& attrib : primitive.attributes) { - tinygltf::Accessor accessor = model.accessors[attrib.second]; - int byteStride = - accessor.ByteStride(model.bufferViews[accessor.bufferView]); - // glBindBuffer(GL_ARRAY_BUFFER, vbos[accessor.bufferView]); - vbos[accessor.bufferView]->bind(); - - int size = 1; - if (accessor.type != TINYGLTF_TYPE_SCALAR) { - size = accessor.type; - } - - int vaa = -1; - if (attrib.first.compare("POSITION") == 0) - vaa = (int)VertexUsage::Position; - if (attrib.first.compare("NORMAL") == 0) - vaa = (int)VertexUsage::Normal; - if (attrib.first.compare("TANGENT") == 0) - vaa = (int)VertexUsage::Tangent; - if (attrib.first.compare("TEXCOORD_0") == 0) - vaa = (int)VertexUsage::TexCoord0; - if (attrib.first.compare("TEXCOORD_1") == 0) - vaa = (int)VertexUsage::TexCoord1; - if (attrib.first.compare("TEXCOORD_2") == 0) - vaa = (int)VertexUsage::TexCoord2; - if (vaa > -1) { - gl->glEnableVertexAttribArray(vaa); - gl->glVertexAttribPointer(vaa, size, accessor.componentType, - accessor.normalized ? GL_TRUE : GL_FALSE, - byteStride, - BUFFER_OFFSET(accessor.byteOffset)); - attribs.append((VertexUsage)vaa); - } - else - std::cout << "vaa missing: " << attrib.first << std::endl; - } - - vao->release(); - - Mesh* finalMesh = new Mesh; - finalMesh->vao = vao; - finalMesh->vbos = vbos; - finalMesh->attribs = attribs; - - finalMesh->indexBuffer = vbos.at(indexAccessor.bufferView); - finalMesh->primitive = primitive; - finalMesh->indexAccessor = indexAccessor; - return finalMesh; -} - -// https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/glTF-WebGL-PBR/mesh.js#L113 -// https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/Renderer/renderer.js -void Viewer3D::renderGltfMesh(Mesh* mesh) -{ - // setup material - auto& mat = mesh->material; - auto& shader = mat->shader; - shader->bind(); - - QMatrix4x4 mvp; - mvp.setToIdentity(); - mvp = projMatrix * viewMatrix * worldMatrix; - - auto modelInverse = worldMatrix.inverted(); - auto normalMatrix = modelInverse.transposed(); - - shader->setUniformValue("u_ViewProjectionMatrix", projMatrix * viewMatrix); - shader->setUniformValue("u_ModelMatrix", worldMatrix); - shader->setUniformValue("u_NormalMatrix", normalMatrix); - shader->setUniformValue("u_Exposure", 1.0f); - shader->setUniformValue("u_Camera", camPos); - - // default mat props - shader->setUniformValue("u_BaseColorFactor", QVector4D(1, 1, 1, 1)); - shader->setUniformValue("u_MetallicFactor", 0.f); - shader->setUniformValue("u_RoughnessFactor", 1.f); - shader->setUniformValue("u_EmissiveStrength", 1.f); - shader->setUniformValue("u_NormalScale", 1.0f); - shader->setUniformValue("u_BaseColorUVSet", 0); - shader->setUniformValue("u_NormalUVSet", 0); - shader->setUniformValue("u_EmissiveUVSet", 0); - shader->setUniformValue("u_MetallicRoughnessUVSet", 0); - - // albedo - // mainProgram->setUniformValue("u_BaseColorFactor", mat->albedo); - shader->setUniformValue("u_BaseColorSampler", 0); - mat->albedoMap->bind(0); - // shader->setUniformValue("u_NormalSampler", 1); - // mat->normalMap->bind(1); - // shader->setUniformValue("u_MetallicRoughnessSampler", 2); - // mat->metalnessMap->bind(2); - // shader->setUniformValue("u_EmissiveSampler", 2); - // mat->emissiveMap->bind(3); - - // pbr maps - they start at 8 - // https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/Renderer/renderer.js#L732 - shader->setUniformValue("u_LambertianEnvSampler", 8); - // iblSampler->lambertianTexture->bind(8); - gl->glActiveTexture(GL_TEXTURE0 + 8); - gl->glBindTexture(GL_TEXTURE_CUBE_MAP, iblSampler->lambertianTextureID); - shader->setUniformValue("u_GGXEnvSampler", 9); - // iblSampler->ggxTexture->bind(9); - gl->glActiveTexture(GL_TEXTURE0 + 9); - gl->glBindTexture(GL_TEXTURE_CUBE_MAP, iblSampler->ggxTextureID); - shader->setUniformValue("u_GGXLUT", 10); - // iblSampler->ggxLutTexture->bind(10); - gl->glActiveTexture(GL_TEXTURE0 + 10); - gl->glBindTexture(GL_TEXTURE_2D, iblSampler->ggxLutTextureID); - shader->setUniformValue("u_CharlieEnvSampler", 11); - // iblSampler->sheenTexture->bind(11); - gl->glActiveTexture(GL_TEXTURE0 + 11); - gl->glBindTexture(GL_TEXTURE_CUBE_MAP, iblSampler->sheenTextureID); - shader->setUniformValue("u_CharlieLUT", 12); - // iblSampler->charlieLutTexture->bind(12); - gl->glActiveTexture(GL_TEXTURE0 + 12); - gl->glBindTexture(GL_TEXTURE_2D, iblSampler->charlieLutTextureID); - - shader->setUniformValue("u_MipCount", iblSampler->mipmapLevels); - QMatrix3x3 envRot; - envRot.setToIdentity(); - shader->setUniformValue("u_EnvRotation", envRot); - shader->setUniformValue("u_EnvIntensity", 1.0f); - - // render mesh - mesh->vao->bind(); - tinygltf::Primitive primitive = mesh->primitive; - tinygltf::Accessor indexAccessor = mesh->indexAccessor; - - // glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbos.at(indexAccessor.bufferView)); - mesh->indexBuffer->bind(); - - gl->glEnableVertexAttribArray((int)VertexUsage::Position); - gl->glEnableVertexAttribArray((int)VertexUsage::Normal); - gl->glEnableVertexAttribArray((int)VertexUsage::Tangent); - gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); - - glDrawElements(primitive.mode, indexAccessor.count, - indexAccessor.componentType, - BUFFER_OFFSET(indexAccessor.byteOffset)); - - mesh->vao->release(); -} - -bool loadGltfModel(tinygltf::Model& model, const QString& filename) -{ - QFile file(filename); - if (!file.open(QIODevice::ReadOnly)) { - qDebug() << "filenot opened \n"; - return false; - } - - auto text = file.readAll().toStdString(); - - tinygltf::TinyGLTF loader; - std::string err; - std::string warn; - - bool res = loader.LoadASCIIFromString(&model, &err, &warn, text.c_str(), - text.length(), ""); - // bool res = loader.LoadASCIIFromFile(&model, &err, &warn, text.c_str(), - // text.length()); - if (!warn.empty()) { - std::cout << "WARN: " << warn << std::endl; - } - - if (!err.empty()) { - std::cout << "ERR: " << err << std::endl; - } - - if (!res) - std::cout << "Failed to load glTF: " << filename.toStdString() - << std::endl; - else - std::cout << "Loaded glTF: " << filename.toStdString() << std::endl; - - return res; -} - Material* Viewer3D::loadMaterial() { auto mat = new Material(); @@ -672,11 +405,11 @@ Material* Viewer3D::loadMaterial() mat->shader = shader; // textures - // mat->albedoMap = loadTexture(":assets/brick.jpg"); - mat->albedoMap = loadTexture(":assets/Default_albedo.jpg"); - mat->normalMap = loadTexture(":assets/Default_normal.jpg"); - mat->metalnessMap = loadTexture(":assets/Default_metalRoughness.jpg"); - mat->emissiveMap = loadTexture(":assets/Default_emissive.jpg"); + mat->albedoMap = loadTexture(":assets/brick.jpg"); + // mat->albedoMap = loadTexture(":assets/Default_albedo.jpg"); + // mat->normalMap = loadTexture(":assets/Default_normal.jpg"); + // mat->metalnessMap = loadTexture(":assets/Default_metalRoughness.jpg"); + // mat->emissiveMap = loadTexture(":assets/Default_emissive.jpg"); return mat; } diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index 7448bcac..129329ee 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -24,26 +24,8 @@ class Mesh; class ShaderCache; class IblSampler; - -struct Material { - QOpenGLShaderProgram* shader = nullptr; - - QOpenGLTexture* albedoMap = nullptr; - QOpenGLTexture* normalMap = nullptr; - QOpenGLTexture* metalnessMap = nullptr; - QOpenGLTexture* roughnessMap = nullptr; - QOpenGLTexture* heightMap = nullptr; - QOpenGLTexture* aoMap = nullptr; - QOpenGLTexture* emissiveMap = nullptr; - QOpenGLTexture* alphaMap = nullptr; - - QVector3D albedo = QVector3D(1, 1, 1); - float normalIntensity = 1.0; - float roughness = 1.0; - float heightScale = 1.0; - float alpha = 1.0; - QVector3D emission = QVector3D(1, 1, 1); -}; +class Material; +class Renderer; class Viewer3D : public QOpenGLWidget { QOpenGLTexture* texture = nullptr; @@ -51,6 +33,8 @@ class Viewer3D : public QOpenGLWidget { QOpenGLBuffer* mesh = nullptr; QOpenGLVertexArrayObject* vao = nullptr; + Renderer* renderer; + Material* material; Mesh* gltfMesh; QOpenGLFunctions* gl = nullptr; From 94c46fe3270ebea46753f204513d1cc06707a007 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 27 Dec 2022 02:35:24 -0500 Subject: [PATCH 074/100] add sphere geometry generation --- src/viewer3d/geometry/geometry.h | 18 ++++ src/viewer3d/geometry/sphere.cpp | 150 +++++++++++++++++++++++++++++++ src/viewer3d/viewer3d.cpp | 48 ++-------- 3 files changed, 177 insertions(+), 39 deletions(-) create mode 100644 src/viewer3d/geometry/geometry.h create mode 100644 src/viewer3d/geometry/sphere.cpp diff --git a/src/viewer3d/geometry/geometry.h b/src/viewer3d/geometry/geometry.h new file mode 100644 index 00000000..50244fdc --- /dev/null +++ b/src/viewer3d/geometry/geometry.h @@ -0,0 +1,18 @@ +#pragma once +#include + +class Mesh; +class QOpenGLFunctions; + +// https://github.com/mrdoob/three.js/blob/master/src/geometries/SphereGeometry.js +Mesh* createSphere(QOpenGLFunctions* gl, float radius = 1, + int widthSegments = 32, int heightSegments = 16, + float phiStart = 0, float phiLength = M_PI * 2, + float thetaStart = 0, float thetaLength = M_PI); + +// other sources: +// https://www.danielsieger.com/blog/2021/03/27/generating-spheres.html +// https://schneide.blog/2016/07/15/generating-an-icosphere-in-c/ +// https://github.com/caosdoar/spheres/blob/master/src/spheres.cpp +// VERY GOOD: +// http://www.songho.ca/opengl/gl_sphere.html \ No newline at end of file diff --git a/src/viewer3d/geometry/sphere.cpp b/src/viewer3d/geometry/sphere.cpp new file mode 100644 index 00000000..4d50edac --- /dev/null +++ b/src/viewer3d/geometry/sphere.cpp @@ -0,0 +1,150 @@ +#include "../renderer/renderer.h" +#include "geometry.h" +#include +#include +#include +#include +#include + +#define BUFFER_OFFSET(i) ((char*)NULL + (i)) + +Mesh* createSphere(QOpenGLFunctions* gl, float radius, int widthSegments, + int heightSegments, float phiStart, float phiLength, + float thetaStart, float thetaLength) +{ + const float uvScaleX = 2; + const float uvScaleY = 1; + + widthSegments = std::max(3.0, std::floor(widthSegments)); + heightSegments = std::max(2.0, std::floor(heightSegments)); + + auto thetaEnd = std::min((double)thetaStart + thetaLength, M_PI); + + int index = 0; + QVector> grid; + + QVector3D vertex; + + // buffers + QVector indices; + QVector vertices; + QVector normals; + QVector uvs; + + for (int iy = 0; iy <= heightSegments; iy++) { + QVector verticesRow; + + auto v = iy / (float)heightSegments; + + auto uOffset = 0; + if (iy == 0 && thetaStart == 0) { + + uOffset = 0.5 / widthSegments; + } + else if (iy == heightSegments && thetaEnd == M_PI) { + + uOffset = -0.5 / widthSegments; + } + + for (int ix = 0; ix <= widthSegments; ix++) { + + auto u = ix / (float)widthSegments; + + // vertex + + auto x = -radius * std::cos(phiStart + u * phiLength) * + std::sin(thetaStart + v * thetaLength); + auto y = radius * std::cos(thetaStart + v * thetaLength); + auto z = radius * std::sin(phiStart + u * phiLength) * + std::sin(thetaStart + v * thetaLength); + + vertices.append({x, y, z}); + + // normal + QVector3D normal(x, y, z); + normal.normalize(); + normals.append({normal.x(), normal.y(), normal.z()}); + + // uv + + uvs.append({(u + uOffset) * uvScaleX, (1 - v) * uvScaleY}); + + verticesRow.append(index++); + } + + grid.append(verticesRow); + } + + for (int iy = 0; iy < heightSegments; iy++) { + + for (int ix = 0; ix < widthSegments; ix++) { + + auto a = grid[iy][ix + 1]; + auto b = grid[iy][ix]; + auto c = grid[iy + 1][ix]; + auto d = grid[iy + 1][ix + 1]; + + if (iy != 0 || thetaStart > 0) + indices.append({a, b, d}); + if (iy != heightSegments - 1 || thetaEnd < M_PI) + indices.append({b, c, d}); + } + } + + // build + QOpenGLVertexArrayObject* vao = new QOpenGLVertexArrayObject(); + vao->create(); + vao->bind(); + + QOpenGLBuffer* vbo; + + // position + vbo = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer); + vbo->create(); + vbo->bind(); + vbo->setUsagePattern(QOpenGLBuffer::StaticDraw); + vbo->allocate(vertices.data(), vertices.length() * sizeof(float)); + gl->glEnableVertexAttribArray((int)VertexUsage::Position); + gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, GL_FALSE, + 3 * sizeof(float), BUFFER_OFFSET(0)); + + // normal + vbo = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer); + vbo->create(); + vbo->bind(); + vbo->setUsagePattern(QOpenGLBuffer::StaticDraw); + vbo->allocate(normals.data(), normals.length() * sizeof(float)); + gl->glEnableVertexAttribArray((int)VertexUsage::Normal); + gl->glVertexAttribPointer((int)VertexUsage::Normal, 3, GL_FLOAT, GL_FALSE, + 3 * sizeof(float), BUFFER_OFFSET(0)); + + // uv + vbo = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer); + vbo->create(); + vbo->bind(); + vbo->setUsagePattern(QOpenGLBuffer::StaticDraw); + vbo->allocate(uvs.data(), uvs.length() * sizeof(float)); + gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); + gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), BUFFER_OFFSET(0)); + + vao->release(); + + // indices + auto ibo = new QOpenGLBuffer(QOpenGLBuffer::IndexBuffer); + ibo->create(); + ibo->bind(); + ibo->setUsagePattern(QOpenGLBuffer::StaticDraw); + ibo->allocate(indices.data(), indices.length() * sizeof(unsigned int)); + + auto mesh = new Mesh(); + mesh->vao = vao; + mesh->meshType = MeshType::Generated; + mesh->indexBuffer = ibo; + mesh->numElements = indices.count(); + mesh->indexByteOffset = 0; + mesh->indexType = GL_UNSIGNED_INT; + mesh->primitiveMode = GL_TRIANGLES; + + return mesh; +} \ No newline at end of file diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 9db01cb1..4374c6eb 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -23,14 +23,9 @@ #include "iblsampler.h" #include "shadercache.h" +#include "geometry/geometry.h" #include "renderer/renderer.h" -// #define TINYGLTF_IMPLEMENTATION -// #define TINYGLTF_NO_STB_IMAGE -// #define TINYGLTF_NO_INCLUDE_STB_IMAGE -// #define TINYGLTF_NO_STB_IMAGE_WRITE -// #include "gltf/tiny_gltf.h" - QOpenGLShaderProgram* createMainShader(); QOpenGLBuffer* loadMesh(); Mesh* loadMeshFromRc(const QString& path); @@ -81,7 +76,8 @@ void Viewer3D::initializeGL() // mesh = loadMesh(); auto mat = this->loadMaterial(); - gltfMesh = loadMeshFromRc(":assets/cube.gltf"); + // gltfMesh = loadMeshFromRc(":assets/cube.gltf"); + gltfMesh = createSphere(this->gl, 2, 64, 64); this->material = mat; // setup matrices @@ -94,18 +90,14 @@ void Viewer3D::initializeGL() projMatrix.perspective(45, this->width() / (float)this->height(), 1.0, 1000); - iblSampler = new IblSampler(); - iblSampler->gl = gl; - iblSampler->init(":assets/panorama.hdr"); - - iblSampler->filterAll(); + // iblSampler = new IblSampler(); + // iblSampler->gl = gl; + // iblSampler->init(":assets/panorama.hdr"); + // iblSampler->filterAll(); renderer = new Renderer(); renderer->init(this->gl); renderer->loadEnvironment(":assets/panorama.hdr"); - - // do all the conversions - // iblSampler->panoramaToCubemap(); } void Viewer3D::paintGL() @@ -114,37 +106,15 @@ void Viewer3D::paintGL() gl->glViewport(0, 0, this->width(), this->height()); gl->glClearDepthf(1.0); - gl->glClearColor(1, 0, 0, 1); + gl->glClearColor(0.1, 0.1, 0.1, 1); gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gl->glEnable(GL_DEPTH_TEST); // gl->glEnable(GL_DEPTH_TEST); + // gl->glDisable(GL_CULL_FACE); vao->bind(); - // todo: bind textures - // iblSampler->inputTexture->bind(0); - // iblSampler->ggxLutTexture->bind(0); - - // mainProgram->bind(); - // mainProgram->setUniformValue("worldMatrix", worldMatrix); - // mainProgram->setUniformValue("viewMatrix", viewMatrix); - // mainProgram->setUniformValue("projMatrix", projMatrix); - - // mesh->bind(); - // // setup attrib array - // gl->glEnableVertexAttribArray((int)VertexUsage::Position); - // gl->glEnableVertexAttribArray((int)VertexUsage::TexCoord0); - // gl->glVertexAttribPointer((int)VertexUsage::Position, 3, GL_FLOAT, - // GL_FALSE, - // 5 * sizeof(float), nullptr); - // gl->glVertexAttribPointer((int)VertexUsage::TexCoord0, 2, GL_FLOAT, - // GL_FALSE, 5 * sizeof(float), - // reinterpret_cast(3 * sizeof(float))); - - // // render - // gl->glDrawArrays(GL_TRIANGLES, 0, 6); - // render gltf mesh renderer->renderGltfMesh(gltfMesh, material, camPos, worldMatrix, viewMatrix, projMatrix); From 0133c13ddbab1a916feecdf90807633790614b8f Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 27 Dec 2022 03:06:14 -0500 Subject: [PATCH 075/100] split roughness and metalness maps in pbr shader --- src/viewer3d/assets/material_info.glsl | 11 ++++++++++ src/viewer3d/assets/textures.glsl | 30 ++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/src/viewer3d/assets/material_info.glsl b/src/viewer3d/assets/material_info.glsl index 6d6d8928..60689f02 100644 --- a/src/viewer3d/assets/material_info.glsl +++ b/src/viewer3d/assets/material_info.glsl @@ -224,6 +224,17 @@ MaterialInfo getMetallicRoughnessInfo(MaterialInfo info) info.metallic *= mrSample.b; #endif +// split maps into separate textures (use same UV for them for now) +#ifdef HAS_ROUGHNESS_MAP + vec4 rSample = texture(u_RoughnessSampler, getRoughnessUV()); + info.perceptualRoughness *= rSample.r; +#endif + +#ifdef HAS_METALNESS_MAP + vec4 mSample = texture(u_MetalnessSampler, getMetalnessUV()); + info.metallic *= mSample.r; +#endif + // Achromatic f0 based on IOR. info.c_diff = mix(info.baseColor.rgb, vec3(0), info.metallic); info.f0 = mix(info.f0, info.baseColor.rgb, info.metallic); diff --git a/src/viewer3d/assets/textures.glsl b/src/viewer3d/assets/textures.glsl index 5d509a50..fef8e329 100644 --- a/src/viewer3d/assets/textures.glsl +++ b/src/viewer3d/assets/textures.glsl @@ -83,6 +83,14 @@ uniform sampler2D u_MetallicRoughnessSampler; uniform int u_MetallicRoughnessUVSet; uniform mat3 u_MetallicRoughnessUVTransform; +uniform sampler2D u_MetalnessSampler; +uniform int u_MetalnessUVSet; +uniform mat3 u_MetalnessUVTransform; + +uniform sampler2D u_RoughnessSampler; +uniform int u_RoughnessUVSet; +uniform mat3 u_RoughnessUVTransform; + vec2 getBaseColorUV() { vec3 uv = vec3(u_BaseColorUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); @@ -105,6 +113,28 @@ vec2 getMetallicRoughnessUV() return uv.xy; } +vec2 getMetalnessUV() +{ + vec3 uv = vec3(u_MetalnessUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); + +#ifdef HAS_METALNESS_UV_TRANSFORM + uv = u_MetalnessUVTransform * uv; +#endif + + return uv.xy; +} + +vec2 getRoughnessUV() +{ + vec3 uv = vec3(u_RoughnessUVSet < 1 ? v_texcoord_0 : v_texcoord_1, 1.0); + +#ifdef HAS_ROUGHNESS_UV_TRANSFORM + uv = u_RoughnessUVTransform * uv; +#endif + + return uv.xy; +} + #endif From 32935fa2ba9b8c3fdfd31f8c6749ee861b6d5142 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 27 Dec 2022 03:35:21 -0500 Subject: [PATCH 076/100] test metallic roughness textures --- src/viewer3d/renderer/renderer.cpp | 14 ++++++++------ src/viewer3d/viewer3d.cpp | 10 ++++++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/viewer3d/renderer/renderer.cpp b/src/viewer3d/renderer/renderer.cpp index 574934a1..0861fea7 100644 --- a/src/viewer3d/renderer/renderer.cpp +++ b/src/viewer3d/renderer/renderer.cpp @@ -211,12 +211,14 @@ void Renderer::renderGltfMesh(Mesh* mesh, Material* material, // default mat props shader->setUniformValue("u_BaseColorFactor", QVector4D(1, 1, 1, 1)); - shader->setUniformValue("u_MetallicFactor", 0.f); - shader->setUniformValue("u_RoughnessFactor", 1.f); - shader->setUniformValue("u_EmissiveStrength", 1.f); + shader->setUniformValue("u_MetallicFactor", 1.f); + shader->setUniformValue("u_RoughnessFactor", 0.f); + shader->setUniformValue("u_EmissiveStrength", 0.f); shader->setUniformValue("u_NormalScale", 1.0f); shader->setUniformValue("u_BaseColorUVSet", 0); shader->setUniformValue("u_NormalUVSet", 0); + shader->setUniformValue("u_MetalnessUVSet", 0); + shader->setUniformValue("u_RoughnessUVSet", 0); shader->setUniformValue("u_EmissiveUVSet", 0); shader->setUniformValue("u_MetallicRoughnessUVSet", 0); @@ -226,10 +228,10 @@ void Renderer::renderGltfMesh(Mesh* mesh, Material* material, mat->albedoMap->bind(0); // shader->setUniformValue("u_NormalSampler", 1); // mat->normalMap->bind(1); - // shader->setUniformValue("u_MetallicRoughnessSampler", 2); + // shader->setUniformValue("u_MetalnessSampler", 2); // mat->metalnessMap->bind(2); - // shader->setUniformValue("u_EmissiveSampler", 2); - // mat->emissiveMap->bind(3); + // shader->setUniformValue("u_RoughnessSampler", 3); + // mat->roughnessMap->bind(3); // pbr maps - they start at 8 // https://github.com/KhronosGroup/glTF-Sample-Viewer/blob/master/source/Renderer/renderer.js#L732 diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 4374c6eb..951df195 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -342,6 +342,8 @@ Material* Viewer3D::loadMaterial() flags << "HAS_TEXCOORD_0_VEC2 1"; flags << "HAS_BASE_COLOR_MAP 1"; // flags << "HAS_NORMAL_MAP 1"; + // flags << "HAS_ROUGHNESS_MAP 1"; + // flags << "HAS_METALNESS_MAP 1"; // flags << "HAS_METALLIC_ROUGHNESS_MAP 1"; // flags << "HAS_EMISSIVE_MAP 1"; flags << "MATERIAL_METALLICROUGHNESS 1"; // MR mode @@ -376,10 +378,10 @@ Material* Viewer3D::loadMaterial() // textures mat->albedoMap = loadTexture(":assets/brick.jpg"); - // mat->albedoMap = loadTexture(":assets/Default_albedo.jpg"); - // mat->normalMap = loadTexture(":assets/Default_normal.jpg"); - // mat->metalnessMap = loadTexture(":assets/Default_metalRoughness.jpg"); - // mat->emissiveMap = loadTexture(":assets/Default_emissive.jpg"); + // mat->albedoMap = loadTexture(":assets/albedo.jpg"); + // mat->normalMap = loadTexture(":assets/normal.jpg"); + // mat->metalnessMap = loadTexture(":assets/metalness.jpg"); + // mat->roughnessMap = loadTexture(":assets/roughness.jpg"); return mat; } From eb61e7b581633edf52e6be0bf4ae7644a4376624 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Tue, 27 Dec 2022 03:49:45 -0500 Subject: [PATCH 077/100] fix viewport cutoff bug --- src/viewer3d/viewer3d.cpp | 4 +++- src/viewer3d/viewer3d.h | 14 ++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 951df195..94b3f6e7 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -104,7 +104,9 @@ void Viewer3D::paintGL() { buildView(); - gl->glViewport(0, 0, this->width(), this->height()); + // this is already done by QOpenGLWidget + // also, the supplied width and height are incorrect + // gl->glViewport(0, 0, this->width(), this->height()); gl->glClearDepthf(1.0); gl->glClearColor(0.1, 0.1, 0.1, 1); gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index 129329ee..c893e994 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -91,13 +91,19 @@ class Viewer3D : public QOpenGLWidget { // public functions exposed to main app void setAlbedoTexture(GLuint texId); + void clearAlbedoTexture(); void setNormalTexture(GLuint texId); + void clearNormalTexture(); void setMetalnessTexture(GLuint texId); + void clearMetalnessTexture(); void setRoughnessTexture(GLuint texId); - void setAlphaTexture(GLuint texId); - void setAoTexture(GLuint texId); - void setEmissiveTexture(GLuint texId); - void setHeightTexture(GLuint texId); + void clearRoughnessTexture(); + void resetMaterial(); + + // void setAlphaTexture(GLuint texId); + // void setAoTexture(GLuint texId); + // void setEmissiveTexture(GLuint texId); + // void setHeightTexture(GLuint texId); void resetTextures(); void resetCamera(); From d9a07d7270648db7633ebd0fb25a9b15f427e401 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Wed, 28 Dec 2022 23:19:49 -0500 Subject: [PATCH 078/100] make renderer works with texture ids --- src/viewer3d/main.cpp | 4 ++ src/viewer3d/renderer/renderer.cpp | 109 +++++++++++++++++++++++------ src/viewer3d/renderer/renderer.h | 34 +++++---- src/viewer3d/viewer3d.cpp | 24 +++++-- src/viewer3d/viewer3d.h | 3 +- 5 files changed, 133 insertions(+), 41 deletions(-) diff --git a/src/viewer3d/main.cpp b/src/viewer3d/main.cpp index 450386c2..3a0eec34 100644 --- a/src/viewer3d/main.cpp +++ b/src/viewer3d/main.cpp @@ -33,6 +33,10 @@ int main(int argc, char* argv[]) auto viewer = new Viewer3D(); + // use viewer as you would in texturlab project + // auto albedoId = loadTexture(); + // viewer->setAlbedoTexture(albedoId); + w.setCentralWidget(viewer); w.resize(800, 600); diff --git a/src/viewer3d/renderer/renderer.cpp b/src/viewer3d/renderer/renderer.cpp index 0861fea7..94bde16a 100644 --- a/src/viewer3d/renderer/renderer.cpp +++ b/src/viewer3d/renderer/renderer.cpp @@ -60,7 +60,73 @@ void Renderer::loadEnvironment(const QString& path) void Renderer::renderMesh(Mesh* mesh, Material* material) {} -void Renderer::updateMaterial(Material* material) {} +void Renderer::updateMaterial(Material* material) +{ + if (material->shader) { + material->shader->deleteLater(); + } + + // flags + QStringList flags; + + // the default + // todo: make this dynamic instead of using flags + flags << "USE_IBL 1"; + + // determine attribs from mesh + flags << "HAS_NORMAL_VEC3 1"; + flags << "HAS_TEXCOORD_0_VEC2 1"; + // flags << "HAS_TANGENT_VEC4 1"; + + flags << "DEBUG_NONE 1"; // IMPORTANT!! caused many headaches.. + flags << "DEBUG DEBUG_NONE"; + + if (material->albedoMapId != 0) + flags << "HAS_BASE_COLOR_MAP 1"; + if (material->normalMapId != 0) + flags << "HAS_NORMAL_MAP 1"; + if (material->metalnessMapId != 0) + flags << "HAS_METALNESS_MAP 1"; + if (material->roughnessMapId != 0) + flags << "HAS_ROUGHNESS_MAP 1"; + // flags << "HAS_NORMAL_MAP 1"; + // flags << "HAS_ROUGHNESS_MAP 1"; + // flags << "HAS_METALNESS_MAP 1"; + // flags << "HAS_METALLIC_ROUGHNESS_MAP 1"; + // flags << "HAS_EMISSIVE_MAP 1"; + flags << "MATERIAL_METALLICROUGHNESS 1"; // MR mode + + // blending + flags << "ALPHAMODE_OPAQUE 0"; + flags << "ALPHAMODE_MASK 1"; + flags << "ALPHAMODE_BLEND 2"; + flags << "ALPHAMODE ALPHAMODE_OPAQUE"; + + // tone mapping + flags << "TONEMAP_ACES_NARKOWICZ 1"; + + // build shader + auto vertShader = + shaderCache->generateShaderSource("primitive.vert", flags); + auto fragShader = shaderCache->generateShaderSource("pbr.frag", flags); + + auto shader = new QOpenGLShaderProgram; + shader->bind(); + shader->addShaderFromSourceCode(QOpenGLShader::Vertex, vertShader); + shader->addShaderFromSourceCode(QOpenGLShader::Fragment, fragShader); + + shader->bindAttributeLocation("a_position", (int)VertexUsage::Position); + shader->bindAttributeLocation("a_normal", (int)VertexUsage::Normal); + shader->bindAttributeLocation("a_tangent", (int)VertexUsage::Tangent); + shader->bindAttributeLocation("a_color_0", (int)VertexUsage::Color); + shader->bindAttributeLocation("a_texcoord_0", (int)VertexUsage::TexCoord0); + shader->bindAttributeLocation("a_texcoord_1", (int)VertexUsage::TexCoord1); + + shader->link(); + + material->shader = shader; + material->needsUpdate = false; +} #define BUFFER_OFFSET(i) ((char*)NULL + (i)) bool loadGltfModel(tinygltf::Model& model, const QString& filename); @@ -108,19 +174,6 @@ Mesh* loadMeshFromRc(const QString& path) vbo->release(); vbos[i] = vbo; - - // GLuint vbo; - // glGenBuffers(1, &vbo); - // vbos[i] = vbo; - // glBindBuffer(bufferView.target, vbo); - - // std::cout << "buffer.data.size = " << buffer.data.size() - // << ", bufferview.byteOffset = " << bufferView.byteOffset - // << std::endl; - - // glBufferData(bufferView.target, bufferView.byteLength, - // &buffer.data.at(0) + bufferView.byteOffset, - // GL_STATIC_DRAW); } tinygltf::Primitive primitive = mesh.primitives[0]; @@ -192,8 +245,12 @@ void Renderer::renderGltfMesh(Mesh* mesh, Material* material, const QMatrix4x4& projMatrix) { // setup material - auto& mat = material; - auto& shader = mat->shader; + auto mat = material; + if (mat->needsUpdate) { + this->updateMaterial(mat); + } + + auto shader = mat->shader; shader->bind(); QMatrix4x4 mvp; @@ -210,11 +267,12 @@ void Renderer::renderGltfMesh(Mesh* mesh, Material* material, shader->setUniformValue("u_Camera", camPos); // default mat props - shader->setUniformValue("u_BaseColorFactor", QVector4D(1, 1, 1, 1)); - shader->setUniformValue("u_MetallicFactor", 1.f); - shader->setUniformValue("u_RoughnessFactor", 0.f); + shader->setUniformValue("u_BaseColorFactor", material->albedo); + shader->setUniformValue("u_MetallicFactor", material->metalness); + shader->setUniformValue("u_RoughnessFactor", material->roughness); shader->setUniformValue("u_EmissiveStrength", 0.f); - shader->setUniformValue("u_NormalScale", 1.0f); + shader->setUniformValue("u_NormalScale", material->normalIntensity); + // uv sets shader->setUniformValue("u_BaseColorUVSet", 0); shader->setUniformValue("u_NormalUVSet", 0); shader->setUniformValue("u_MetalnessUVSet", 0); @@ -222,10 +280,16 @@ void Renderer::renderGltfMesh(Mesh* mesh, Material* material, shader->setUniformValue("u_EmissiveUVSet", 0); shader->setUniformValue("u_MetallicRoughnessUVSet", 0); + if (mat->albedoMapId != 0) { + shader->setUniformValue("u_BaseColorSampler", 0); + gl->glActiveTexture(GL_TEXTURE0); + gl->glBindTexture(GL_TEXTURE_2D, mat->albedoMapId); + } + // albedo // mainProgram->setUniformValue("u_BaseColorFactor", mat->albedo); - shader->setUniformValue("u_BaseColorSampler", 0); - mat->albedoMap->bind(0); + // shader->setUniformValue("u_BaseColorSampler", 0); + // mat->albedoMap->bind(0); // shader->setUniformValue("u_NormalSampler", 1); // mat->normalMap->bind(1); // shader->setUniformValue("u_MetalnessSampler", 2); @@ -257,6 +321,7 @@ void Renderer::renderGltfMesh(Mesh* mesh, Material* material, gl->glBindTexture(GL_TEXTURE_2D, iblSampler->charlieLutTextureID); shader->setUniformValue("u_MipCount", iblSampler->mipmapLevels); + QMatrix3x3 envRot; envRot.setToIdentity(); shader->setUniformValue("u_EnvRotation", envRot); diff --git a/src/viewer3d/renderer/renderer.h b/src/viewer3d/renderer/renderer.h index b48904da..4c490a05 100644 --- a/src/viewer3d/renderer/renderer.h +++ b/src/viewer3d/renderer/renderer.h @@ -16,6 +16,8 @@ class QOpenGLShaderProgram; class IblSampler; class ShaderCache; +typedef unsigned int GLuint; + enum class VertexUsage : int { Position = 0, Color = 1, @@ -52,31 +54,35 @@ class Mesh { // determines how to render (for now) // in the future, all meshes should be rendered the same MeshType meshType; - - // MeshPrivate* priv = nullptr; }; struct Material { QOpenGLShaderProgram* shader = nullptr; - QOpenGLTexture* albedoMap = nullptr; - QOpenGLTexture* normalMap = nullptr; - QOpenGLTexture* metalnessMap = nullptr; - QOpenGLTexture* roughnessMap = nullptr; - QOpenGLTexture* heightMap = nullptr; - QOpenGLTexture* aoMap = nullptr; - QOpenGLTexture* emissiveMap = nullptr; - QOpenGLTexture* alphaMap = nullptr; - - QVector3D albedo = QVector3D(1, 1, 1); + GLuint albedoMapId = 0; + GLuint normalMapId = 0; + GLuint metalnessMapId = 0; + GLuint roughnessMapId = 0; + + // QOpenGLTexture* albedoMap = nullptr; + // QOpenGLTexture* normalMap = nullptr; + // QOpenGLTexture* metalnessMap = nullptr; + // QOpenGLTexture* roughnessMap = nullptr; + // QOpenGLTexture* heightMap = nullptr; + // QOpenGLTexture* aoMap = nullptr; + // QOpenGLTexture* emissiveMap = nullptr; + // QOpenGLTexture* alphaMap = nullptr; + + QVector4D albedo = QVector4D(1, 1, 1, 1); + float metalness = 0.0; float normalIntensity = 1.0; - float roughness = 1.0; + float roughness = 0.9; float heightScale = 1.0; float alpha = 1.0; QVector3D emission = QVector3D(1, 1, 1); QStringList flags; - bool needsUpdate = false; + bool needsUpdate = true; }; class Renderer { diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 94b3f6e7..94742bcc 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -112,7 +112,6 @@ void Viewer3D::paintGL() gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gl->glEnable(GL_DEPTH_TEST); - // gl->glEnable(GL_DEPTH_TEST); // gl->glDisable(GL_CULL_FACE); vao->bind(); @@ -120,6 +119,8 @@ void Viewer3D::paintGL() // render gltf mesh renderer->renderGltfMesh(gltfMesh, material, camPos, worldMatrix, viewMatrix, projMatrix); + + vao->bind(); } void Viewer3D::resizeGL(int w, int h) @@ -379,7 +380,8 @@ Material* Viewer3D::loadMaterial() mat->shader = shader; // textures - mat->albedoMap = loadTexture(":assets/brick.jpg"); + // mat->albedoMapId = loadTextureId(":assets/brick.jpg"); + // mat->albedoMap = loadTexture(":assets/brick.jpg"); // mat->albedoMap = loadTexture(":assets/albedo.jpg"); // mat->normalMap = loadTexture(":assets/normal.jpg"); // mat->metalnessMap = loadTexture(":assets/metalness.jpg"); @@ -398,6 +400,20 @@ QOpenGLTexture* Viewer3D::loadTexture(const QString& path) return tex; } -// void Viewer3D::renderMesh(Mesh* mesh) { +GLuint Viewer3D::loadTextureId(const QString& path) +{ + QImage image(path); + auto tex = new QOpenGLTexture(image); + tex->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, + QOpenGLTexture::Linear); + tex->generateMipMaps(); + + return tex->textureId(); +} + +void Viewer3D::setAlbedoTexture(GLuint texId) +{ + this->material->albedoMapId = texId; +} -// } \ No newline at end of file +void Viewer3D::clearAlbedoTexture() { this->material->albedoMapId = 0; } \ No newline at end of file diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index c893e994..9d60fcce 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -53,7 +53,7 @@ class Viewer3D : public QOpenGLWidget { // QVector3D m_target = {0, 0, -1}; // trackball params - float zoom = 5; + float zoom = 7; float zoomSpeed = 0.3f; QPoint prevPos; QVector3D center = {0, 0, 0}; @@ -83,6 +83,7 @@ class Viewer3D : public QOpenGLWidget { Material* loadMaterial(); QOpenGLTexture* loadTexture(const QString& path); + GLuint loadTextureId(const QString& path); // void renderMesh(Mesh* mesh); void renderGltfMesh(Mesh* mesh); From 20b60ff63efa5df91c83e8752e7f9b3e20ddba50 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Thu, 29 Dec 2022 01:33:22 -0500 Subject: [PATCH 079/100] add 3d preview of textures based on texture channels --- src/texturelab/CMakeLists.txt | 4 +- src/texturelab/mainwindow.cpp | 52 ++++++++++++++++++- src/texturelab/mainwindow.h | 2 + src/texturelab/models.cpp | 3 ++ src/texturelab/models.h | 15 ++++++ .../widgets/properties/propertieswidget.cpp | 52 +++++++++++++++++-- .../widgets/properties/propertieswidget.h | 15 ++++++ src/texturelab/widgets/view3dwidget.cpp | 10 ++++ src/texturelab/widgets/view3dwidget.h | 8 ++- src/viewer3d/CMakeLists.txt | 4 +- src/viewer3d/viewer3d.cpp | 13 ++++- src/viewer3d/viewer3d.h | 4 +- src/viewer3d/{assets.qrc => viewerassets.qrc} | 0 13 files changed, 171 insertions(+), 11 deletions(-) rename src/viewer3d/{assets.qrc => viewerassets.qrc} (100%) diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index d4fb92df..c0af331a 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -65,11 +65,13 @@ target_link_libraries(texturelab PRIVATE Qt${QT_VERSION_MAJOR}::Widgets Qt${QT_VERSION_MAJOR}::OpenGL Qt${QT_VERSION_MAJOR}::OpenGLWidgets qtadvanceddocking - nodegraph) + nodegraph + viewer3d) target_include_directories(texturelab PUBLIC ../ads/src ../nodegraph + ../viewer3d ) set_target_properties(texturelab PROPERTIES diff --git a/src/texturelab/mainwindow.cpp b/src/texturelab/mainwindow.cpp index c06dd177..1a4c2d85 100644 --- a/src/texturelab/mainwindow.cpp +++ b/src/texturelab/mainwindow.cpp @@ -15,6 +15,9 @@ #include "widgets/librarywidget.h" #include "widgets/properties/propertieswidget.h" #include "widgets/view2dwidget.h" +#include "widgets/view3dwidget.h" + +#include "viewer3d.h" #include "models.h" #include "project.h" @@ -64,6 +67,31 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) } this->view2DWidget->reRenderNode(); + this->view3DWidget->reRender(); + }); + + connect(this->propWidget, &PropertiesWidget::textureChannelUpdated, + [this](const TextureChannel& name, const TextureNodePtr& node) { + if (this->renderer && !!this->project) { + this->renderer->update(); + } + + if (!!this->project) { + if (name == TextureChannel::None) { + // todo: clear channel + } + else { + + this->project->textureChannels[name] = node->id; + } + + // assign channel to viewer + // do this crudely by just reassigning all node textures + this->passTextureChannelsToViewer3D(); + } + + // this->view3DWidget->update(); + this->view3DWidget->reRender(); }); // set default empty project @@ -75,6 +103,26 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) // renderer->testRendering(); } +void MainWindow::passTextureChannelsToViewer3D() +{ + auto viewer = this->view3DWidget->viewer; + viewer->clearTextures(); + + for (auto channel : this->project->textureChannels.keys()) { + auto nodeId = this->project->textureChannels[channel]; + + auto node = this->project->getNodeById(nodeId); + if (!node) + continue; + + switch (channel) { + case TextureChannel::Albedo: + viewer->setAlbedoTexture(node->textureId()); + break; + } + } +} + void MainWindow::setProject(TextureProjectPtr project) { this->project = project; @@ -169,6 +217,8 @@ void MainWindow::setupDocks() // graph goes in the center this->graphWidget = new GraphWidget(); this->view2DWidget = new View2DWidget(); + this->view3DWidget = new View3DWidget(); + auto graphArea = addDock("Graph", ads::CenterDockWidgetArea, graphWidget, nullptr); auto leftArea = addDock("2D View", ads::LeftDockWidgetArea, @@ -181,7 +231,7 @@ void MainWindow::setupDocks() this->libraryWidget = new LibraryWidget(); setWidgetRatiosInArea(graphArea, {1.0f / 5, 3.0f / 5, 1.0f / 5}); - addDock("3D View", ads::BottomDockWidgetArea, new QWidget(this), leftArea); + addDock("3D View", ads::BottomDockWidgetArea, this->view3DWidget, leftArea); addDock("Library", ads::BottomDockWidgetArea, this->libraryWidget, rightArea); setWidgetRatiosInArea(leftArea, {0.5f, 0.5f}); diff --git a/src/texturelab/mainwindow.h b/src/texturelab/mainwindow.h index a0ed5780..cfe8c178 100644 --- a/src/texturelab/mainwindow.h +++ b/src/texturelab/mainwindow.h @@ -33,6 +33,8 @@ class MainWindow : public QMainWindow { void openProject(); void newProject(); + void passTextureChannelsToViewer3D(); + void setProject(TextureProjectPtr project); ads::CDockAreaWidget* addDock(const QString& title, diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index 918d48a1..f3b4192c 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -1,6 +1,7 @@ #include "models.h" #include "libraries/library.h" #include "props.h" +#include #include TextureNodePtr TextureProject::getNodeById(const QString& id) @@ -140,6 +141,8 @@ void TextureNode::setProp(QString propName, QVariant value) } } +unsigned int TextureNode::textureId() { return this->texture->texture(); } + IntProp* TextureNode::addIntProp(const QString& name, const QString& displayName, int defaultVal, int minVal, int maxVal, int increment) diff --git a/src/texturelab/models.h b/src/texturelab/models.h index 09033d68..4cafaa14 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -35,6 +35,16 @@ class ImageProp; enum class PackageFileType { Texture, Image }; +enum class TextureChannel : int { + None = 0, + Albedo = 1, + Normal = 2, + Metalness = 3, + Roughness = 4, + Height = 5, + Alpha = 6 +}; + class ProjectFile { public: QByteArray contents(); @@ -46,6 +56,9 @@ class TextureProject : public QEnableSharedFromThis { int textureWidth = 1024; int textureHeight = 1024; + // texturechannel:nodeid + QMap textureChannels; + Library* library = nullptr; QMap nodes; @@ -113,6 +126,8 @@ class TextureNode : public QEnableSharedFromThis { return texture != nullptr && shader != nullptr; } + unsigned int textureId(); + // add prop functions IntProp* addIntProp(const QString& name, const QString& displayName, int defaultVal = 1, int minVal = 1, int maxVal = 100, diff --git a/src/texturelab/widgets/properties/propertieswidget.cpp b/src/texturelab/widgets/properties/propertieswidget.cpp index dffc1ff5..36a86275 100644 --- a/src/texturelab/widgets/properties/propertieswidget.cpp +++ b/src/texturelab/widgets/properties/propertieswidget.cpp @@ -9,6 +9,12 @@ PropertiesWidget::PropertiesWidget() : QWidget() { displayMode = PropertyDisplayMode::None; + textureChannelProp = new EnumProp(); + textureChannelProp->displayName = "Texture Channel"; + textureChannelProp->values = {"None", "Albedo", "Normal", "Metalness", + "Roughness", "Height", "Alpha"}; + textureChannelProp->setValue(0); + auto layout = new QVBoxLayout(this); layout->addStretch(1); this->setLayout(layout); @@ -17,12 +23,16 @@ PropertiesWidget::PropertiesWidget() : QWidget() void PropertiesWidget::setSelectedNode(const TextureNodePtr& node) { qDebug() << "Displaying properties for node: " << node->title; + this->selectedNode = node; // clear current properties this->clearSelection(); auto layout = (QVBoxLayout*)this->layout(); + // add base props + this->addBasePropsToLayout(); + // add new props to layout for (auto prop : node->props) { switch (prop->type) { @@ -80,6 +90,36 @@ void PropertiesWidget::setSelectedNode(const TextureNodePtr& node) layout->addStretch(1); } +void PropertiesWidget::addBasePropsToLayout() +{ + auto layout = (QVBoxLayout*)this->layout(); + + // texture channel + auto widget = new EnumPropWidget(); + + // determine value of prop + auto& channels = this->project->textureChannels; + int channelVal = 0; + for (auto key : channels.keys()) { + if (channels[key] == selectedNode->id) { + channelVal = (int)key; + break; + } + } + textureChannelProp->setValue(channelVal); + + widget->setProp(textureChannelProp); + propWidgets.append(widget); + + connect(widget, &EnumPropWidget::valueChanged, [=](int value) { + emit this->textureChannelUpdated((TextureChannel)value, + this->selectedNode); + }); + layout->addWidget(widget); + + // todo: random seed +} + void PropertiesWidget::clearSelection() { displayMode = PropertyDisplayMode::None; @@ -92,9 +132,15 @@ void PropertiesWidget::clearSelection() widget->deleteLater(); } - // remove all items - while (layout->count() > 0) - layout->removeItem(layout->itemAt(0)); + // remove all other items (todo: delete them) + while (layout->count() > 0) { + auto item = layout->itemAt(0); + layout->removeItem(item); + + auto widget = item->widget(); + if (widget) + widget->deleteLater(); + } propWidgets.clear(); } diff --git a/src/texturelab/widgets/properties/propertieswidget.h b/src/texturelab/widgets/properties/propertieswidget.h index 8bfcd168..a8b46eb4 100644 --- a/src/texturelab/widgets/properties/propertieswidget.h +++ b/src/texturelab/widgets/properties/propertieswidget.h @@ -8,6 +8,11 @@ class TextureNode; typedef QSharedPointer TextureProjectPtr; typedef QSharedPointer TextureNodePtr; +class EnumProp; +class FloatProp; + +enum class TextureChannel : int; + enum class PropertyDisplayMode { None, Node, Frame, Comment }; class PropertiesWidget : public QWidget { @@ -18,6 +23,11 @@ class PropertiesWidget : public QWidget { QVector propWidgets; TextureProjectPtr project; + TextureNodePtr selectedNode; + + // base props + EnumProp* textureChannelProp; + FloatProp* randomSeedProp; public: PropertiesWidget(); @@ -27,6 +37,11 @@ class PropertiesWidget : public QWidget { void setProject(const TextureProjectPtr& project); +private: + void addBasePropsToLayout(); + signals: void propertyUpdated(const QString& name, const QVariant& value); + void textureChannelUpdated(const TextureChannel& name, + const TextureNodePtr& node); }; \ No newline at end of file diff --git a/src/texturelab/widgets/view3dwidget.cpp b/src/texturelab/widgets/view3dwidget.cpp index e69de29b..3b5c0f93 100644 --- a/src/texturelab/widgets/view3dwidget.cpp +++ b/src/texturelab/widgets/view3dwidget.cpp @@ -0,0 +1,10 @@ +#include "view3dwidget.h" +#include "viewer3d.h" + +View3DWidget::View3DWidget() +{ + this->viewer = new Viewer3D(); + this->setCentralWidget(viewer); +} + +void View3DWidget::reRender() { this->viewer->reRender(); } \ No newline at end of file diff --git a/src/texturelab/widgets/view3dwidget.h b/src/texturelab/widgets/view3dwidget.h index 3ea3e80d..e382e3e2 100644 --- a/src/texturelab/widgets/view3dwidget.h +++ b/src/texturelab/widgets/view3dwidget.h @@ -1,9 +1,13 @@ #pragma once #include +#include -class View3DWidget : public QFrame -{ +class Viewer3D; +class View3DWidget : public QMainWindow { public: View3DWidget(); + Viewer3D* viewer; + + void reRender(); }; \ No newline at end of file diff --git a/src/viewer3d/CMakeLists.txt b/src/viewer3d/CMakeLists.txt index ad5ae003..6a580bfd 100644 --- a/src/viewer3d/CMakeLists.txt +++ b/src/viewer3d/CMakeLists.txt @@ -31,10 +31,10 @@ set(HEADERS ) set(RESOURCES - ./assets.qrc) + ./viewerassets.qrc) # library -add_library(viewer3d STATIC ${SRCS} ${HEADERS}) +add_library(viewer3d STATIC ${SRCS} ${HEADERS} ${RESOURCES}) target_link_libraries(viewer3d PRIVATE Qt${QT_VERSION_MAJOR}::Core Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::OpenGLWidgets diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 94742bcc..fe23c8b2 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -37,8 +37,12 @@ Viewer3D::Viewer3D() : QOpenGLWidget() // context->setFormat(QSurfaceFormat::defaultFormat()); // context->create(); // this->setContext(context); + + Q_INIT_RESOURCE(viewerassets); } +void Viewer3D::reRender() { this->update(); } + void Viewer3D::initializeGL() { gl = QOpenGLContext::currentContext()->functions(); @@ -414,6 +418,13 @@ GLuint Viewer3D::loadTextureId(const QString& path) void Viewer3D::setAlbedoTexture(GLuint texId) { this->material->albedoMapId = texId; + this->material->needsUpdate = true; +} + +void Viewer3D::clearAlbedoTexture() +{ + this->material->albedoMapId = 0; + this->material->needsUpdate = true; } -void Viewer3D::clearAlbedoTexture() { this->material->albedoMapId = 0; } \ No newline at end of file +void Viewer3D::clearTextures() { this->clearAlbedoTexture(); } \ No newline at end of file diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index 9d60fcce..4f3d362e 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -90,6 +90,8 @@ class Viewer3D : public QOpenGLWidget { public: Viewer3D(); + void reRender(); + // public functions exposed to main app void setAlbedoTexture(GLuint texId); void clearAlbedoTexture(); @@ -106,7 +108,7 @@ class Viewer3D : public QOpenGLWidget { // void setEmissiveTexture(GLuint texId); // void setHeightTexture(GLuint texId); - void resetTextures(); + void clearTextures(); void resetCamera(); void loadEnvironment(const QString path); }; \ No newline at end of file diff --git a/src/viewer3d/assets.qrc b/src/viewer3d/viewerassets.qrc similarity index 100% rename from src/viewer3d/assets.qrc rename to src/viewer3d/viewerassets.qrc From bb5ee99f73b6df9b84efc51fa52e03225e05fa15 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Thu, 29 Dec 2022 01:38:03 -0500 Subject: [PATCH 080/100] make fbo wrap --- src/texturelab/graphics/texturerenderer.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/texturelab/graphics/texturerenderer.cpp b/src/texturelab/graphics/texturerenderer.cpp index 927d8ef0..06932e73 100644 --- a/src/texturelab/graphics/texturerenderer.cpp +++ b/src/texturelab/graphics/texturerenderer.cpp @@ -330,6 +330,12 @@ void TextureRenderer::initializeNodeGraphicsResources( qFatal("FBO could not be created"); } + // make texture wrap + gl->glBindTexture(GL_TEXTURE_2D, node->textureId()); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + gl->glBindTexture(GL_TEXTURE_2D, 0); + // build and compile shaders node->shader = buildShaderForNode(node); ctx->doneCurrent(); From 9917b5fee09bc9baebd03ef784227a7967720f8b Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Thu, 29 Dec 2022 03:16:46 -0500 Subject: [PATCH 081/100] add new env - adjust filtering --- src/texturelab/assets.qrc | 2 ++ src/texturelab/widgets/view3dwidget.cpp | 2 ++ src/viewer3d/assets/fullscreen.vert | 13 +++++++++++-- src/viewer3d/assets/tonemapping.glsl | 5 ++++- src/viewer3d/iblsampler.cpp | 13 +++++++------ src/viewer3d/iblsampler.h | 2 +- src/viewer3d/renderer/renderer.cpp | 2 +- src/viewer3d/renderer/renderer.h | 2 +- src/viewer3d/viewer3d.cpp | 14 ++++++++++++-- src/viewer3d/viewer3d.h | 4 ++++ 10 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/texturelab/assets.qrc b/src/texturelab/assets.qrc index 5a85331a..3560d050 100644 --- a/src/texturelab/assets.qrc +++ b/src/texturelab/assets.qrc @@ -4,5 +4,7 @@ ../../public/assets/nodes/color.png ../../public/assets/nodes/blend.png ../../public/assets/nodes/output.png + + ../../public/assets/env/cave_wall/cave_wall_1k.hdr \ No newline at end of file diff --git a/src/texturelab/widgets/view3dwidget.cpp b/src/texturelab/widgets/view3dwidget.cpp index 3b5c0f93..37dc51c8 100644 --- a/src/texturelab/widgets/view3dwidget.cpp +++ b/src/texturelab/widgets/view3dwidget.cpp @@ -5,6 +5,8 @@ View3DWidget::View3DWidget() { this->viewer = new Viewer3D(); this->setCentralWidget(viewer); + + this->viewer->setDefaultEnvironment(":env/cave_wall_1k.hdr"); } void View3DWidget::reRender() { this->viewer->reRender(); } \ No newline at end of file diff --git a/src/viewer3d/assets/fullscreen.vert b/src/viewer3d/assets/fullscreen.vert index 0806d208..a6e21156 100644 --- a/src/viewer3d/assets/fullscreen.vert +++ b/src/viewer3d/assets/fullscreen.vert @@ -5,6 +5,15 @@ out vec2 v_texCoord; void main() { - v_texCoord = a_texCoord*vec2(1,1); - gl_Position = vec4(a_pos,1); + //v_texCoord = a_texCoord*vec2(1,1); + // v_texCoord = (a_texCoord - vec2(0.5)) * vec2(2.0); + + // v_texCoord = a_texCoord * vec2(2.0); + // gl_Position = vec4(a_pos,1); + + float x = float((gl_VertexID & 1) << 2); + float y = float((gl_VertexID & 2) << 1); + v_texCoord.x = x * 0.5; + v_texCoord.y = y * 0.5; + gl_Position = vec4(x - 1.0, y - 1.0, 0, 1); } \ No newline at end of file diff --git a/src/viewer3d/assets/tonemapping.glsl b/src/viewer3d/assets/tonemapping.glsl index cedd32db..f94cace4 100644 --- a/src/viewer3d/assets/tonemapping.glsl +++ b/src/viewer3d/assets/tonemapping.glsl @@ -1,7 +1,10 @@ uniform float u_Exposure; -const float GAMMA = 2.2; +// NOTE: I suspect Qt applies gamma to its FBOs +// so i'm removing gamma correction here +// const float GAMMA = 2.2; +const float GAMMA = 1.0; const float INV_GAMMA = 1.0 / GAMMA; diff --git a/src/viewer3d/iblsampler.cpp b/src/viewer3d/iblsampler.cpp index d2ab59ca..b350fcea 100644 --- a/src/viewer3d/iblsampler.cpp +++ b/src/viewer3d/iblsampler.cpp @@ -180,10 +180,11 @@ void IblSampler::loadPanorama(const QString& path) &height, &numComponents, 3); QOpenGLTexture* text = new QOpenGLTexture(QOpenGLTexture::Target2D); text->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); + text->setWrapMode(QOpenGLTexture::MirroredRepeat); text->create(); // given some `width`, `height` and `data_ptr` - text->setSize(width, height, 3); + text->setSize(width, height, 1); text->setFormat(QOpenGLTexture::RGB32F); text->allocateStorage(); text->setData(QOpenGLTexture::RGB, QOpenGLTexture::Float32, textureData); @@ -245,8 +246,8 @@ GLuint IblSampler::createCubemap(bool withMipmaps) gl->glBindTexture(GL_TEXTURE_CUBE_MAP, tex); for (unsigned int i = 0; i < 6; ++i) { - gl->glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB16F, - textureSize, textureSize, 0, GL_RGB, GL_FLOAT, + gl->glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB32F, + textureSize, textureSize, 0, GL_RGBA, GL_FLOAT, nullptr); } gl->glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, @@ -276,7 +277,7 @@ GLuint IblSampler::createLut() gl->glGenTextures(1, &tex); gl->glBindTexture(GL_TEXTURE_2D, tex); - gl->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, lutResolution, lutResolution, + gl->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, lutResolution, lutResolution, 0, GL_RGBA, GL_FLOAT, nullptr); gl->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); @@ -389,7 +390,7 @@ void IblSampler::applyFilter(int distribution, float roughness, targetTexture, targetMipLevel); gl->glViewport(0, 0, currentTextureSize, currentTextureSize); - gl->glClearColor(0, 0, 0, 1); + gl->glClearColor(1, 0, 0, 0); gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); shader->bind(); @@ -435,7 +436,7 @@ void IblSampler::cubeMapToGGX() { for (int currentMipLevel = 0; currentMipLevel <= this->mipmapLevels; ++currentMipLevel) { - auto roughness = (currentMipLevel) / (this->mipmapLevels - 1); + auto roughness = ((float)currentMipLevel) / (this->mipmapLevels - 1); this->applyFilter(1, roughness, currentMipLevel, this->ggxTextureID, this->ggxSampleCount); } diff --git a/src/viewer3d/iblsampler.h b/src/viewer3d/iblsampler.h index 267f944d..9f557a9f 100644 --- a/src/viewer3d/iblsampler.h +++ b/src/viewer3d/iblsampler.h @@ -18,7 +18,7 @@ class IblSampler { QOpenGLFunctions* gl; int textureSize = 256; - int ggxSampleCount = 1024; + int ggxSampleCount = 1024 * 4; int lambertianSampleCount = 2048; int sheenSamplCount = 64; float lodBias = 0.0; diff --git a/src/viewer3d/renderer/renderer.cpp b/src/viewer3d/renderer/renderer.cpp index 94bde16a..15655192 100644 --- a/src/viewer3d/renderer/renderer.cpp +++ b/src/viewer3d/renderer/renderer.cpp @@ -103,7 +103,7 @@ void Renderer::updateMaterial(Material* material) flags << "ALPHAMODE ALPHAMODE_OPAQUE"; // tone mapping - flags << "TONEMAP_ACES_NARKOWICZ 1"; + // flags << "TONEMAP_ACES_NARKOWICZ 1"; // build shader auto vertShader = diff --git a/src/viewer3d/renderer/renderer.h b/src/viewer3d/renderer/renderer.h index 4c490a05..8e1dcc90 100644 --- a/src/viewer3d/renderer/renderer.h +++ b/src/viewer3d/renderer/renderer.h @@ -76,7 +76,7 @@ struct Material { QVector4D albedo = QVector4D(1, 1, 1, 1); float metalness = 0.0; float normalIntensity = 1.0; - float roughness = 0.9; + float roughness = 0.0; float heightScale = 1.0; float alpha = 1.0; QVector3D emission = QVector3D(1, 1, 1); diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index fe23c8b2..13a8a54d 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -80,6 +80,8 @@ void Viewer3D::initializeGL() // mesh = loadMesh(); auto mat = this->loadMaterial(); + mat->roughness = 1.0; + mat->metalness = 0.0; // gltfMesh = loadMeshFromRc(":assets/cube.gltf"); gltfMesh = createSphere(this->gl, 2, 64, 64); this->material = mat; @@ -101,7 +103,15 @@ void Viewer3D::initializeGL() renderer = new Renderer(); renderer->init(this->gl); - renderer->loadEnvironment(":assets/panorama.hdr"); + if (!defaultEnvPath.isEmpty()) + renderer->loadEnvironment(defaultEnvPath); + else + renderer->loadEnvironment(":assets/panorama.hdr"); +} + +void Viewer3D::setDefaultEnvironment(const QString path) +{ + this->defaultEnvPath = path; } void Viewer3D::paintGL() @@ -359,7 +369,7 @@ Material* Viewer3D::loadMaterial() flags << "ALPHAMODE_MASK 1"; flags << "ALPHAMODE_BLEND 2"; flags << "ALPHAMODE ALPHAMODE_OPAQUE"; - flags << "TONEMAP_ACES_NARKOWICZ 1"; + // flags << "TONEMAP_ACES_NARKOWICZ 1"; // flags << "TONEMAP_ACES_HILL_EXPOSURE_BOOST 1"; auto vertShader = diff --git a/src/viewer3d/viewer3d.h b/src/viewer3d/viewer3d.h index 4f3d362e..3aad1ef0 100644 --- a/src/viewer3d/viewer3d.h +++ b/src/viewer3d/viewer3d.h @@ -36,6 +36,7 @@ class Viewer3D : public QOpenGLWidget { Renderer* renderer; Material* material; Mesh* gltfMesh; + QString defaultEnvPath; QOpenGLFunctions* gl = nullptr; @@ -111,4 +112,7 @@ class Viewer3D : public QOpenGLWidget { void clearTextures(); void resetCamera(); void loadEnvironment(const QString path); + + // sets env to use on load + void setDefaultEnvironment(const QString path); }; \ No newline at end of file From a58f3872b14ea86e414a3b57ff7144f67bb3399a Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 1 Jan 2023 09:45:21 -0500 Subject: [PATCH 082/100] reset gamma to 2.2 --- src/viewer3d/assets/tonemapping.glsl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/viewer3d/assets/tonemapping.glsl b/src/viewer3d/assets/tonemapping.glsl index f94cace4..a15ff2cb 100644 --- a/src/viewer3d/assets/tonemapping.glsl +++ b/src/viewer3d/assets/tonemapping.glsl @@ -3,8 +3,8 @@ uniform float u_Exposure; // NOTE: I suspect Qt applies gamma to its FBOs // so i'm removing gamma correction here -// const float GAMMA = 2.2; -const float GAMMA = 1.0; +const float GAMMA = 2.2; +// const float GAMMA = 1.0; const float INV_GAMMA = 1.0 / GAMMA; From 1be2436e3f7a5fea52f1481750cd76bd5b3a5323 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 1 Jan 2023 09:45:51 -0500 Subject: [PATCH 083/100] fix banding in lambertian filter caused by seams in cubemap --- src/viewer3d/iblsampler.cpp | 25 +++++++++++++++++++------ src/viewer3d/iblsampler.h | 2 +- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/viewer3d/iblsampler.cpp b/src/viewer3d/iblsampler.cpp index b350fcea..053a6df8 100644 --- a/src/viewer3d/iblsampler.cpp +++ b/src/viewer3d/iblsampler.cpp @@ -61,6 +61,10 @@ IblSampler::IblSampler() void IblSampler::init(const QString& panoramaPath) { + // THIS SOLVES THE ISSUE CAUSING BANDING TO SHOW + // AROUND BRIGHT AREAS NEAR SEEMS IN LAMBERTIAN CUBEMAP!!! + gl->glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); + mipmapLevels = std::floor(std::log2(this->textureSize)) + 1 - this->lowestMipLevel; @@ -179,7 +183,8 @@ void IblSampler::loadPanorama(const QString& path) (unsigned char*)byteArray.constData(), byteArray.length(), &width, &height, &numComponents, 3); QOpenGLTexture* text = new QOpenGLTexture(QOpenGLTexture::Target2D); - text->setMinMagFilters(QOpenGLTexture::Linear, QOpenGLTexture::Linear); + text->setMinMagFilters(QOpenGLTexture::LinearMipMapLinear, + QOpenGLTexture::Linear); text->setWrapMode(QOpenGLTexture::MirroredRepeat); text->create(); @@ -300,14 +305,14 @@ void IblSampler::panoramaToCubemap() auto shader = createShader(vertSource, fragSource); // render each face - for (int i = 0; i < 6; i++) { + for (int i = 0; i < 6; ++i) { gl->glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->handle()); gl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, cubemapTextureID, 0); gl->glViewport(0, 0, textureSize, textureSize); - gl->glClearColor(0, 0, 0, 1); + gl->glClearColor(1.0, 0, 0, 0); gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); shader->bind(); @@ -325,7 +330,7 @@ void IblSampler::panoramaToCubemap() GL_FALSE, 5 * sizeof(float), reinterpret_cast(3 * sizeof(float))); - gl->glDrawArrays(GL_TRIANGLES, 0, 6); + gl->glDrawArrays(GL_TRIANGLES, 0, 3); vbo->release(); } @@ -333,8 +338,10 @@ void IblSampler::panoramaToCubemap() // gl->glBindFramebuffer(GL_FRAMEBUFFER, 0); auto ctx = QOpenGLContext::currentContext(); gl->glBindFramebuffer(GL_FRAMEBUFFER, ctx->defaultFramebufferObject()); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTextureID); gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, 0); } QOpenGLShaderProgram* IblSampler::createShader(const QString& vertSource, @@ -383,12 +390,14 @@ void IblSampler::applyFilter(int distribution, float roughness, auto shader = createShader(vertSource, fragSource); // render each face - for (int i = 0; i < 6; i++) { + for (int i = 0; i < 6; ++i) { gl->glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->handle()); gl->glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, targetTexture, targetMipLevel); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, targetTexture); + gl->glViewport(0, 0, currentTextureSize, currentTextureSize); gl->glClearColor(1, 0, 0, 0); gl->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -416,7 +425,7 @@ void IblSampler::applyFilter(int distribution, float roughness, GL_FALSE, 5 * sizeof(float), reinterpret_cast(3 * sizeof(float))); - gl->glDrawArrays(GL_TRIANGLES, 0, 6); + gl->glDrawArrays(GL_TRIANGLES, 0, 3); vbo->release(); } @@ -430,6 +439,10 @@ void IblSampler::cubeMapToLambertian() { this->applyFilter(0, 0.0, 0, this->lambertianTextureID, this->lambertianSampleCount); + + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, lambertianTextureID); + gl->glGenerateMipmap(GL_TEXTURE_CUBE_MAP); + gl->glBindTexture(GL_TEXTURE_CUBE_MAP, 0); } void IblSampler::cubeMapToGGX() diff --git a/src/viewer3d/iblsampler.h b/src/viewer3d/iblsampler.h index 9f557a9f..267f944d 100644 --- a/src/viewer3d/iblsampler.h +++ b/src/viewer3d/iblsampler.h @@ -18,7 +18,7 @@ class IblSampler { QOpenGLFunctions* gl; int textureSize = 256; - int ggxSampleCount = 1024 * 4; + int ggxSampleCount = 1024; int lambertianSampleCount = 2048; int sheenSamplCount = 64; float lodBias = 0.0; From 3c8132d8f5ee7a09f0f0c7ac1c4d565926fc1ad0 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Sun, 1 Jan 2023 09:46:49 -0500 Subject: [PATCH 084/100] add roughness test render --- src/viewer3d/viewer3d.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/viewer3d/viewer3d.cpp b/src/viewer3d/viewer3d.cpp index 13a8a54d..bf213e8a 100644 --- a/src/viewer3d/viewer3d.cpp +++ b/src/viewer3d/viewer3d.cpp @@ -80,6 +80,7 @@ void Viewer3D::initializeGL() // mesh = loadMesh(); auto mat = this->loadMaterial(); + // mat->albedo = QVector4D(0.7, 0.7, 0.7, 1.0); mat->roughness = 1.0; mat->metalness = 0.0; // gltfMesh = loadMeshFromRc(":assets/cube.gltf"); @@ -134,6 +135,25 @@ void Viewer3D::paintGL() renderer->renderGltfMesh(gltfMesh, material, camPos, worldMatrix, viewMatrix, projMatrix); + // test several in a row + // int totalSpheres = 6; + // float roughness = 0; + // float rinc = 1.0 / (totalSpheres - 1); + // float x = -8; + // material->metalness = 1; + // material->roughness = 0; + // for (int i = 0; i < totalSpheres; i++) { + + // worldMatrix.setColumn(3, QVector4D(x, 0, 0, 1)); + // x += 3; + + // material->roughness = roughness * roughness; + // renderer->renderGltfMesh(gltfMesh, material, camPos, worldMatrix, + // viewMatrix, projMatrix); + + // roughness += rinc; + // } + vao->bind(); } From 75be5cbc2cef771ed369352c2fe709544d32aaf5 Mon Sep 17 00:00:00 2001 From: Nicolas Brown Date: Wed, 4 Jan 2023 01:41:38 -0500 Subject: [PATCH 085/100] add brickgenerator node --- src/texturelab/CMakeLists.txt | 2 + src/texturelab/assets.qrc | 1 + src/texturelab/graphics/texturerenderer.cpp | 3 +- src/texturelab/libraries/library.cpp | 3 + src/texturelab/libraries/libv1.h | 6 + .../libraries/v1/brickgenerator.cpp | 138 ++++++++++++++++++ src/texturelab/models.cpp | 9 ++ src/texturelab/models.h | 4 + src/texturelab/props.h | 22 ++- src/viewer3d/assets/brick.jpg | Bin 0 -> 1031241 bytes src/viewer3d/assets/panorama.hdr | Bin 0 -> 6511587 bytes src/viewer3d/viewer3d.cpp | 4 +- 12 files changed, 183 insertions(+), 9 deletions(-) create mode 100644 src/texturelab/libraries/libv1.h create mode 100644 src/texturelab/libraries/v1/brickgenerator.cpp create mode 100644 src/viewer3d/assets/brick.jpg create mode 100644 src/viewer3d/assets/panorama.hdr diff --git a/src/texturelab/CMakeLists.txt b/src/texturelab/CMakeLists.txt index c0af331a..b177d27a 100644 --- a/src/texturelab/CMakeLists.txt +++ b/src/texturelab/CMakeLists.txt @@ -25,9 +25,11 @@ set(PROJECT_SOURCES ./project.cpp ./props.h ./props.cpp + ./libraries/libv1.h ./libraries/libv2.h ./libraries/library.h ./libraries/library.cpp + ./libraries/v1/brickgenerator.cpp ./widgets/graphwidget.h ./widgets/graphwidget.cpp ./widgets/librarywidget.h diff --git a/src/texturelab/assets.qrc b/src/texturelab/assets.qrc index 3560d050..ac01c251 100644 --- a/src/texturelab/assets.qrc +++ b/src/texturelab/assets.qrc @@ -4,6 +4,7 @@ ../../public/assets/nodes/color.png ../../public/assets/nodes/blend.png ../../public/assets/nodes/output.png + ../../public/assets/nodes/brickgenerator.png ../../public/assets/env/cave_wall/cave_wall_1k.hdr diff --git a/src/texturelab/graphics/texturerenderer.cpp b/src/texturelab/graphics/texturerenderer.cpp index 06932e73..3fffad17 100644 --- a/src/texturelab/graphics/texturerenderer.cpp +++ b/src/texturelab/graphics/texturerenderer.cpp @@ -401,7 +401,8 @@ void TextureRenderer::renderNode(const TextureNodePtr& node) // pass props for (auto prop : node->props) { - auto propName = ("prop_" + prop->name.toStdString()).c_str(); + auto propCString = ("prop_" + prop->name.toStdString()); + auto propName = propCString.c_str(); // qDebug() << "glsl prop: " << propName; switch (prop->type) { case PropType::Int: { diff --git a/src/texturelab/libraries/library.cpp b/src/texturelab/libraries/library.cpp index 64ad01d5..7fb0d01a 100644 --- a/src/texturelab/libraries/library.cpp +++ b/src/texturelab/libraries/library.cpp @@ -1,5 +1,6 @@ #include "library.h" #include "../models.h" +#include "libv1.h" #include "libv2.h" #include @@ -50,6 +51,8 @@ Library* createLibraryV2() lib->addNode("blend", "Blend", ":nodes/blend.png"); lib->addNode("output", "Output", ":nodes/output.png"); lib->addNode("normalmap", "Normal Map", ":nodes/output.png"); + lib->addNode("brickgenerator", "Brick Generator", + ":nodes/brickgenerator.png"); return lib; } \ No newline at end of file diff --git a/src/texturelab/libraries/libv1.h b/src/texturelab/libraries/libv1.h new file mode 100644 index 00000000..4b464283 --- /dev/null +++ b/src/texturelab/libraries/libv1.h @@ -0,0 +1,6 @@ +#pragma once + +class BrickGeneratorNode : public TextureNode { +public: + virtual void init() override; +}; diff --git a/src/texturelab/libraries/v1/brickgenerator.cpp b/src/texturelab/libraries/v1/brickgenerator.cpp new file mode 100644 index 00000000..e4f7ac88 --- /dev/null +++ b/src/texturelab/libraries/v1/brickgenerator.cpp @@ -0,0 +1,138 @@ +#include "../../models.h" +#include "../../props.h" +#include "../libv1.h" + +void BrickGeneratorNode::init() +{ + this->title = "Brick Generator"; + + this->addIntProp("rows", "Rows", 6, 1, 20, 1); + this->addIntProp("columns", "Columns", 6, 1, 20, 1); + + this->addFloatProp("offset", "Offset", 0.5, 0, 1, 0.1); + + // brick size + auto sizeProps = this->createGroup("Size"); + sizeProps->collapsed = false; + sizeProps->add( + this->addFloatProp("brickWidth", "Brick Width", 0.9, 0, 1, 0.01)); + sizeProps->add( + this->addFloatProp("brickHeight", "Brick Height", 0.9, 0, 1, 0.01)); + + // height + auto heightProps = this->createGroup("Height"); + heightProps->collapsed = false; + heightProps->add( + this->addFloatProp("heightMin", "Height Min", 0.0, 0, 1, 0.05)); + heightProps->add( + this->addFloatProp("heightMax", "Height Max", 1.0, 0, 1, 0.05)); + heightProps->add( + this->addFloatProp("heightBalance", "Height Balance", 1.0, 0, 1, 0.05)); + heightProps->add( + this->addFloatProp("heightVariance", "Height Variance", 0, 0, 1, 0.05)); + + auto source = R""""( + //vec2 brickSize = vec2(prop_brickWidth, prop_brickHeight); + // vec2 tileSize = vec2(prop_rows, prop_columns); + + // float shiftX = 0.5; + // float shiftY = 0.0; + + // offset for alternating rows + // float offset = prop_offset; + + // HEIGHT FUNCTIONS + float + calculateHeight(vec2 brickId) + { + // height + float heightMin = prop_heightMin; + float heightMax = prop_heightMax; + float heightBalance = + prop_heightBalance; // threshold that decides whether to use + // height variance or not + float heightVariance = + prop_heightVariance; // multiplies the heightMax-heightMin range + + // check whether or not there should be a height range in the first + // place + float balRand = _rand(vec2(_seed) + brickId * vec2(0.01)); + + // if balRand is less than heightBalance it means it qualifies for a + // random height. This way if heightBalance is 0 then we only use + // the min luminance + if (balRand > heightBalance) { + return 1.0; + } + + // calculate height variance + // need to offset brickId to give new random result + float randVariance = + _rand(vec2(_seed) + (brickId + vec2(1)) * vec2(0.01)); + randVariance *= heightVariance; + + float range = (heightMax - heightMin); + float height = heightMax - range * randVariance; + + return height; + } + + // slope + // float slopeX;// slope x direction + // float slopeY;// slope y direction + // float slopeBalance;// threshold that determines whether or not to use + // slope float slopeVariation;// decreases the range of the slope + + vec2 is_brick(vec2 pos) + { + vec2 brickSize = vec2(prop_brickWidth, prop_brickHeight); + + vec2 edgeSize = (vec2(1.0) - brickSize) * vec2(0.5); + vec2 brick = vec2(0.0); + + if (pos.x > edgeSize.x && pos.x < (1.0 - edgeSize.x)) + brick.x = 1.0; + + if (pos.y > edgeSize.y && pos.y < (1.0 - edgeSize.y)) + brick.y = 1.0; + + return brick; + } + + vec4 process(vec2 uv) + { + vec2 tileSize = vec2(prop_columns, prop_rows); + float offset = prop_offset; + + // vec2 pos = uv * vec2(5); + vec2 pos = uv * tileSize; + + float xOffset = 0.0; + if (fract(pos.y * 0.5) > 0.5) { + xOffset = offset; + } + pos.x += xOffset; + + // a brick's id would be floor(pos) + // this gives us its origin + // this can act as a random seed for the entire brick + vec2 brickId = floor(pos); // - vec2(xOffset, 0); + + // wrap around x + if (brickId.x > tileSize.x - 1.0) + brickId.x = 0.0; + + // float lum = _rand(vec2(_seed) + brickId * vec2(0.01)); + // float lum = randomFloat(0); + float lum = calculateHeight(brickId); + pos = fract(pos); + + // vec2 isBrick = step(pos,vec2(0.95,0.9)); + vec2 isBrick = is_brick(pos); + + return vec4(vec3(isBrick.x * isBrick.y * lum), 1.0); + } + )""""; + + this->setShaderSource(source); +} \ No newline at end of file diff --git a/src/texturelab/models.cpp b/src/texturelab/models.cpp index f3b4192c..9fd51c7d 100644 --- a/src/texturelab/models.cpp +++ b/src/texturelab/models.cpp @@ -143,6 +143,15 @@ void TextureNode::setProp(QString propName, QVariant value) unsigned int TextureNode::textureId() { return this->texture->texture(); } +PropertyGroup* TextureNode::createGroup(const QString& name) +{ + auto group = new PropertyGroup(); + group->name = name; + this->propertyGroups.append(group); + + return group; +} + IntProp* TextureNode::addIntProp(const QString& name, const QString& displayName, int defaultVal, int minVal, int maxVal, int increment) diff --git a/src/texturelab/models.h b/src/texturelab/models.h index 4cafaa14..4dd54a4d 100644 --- a/src/texturelab/models.h +++ b/src/texturelab/models.h @@ -23,6 +23,7 @@ typedef QSharedPointer FramePtr; typedef QSharedPointer ConnectionPtr; class Prop; +class PropertyGroup; class Library; class IntProp; @@ -101,6 +102,7 @@ class TextureNode : public QEnableSharedFromThis { QString exportName; QMap props; + QList propertyGroups; // texture needs updating bool isDirty; @@ -128,6 +130,8 @@ class TextureNode : public QEnableSharedFromThis { unsigned int textureId(); + PropertyGroup* createGroup(const QString& name); + // add prop functions IntProp* addIntProp(const QString& name, const QString& displayName, int defaultVal = 1, int minVal = 1, int maxVal = 100, diff --git a/src/texturelab/props.h b/src/texturelab/props.h index 8c811655..0e486558 100644 --- a/src/texturelab/props.h +++ b/src/texturelab/props.h @@ -11,6 +11,7 @@ #include class Prop; +class PropertyGroup; // http://techiesolves.blogspot.com/2018/01/base64-qstring-to-qimage-to-qstring-in.html QString createGuid(); @@ -33,12 +34,6 @@ class PropType { static Value fromString(QString propType); }; -class PropertyGroup { -public: - QString name; - QList props; -}; - class Prop { public: QString id; @@ -46,6 +41,8 @@ class Prop { QString displayName; PropType::Value type; + PropertyGroup* group = nullptr; + Prop(); virtual QVariant getValue() = 0; @@ -57,6 +54,19 @@ class Prop { virtual ~Prop() {} }; +class PropertyGroup { +public: + QString name; + QList props; + bool collapsed = true; + + void add(Prop* prop) + { + this->props.append(prop); + prop->group = this; + } +}; + class FloatProp : public Prop { public: double value; diff --git a/src/viewer3d/assets/brick.jpg b/src/viewer3d/assets/brick.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4889f518f4c30ea240318ffaab27ee84999e2a4a GIT binary patch literal 1031241 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%0AFfsr?oDh}Cg z=}EO2;p7_Y_Zqvb=*A~ZsGs;w5W-_H(`f+Fifw?LwPe~KaIyRdt^*OAGOW%WtjzRb zoEjX5B~hITb5HXfBs$;%5Nj|}{zxStM4I)cvJf=kLsO}hZE6pfk~-OC0wW&bu0X`y zJeT4&xrJsOxp~XDmEF{ff3{kftTz7uXdOE)o_RpdjHyApDwp*&K(XOTvA)mP42;S^ zS`Nk!I~Qyiqr{0HGjq_EgwAia&BMI}&+Dhi_EX5m%V*fCjiUARGzFvzpK;rcX-_3& z>ZxR`@G;KPTCMf*uxiLH4_<-o?j5bDxl;&o6V++YN%4qmQP9(ac)IzEgoWFS*`a~9 zU|4=hyuGNYgpeYEIIAXPWIk2^O6~#NTWO;p?I|kjSsihYM#>m=<0;~R7063;40(5nW|juXnkPA)RjG1Z}2~) z>s<70nnKg1`^jf(V;S9wSm#$c@t2REHMbOenu%sfOnHKtR#QwoyjFoE&+FNiXGH1X zE(KuxeYl;3HVEKPW!ooE{uD0#mcnple3KUEW0~he(9`Lo5?8H+ngUIONijls;sfL1 zouDg@Z~(_WcyYjslC^7G?T1AMma^n1KfATc2P8tG=mAdCFD0egr4a_YEv3dKePBgK zr&@GdH+7WxofIKQKS{^nZ3avH_bMwMAsdjPqI}%yZ4IR1Z z927qk;LQFu`2cNT`ZE7)BZJQeFi>jDf1wJuRhY)hI z>Z-mX`w{L{+nmXOr5dKZ{!Ou=KPh!PLugPRFP9D%r25sZ{6SPC2LnzqKnmPGROV|a zht`(_U@Q?X&#@fr(HH%WeS+p=XCZ{A&~m_B8j`4s!_0+%QbZ&M^|j~#~O|f1;Y;8o5him@;Z)&;t#syuyAk$HFPK1Z@2INLdFSqB(c3rGAw0QXQ zeN+kMLL)A_2RXCa5+cO))Gi5mc;qta+;1MA9&4^t;CO-5mm~$)PvgAW)Z2fxJwc}2 zZ8i97aG#{faw&-G$o&*jr)7$-*=@SbCq-)^SdKvsOp9nbj&!eOu5Py+wZ5xzeC1P> zCkC>Pc{TuKyu;2~2+bx!Pq{#&DZi^LG9v^0ni+AkJPYg0N!#p_OY6n!mjDZU^3N^_ z4oOiRZ0(mAg^f}Oi0;^08ECCQGoqc2UMAMyRJk(O0E1iOf#MATRx#owXVI295pFjN ziULk&92WA3uAf!WI~PWE*v#bfQ3&QB43`Fw`NDz^`%gZ8n`)R_rEO2y`u_m7Np`Ia z`!z8C0B$GQA=1;IQ>?a&=8301_E2qIs#Y99>=V>=sW>e*#}hHJ6;u?6%^^6=NU{EX z*CXgE#6UL+f6zEGCZ;E3BmM3)f=nzpbPgpdPM36&d*ovg9~BNnSF5 zn!9#&o)UbO5*Mmk zSD(y@?p6!Q)6*haCRrARM|*NqcAnM!D<6C_ie3((;S)sU-+FK$Zd9& zDomlkluw(O+CadEK5K@NK=%ja>XY6H!h{bw!f7xwG4bgGL15K`Ej*_UbU~KmAmhnS zWrELEI_EF};oF8KDB_BUsH&=(JcKZ0x5VO57#;%@!~VuxgjkP%?;NnwuAu`bHN*=H z^iE+XSWs_FjWvmpO2$1Mz^|m>7Nx3@3Jj!WLE2X|g;v|3H>4m_@>;M&nH9YX6tby7 ze?S6RdJxo$_=$v}i;o40us&LI`m`lwo(X*QXR2z%Rf$%lHwzQ$W~qjmL8tcGwCfs6 zGPH{wJCw7!YBI80zCdL{Y6a3RlF_TGpXl;Rtvrk&IK4@|{enr0v@;GXrbIS^0XMB4 z{{STm#fW8V5D62_ki4BH5TIglEVVq)f0Y>1I*y}Q5%^0oSt^hvhBY9if#-{ZvjVpN z08TJJ8P{U3l*ET}Z<|A(Thb<?%xQPx{Ys zyAOT?kt7x4=)nn({tFi7vg*(E7ww{0Q^KiuCZoQ%b7Q24}+LH(o5kbpcI!KK^L$-r}5LE<#v z32AdY8XqC$sR(nAGnLMOpDh%g4V#H*N{!gcA)a?A25=B$lXZy7qDkUM>s)w2iH>E( z+>Hw5;?aj^ftTN!u_tz$iLP|wIiDRjq_BneO1yz*o! zAUK%Mtf8VM;_>}}qmW2wRq4e->E=(F3?4~>X5#%Z$|tL5ugQ)ZM2Jfid>N9KtP2hD zD>)yZVqI6r43QuMNY1(Cv)=0_V-Ya&5BEIGr$3`f;i!ptTT#~eODd5m6Fi(BP2BHs zIw)|dq-&db@+&81Rgi~4t74g29Y2-pW!6q^43T*K;wS-bjjMKgV*yI7Uo0L&hA6dcpDM#eBSI>oMUxMLyb7bK=_SPUOc7Do)catu#OqgZ z19;Hwl#v>y%>rju$qE7Dqdc!{$+lCie@#m1H6^Aa%q5=y&OXOxZj|K67$xCLs=;MB zr|G`Gkh~jlB@Jt10UD zOy2E^u=&FSXfd<@0AS#S^Wf4gk;*ow*fRlZa3T)CIDp8O)fXeW6@vOCyf0azu?t(|~fM1>;}3Ge|F4z(Gp4mUkcAjRridgtNf_PDaFo-k(p za}|OxxQO;s+&t#?`S?9;)TO)y1^~q@Key=a%f>@o+`E5N-4@Gp3MOltT>k(anHZMd zvhjMDn!%^rJU1&b!E>C~^v zv)<~I#)lTNa+ZRXja9+#*c zPRx-{RX4G}WQ|qycWfLcbLLl)3n5s5TKWSjoD@0p4)2t5_W3mx(U2sxmKnDa)JP`f z&HbwD`Q+-tRRmM(Wfr-u%==@-3<3ZS36u%MBmstoWl&J;2WcVrHUKm@gP+GE(=Q{< zuI&2acy^E|+geC@uM|=97An&fq|IAxpl&O}jYY|#e+juKQxn74xYP@anjiX4uD7$Ud0JPB^{U)tan1nnFs!Q?E&-uULv)x#~2WjA*jiEj0ku&a|_q6@q^v z#Y50J06y22D^~?5l}dG8PjjDHWOF7RktEl|0#t;hh#W+Cb1{Mt`^eR@1t3shD)Q~l zR6`=xbe55G!yv6m`#;aDvIm1|Q2dz_KzT0!3}~Bt&JYY%F~@*o4PZOi0i6L*;{(rt zcdY6$G0FIIgP0CkpC?09j107Z!w8iB0I=jTG$k$;&=C)?<=a4$)g}}!Fe%BC#0DUk zq>!B)MAuNC-EdY+KbF!gPnp^O0G8`zTc_q>p5{e~_?`*gC3RZ%`i&t_B~5ANVA-hX z*s5|^mQbT ztD6k5hO$Rj`JAdBK5m%;ub?v^#Ca1k!1Enz?iogEe)^Y+ivW1w1GSaaW`1;Ioms&! zJ#O9t@UQ;>w^5?*kpBQJJe!`2vH_|{upg^6Fw_bpoT!@DPbhr>?qOW4%w&B0MHws` zrVe90c#sXvFKnH>KEdmjmI&->916SG!Sx*6Dz@|D>^@&oft-$HBB0A~1D6sJM`VV^ z{dmn1e!%kLGh7%GNH}r@opk0rICV6=`^4i3j0D&Kv>a+*1Q1Fnk zF4|yR8%yvmstHI^}WzZ$qw56h+RghmH!9fnq@La_89C{{SPA6I<1VaTTblV#B(c zXfqYjKXl-~uyxy6NZh55FF#D~4Q|riiOLk0w#z|ENqrY?$LsCM75Vd!Fx1Yt=y@q? z*8LQ(_ESpgqD(dX38b3Q)(+xhg2%gtj~sBtIUE22Rh3$WR$w_7tIFQ7H4jMT%eX26 zcQa|lE>LHXtnhfls@hO|oyjSx>N`_D5@vXE1QpqjEMo~A4M094>c3n;y!>ICT-ET) z1Tx0(=Lx8gm81DcD3w^e8C%MJB)x5F$>X+X9Ggm=QBNHJOdF4WMr7JkV;KB%2Ml9CpIz6%c13fa?Jh!2JN*( zZo<5k(L0RUYcSX0bKJ)lf)^2-4yy@htVBtD;^*&ruDtQTrZ@k|`ag$2-iWcc&}cbu?90>;c}lg1mq^Zyc@)ngldg-4b^3W z`Cu9<1b!1QDRU}Uss)B?X&HaPXo=Rx&iTneRub|@folH%1D;c@kn6EUO-9cvQd=jd0Bvr*g{02&3y5q0d zh1dgTzY*fuZs+S1k36y_B@@!tvE`%&b~w7SV_(Og#l3IBMpSG>z&1@1QG)$aas-z< zvbhi@bTNaPfyfLltcEpR6XizP($>46kya9;K(7m(CBkxcKC;vmC->|or+!CDgT$Io z3h68osn^=8)a)1H7V4@sMv=;!vpS+lWyTLyryCuessb$M$~w&z4pdm98m6}bANeF| zZ>tSkL(23`lP825K;_ofri+<6Q5M_U3IVvJ zc!6S1?anANbfL+{RSs0w7bMr~&|FpvNKev44P*@O7G{F&bhRoL@u69v43l5Y)XH7e zYo*4W?)Jc_oPCV-a1k>{tg%^$O*FsyAb zsJ$LNHO;lXc~1oZxAk2T&(b6tVJk3aA)e2OZ7+xF8pSEN$N$m8&j8^sm%c z&UL^1WU5pUOe)%drfa1Up+fq=RUl~q7V%i*6PFcOW(+W|Se=Vuvi zsn}DFP-<%Ik!?1#o8q~)Uh{VqSFP9v0D#AcN*|J{mk1U}%s)$nagl@3C2^ zQr3C2*x#zjtMPZ5y=*m@I;QhF>p)dJ(VqtzA#Pempepd}f8h-X=u3e{e6!py!_8s| zoCNbj|& z1CTvB=VrsxZU~!<>Zenje9QHS(N^990>KP2zf&Vhk_Y*z*I!;z+Q$VWHw%!$aBoRl z@?fnIO#`XTF-q-}r|i&pJnE?6LTQkRKOalBJe_V&$zhgMwp<2Y6)^oma=yfqC?-a% zU7VLH3+ou8>W2Ucq+M?bkwX6f$W+p^DP|j4x3_|PwKO4oJG{>B0inov1!F5JYa9On zv!zPFL>lF0h;vJvymG7Hm_*0*&^~qK?0?`%7qy#lV^Y(o)z4HIzBn8w*=4@ z0P3+ki)zuYu1XExC)4GkqxNx|en+xer0Hm>`mNrC=yc8XiXW8xf@hJK2N`}yfpV;+ zygZ|EqE=^e_rA}SSE>k_YTYB*q5l9QY>hM}SWWf(j$AcKBrC`_TUpjhvK+ZM`7$ck zNuF(riT1GEwJTe?9JTK`!=xG|L#mh51BipPFB+JXbn)@=Levk|!8xIF?0O8gR0{)Z zUe<&(QqU6k#^V9;T_R9RCo|?n!HLiI z^tbV3Qo2ADms_ViYjNDgbr#nqrccV$8EsJw-61lRlAlR_#~(Vsl?-C9=R8vdPq)PDjyOrE@Yrk+o zsLKGFrSyeBYWgi&C$!W8BCj@+GJBdFzROju%}a1(xOl`mbm3wdXPTW-b{{F0XP#9) znFvO-)apCDOC)mSseg%2Unh!8IZ^tVyqEUJKoU1J){Cw(4P%IWTOTUanUp6$Y;K-e z(@K?xV=UNmVb%4Op2YAvzLl}Yi|dYnYd{SYQ5MR5aeq^)+V6G{xd;@AzxRVfN}=WA zw=r}8hxHW}7^utq(lr{lm z)(E177(1aZu34V0^HxQBOnRp1;u2L995pxg`5&JZu|eco(8^m@VpNJVyZb|3gY`+o zRL_iSbrm>Bc@BLaK$y4)h9%*tp@BH0LlV{r!@*M})nLZN6@!!|4WxTe$x*Ki02 znoZ`@b*2j`96pH|f>^!vHEFh~#x#qh#&K>|>b6Z#{!7%m)lufM4189 zXq5s1{lJ(10C3O555=LG!?2YLPQ6y+6QwSoK;J3Og#Q3)@S}9)hL0}bk@FE4cVQ)K z5~y3iKe-0ok~)M1MgClns9u3{YN3aMtNU}~AmHKz{{SLzW~3;v1Cc~KC|0CdKitmE zKy*xj!$IqnR4KL2qaX*D1BO)sUh9!6l)(ZlRElvy8FF=76N@#V@aExlx=~BiW^wx# zl7WCcd`?|e%IHZM@IrfN&8{;KQibFm4Z(bv;QOBdEam!Si5spuj!t8JTU=$?NP;KV zZBs=4v&v*U=jcc7F=v6ce7((JASCit$ZSs)4{HAajENXvd|GlGSReR*WliG4;&gou z1=$>AmxZ?^Y!9U8{8`A%#h?YA)SyQupGu(1N2Cl_z|^c)FZWo6bdpl6nd`3Qdv%|- zr?(MmK_@jTPb6nZJPKN~NiQt>F1U}97`&~>0s8T1=j+VDS)Ev+S(TC)4Y;Q?F1$I# zki;7q@MgLRej|CdQk#I2Cq}Ni>cMo*@n}N2U*AiY^n^!}pny*)Kv!%Is8ZYj;{k@b zwy9nmk`n>!l+Vj&>Ytp^5`lFw^7@QRgs}X}iSicU1NU2+Gqv<#Ds6BKyc_mjO?A>N zIAa(p-7A0?a*w3VNk(wj&h^73J_+i?#R8B5G|luOH0EXdZACv-n^ z7@^AAfzdt@=mFlLO0u-70^@Rksyya-$mee?YqmRQ37bNBy8V4uILI2%)3arV9rcXH zkBpj#4V4v&IW@CSSjnnUm#;%#)O-{==xf<9$o3O6%5+FpTHMqf%iN+}uT3p-6fm7~ z*Hd;UfZDTk8xueoJTw~GjQg9lG#u-eqp7tfrZxJv>)2$`c4-a8a$x?){D1j0B_{zB zKPtZy{{U&u+$w#{3d@E)QyLq;z0@GnA?^s16$(yj?rQd+cr{Zu=7h;QJH~t{2@JV2 zrNozcpO4a1KLbzGx`5itO@0r>4u9`RXOyyUXEfm5jH!RP!BrIYq!RCwY@JhHdd38m z+``v9f)*Km>gpH{n{Cuq>$X<9wjRvdUlG$oN5*xSS$H~ZD8KpKn_1yX?a$`lmc_Nz ze7f?uk`7Eyc1GTu2tV7{A<&b$qQwlUUgG;ckMdP(x7$+Cb`^c{t`^sV2#BTH7;P#(74LSW-HMYHU^(bITJ>%q)m5nnUfXXZ)hdt)o@Q=_t*7HC5DS@)`uro7r{1^9oMwG zm9F^)t5cIXs%vXa4|A#~Pz38|)%uZE5dKcxrK=#CcM;FsA`?c%*qWGKt>9*H9$k9b zKO}8h9Jm>NU(-D)GGkU=8OY6PF#6wnb*f9 zk0)iK-ril4PHV%capbTj3;Q!k50l=C(kaWbvvaCTIc3ka1iFcTY)}2<6_=$^QU}&S4|5)K%m~7!@q~8|HSJ z;#iB+Mq$za0PMb%RuI(n;a$FLtwdkyrl6(Y{c*+>+2j?&mC)H`W*lIfaQt@gqbrA7 zl!xtrR6=u(L}^oSSm}k3KTEo3+!U8&?pn8AuC)N`QLSpm28NMzx?WzYh_?E!!D!fidn0 zvny*Ju1P235m4MrdCBT)tG%o-78==lUf$#S6l`*oxxFp*@tJmc6GML{ONlb)8nAv! zzO1X+QIRG1IK4Ed2j(D@G4wUyiRp7{PHC;LBzM(^ z1&$yAjLGyQ92PiET9aAq6hQbHMtgHdQ2O@(nIzsuZ&;dnh~&vy9-(=}3CNsvt7=D4;=Hl09J zkY;wIX7w@4u>z4Z4AM-mh6Qo|01fQU1CS{|3_Q6Y&P&EO49!*l00WX&>F@r@t|M!5 zkz7`eTA<=_Csk*>=VMx4eD~X_8pqh&ckCNMA$MARQ!%Rf+TyuuTHx7xo#?P$~It%H|MeX_6ePitTMf9bbOW zsZU)2NXTITe?Wl0n1UoGU{`Ck+3i?`G?%dp8?~6lDh4||6Iti;;`)s>YucaolWqG` zfbk;C!+ylzjelz=Q44{@bC{Ydx9ls$Smeu0MWSs0Z2KLOu+vMps|JIZ&yV3!Q_!Ls zv6W{PNVQ>V6B>=-oqM^V(r`kWu z^(ZBu7lOCbEBLDUXf2i|xS-8t{~H zqO6vuI)k!-_|EV^S&GVGl^UIA<$c1+bMj}M)Fv4m)n|3RxWQkwQU!>9Qra6~P_-)k zO?Ky^->fB{2c5a#k7LAqJ6x~(Dsh9LA&5hg!7*y2pa%}SmxvrHPf#aTMRnFMwv3IpMP{WSXrZO%w{Zh~wd{yy@`*Oec{XYm`61ZR^*C*01cXeUwUf0< zP!rv~qXCRctfpJ#uK+aMNmk3$k@Ps{4i(<#u9_tls5?d4 znPN+ik#YImn>xNxwN}b5qtwx{ms%fYVhnao)Cfwfp64`-?rF>1*mj^;>DVRnWS;5m zS9m)fF1t*~$*54-I~cR;uh+5p|K27vI) z0W`o3@q1UC?oI%Q&wS;>QlZMHsNJx@g7yG{#jg#l_}&3`Tb0hidTSK~`hAt!TuKET}| zJtwung0LnFJRyzAT^tIQ%>g?B#$0`@hXl+ zap((nlr%;2IJ}ovb7vEM2Z<#wMIY9p<5A_*{opgf*)qoje`?vK& zQL&Md+}`W~y#Wj=BOhUM&s`M=D7upWv~%p+1F9?Nq@TS&SFWK^y%eCIs2M%SFiS|xj#T!RUl+v`N&Yu0CExg*XQ_mHEf&M~z3FrbeQS=zsT$Uh~ z-{V~Us=A!if%wjmLcYTYOQBd%Q$o@fwTG7%JHS2PUek*3p9ilc;Lf8Old9Nxo%w0ulj0WSMrwI8gfyaRp4HEj&U% zq)-p35`)Zq*-q_M5AmD*|I+lD7)wTPBPoqIv?v^^x&uZsn1Sr z`kkjGwW|nERGz?HUqVg5D|xuxg^w9nh6Wq`L(WRra?yi{ss>i~eRb>ehPy1CoYVAf z+(?Bp*~plA`g+YU=);@4$>`Y1;ypuhwJm#^C>)*nO&_RVcIh>}^nF$l{o$=1EV$c+VSm&hikoO~QIIe=XPG-E<}sSsMwe#><>VSkP>veBC%i*E@YYHL z>}S{$Rofh#f_eU<2R?_T+)FBZ0$K=5o2inCWp$u6EY+klZ^@xrUBFjbIlZPFS`@LO zNkg~~>ONsj`T!V7EtT@O)h8r)nb9KJl2RI}C6hF9?a8|^CQJ)}8{?jIcB9nK00)Ny znt`oT?X^UqPZ5-^S{%c1>-i;+R#vE0ujS;v>Zh$?uL*+J?sV@=V^Cxlx;D^E6tUv( zk{I&BBr_~-_DZy*RS)am&A5@dUT9O*Y3Sr|%AgcKOse2P{PDna9& zmg^x{Jt|P*?Zpn0=tnA(WAX%~`AT%B?`>Sa&cCTue0>dA(@hT{k^0#Psf|oZrrA_f zcgG8yI~}b3$)@dV)Oh)0!v{(#Un_TL5(5eVTCtXgVS3^;Ir`gOQ+Qe#C!XeeO=+LB zB-pYf6xJI1eObdabZS~&0xeSNO>`$GuG+E51Z<1AYJv@@IMYWT6RDy~suXS99%JPp zIi*G@_A?HrX2jmMl(mIhE^Y_f2CKC!*#WmLLdsbjq-8@o+&ejIQpt^18TkyS8 zDKNl2ZR=wl^wjtSGB3ogu*~deXXl1R?^UsS)x^7ifQoH z?_gz64psCNX)mCnp-#D@cDGxRXD@7A?_q+na&}>YFiWa3Na4*zv`d^9u3)OQYpo(! z*Wrb3BG&%^;(kZ>6#Y&r*!6$+`xu512^^lrlnpuspfROhQE zTsa!nRSQ^c{Ienpt3JLt^{|cWjYPJuYf`mE0f!GEZM`A@9EjP{@dCk+)l?IM*?}fe z6z{buQ&hAm3pD_XrZ%TLL?;5(h6~1Cy3M$BoLYt;)*;Kayw+xBq9o?cssIu()Lj1n z_uA3@pjc8qEyd~Wt;VS}y4_|CnQu1xXA;$)voP6X4g5j7yK{I6RMF)wl4~higQ{C?@V0 zkf3Sy3nm+sq3Q__{EyUX(Vai7u&kM09(61jpXu{jysCT7N-;eUWWgqfOP&nG>UxFH z;t~hK>DlZN z^Yh(dv!$j2X2PE!^LGqdi8cuKK)86GjKc@xYZ9}Y6UlqAEfO5)}_9t^KJdYp(p;vnqnahKk1W)(r!9VwU zH<#ja__$CEHad<}%RJ*yx2U~)!Fk9EYXBt6DI{-Vj8zikbgpwqG2`}=lg-7@qS)>= z(D6!J%g8peRlrt2gJrmLDha1?c#0TQG}HzngkVruu-4S&Y)(W3haposoBbpvHJj?d zAjhl9VA>FIo2Yz5kc!PFUv0KsXtM={WW27ldhX#~8egTGlmah6Nsdx($7aVg)sPRD z2mZ~o0W7rTBOnUr=f?mQR&j2IoYX zKlsr%?}j^qnAQC`oo)_K*ak>5RjefBj8qgpf9Ep>Tbj3itqj<=zGt}#%A91v^A$P3 zBN1!obPOPPs)$eYjtYPu~bbX%uAg62RT^cq)3Cr#?tfWI=Z$R$#*`90<0Y) zz*R96MN!#i>-e^=g4 ze;U9}Pb>lHEV#eZi1@i*A{(64mmB^~lx3@aqqV;rwyT1=Y!efoWS_&-$S6Z8pAO0! z*a(#;MCHVARZztxtaO>nSFv=NB~vy74xyD)&;mIX43TrAnYEU#=tW~DZK9EWw-jDW zGyG+c4q+HSpWm1?x7T`hO$Rcgw>%x!pD~l=IK9hIx$X>B2P(al*5Rs(F(>yd!ialLbfL>V zim(xZvp#Id-BA_ez1VMPG_yK;?l7sUR zR(6%=5-ryuEvcIt{kf!yzgCVVBx z_i{cKzpIstE=y{=h(LrXW9gKOP?S( z=}QiIXMq0zsRw@&dk+SB{gc7A)Y@hr!B)mOsKsmK9xmk3gU_B%%^U%JG`FVlar z_?+gdK9#LzA^_`mcyAcWq%%MseEAgbqvU&B9Uo;Eupf&DrC7gIe0zhiDsmOBPpz%W z{G#(#58R!+XqP(L!qkQ^7^0EoPBGc$WoEHs?3uU8HwZ8!faII2wpQ_Jj|WjzA4VMV zE?8Ysz`qVM-kG!1naj2s*wbhv52-r+l!$4#g>C*e8BRRqSG{aos^Q~lF#pHg!d$bDr~{%EY>JGq``bUT1YxUr7q` zMH8w%U~``!-QG$g;s8~K)~V7y!55mHbEO%7=xSJNa^VTLEp=Sng%$uB8V$<* zv?;w^CA6OnGYO2zJ4d2N%L{U3?7)M6JQo4@2AVxr$1v#lHjQ>p#4cr!_E~)?qX~n)hnIJE~bK|lTaP_&oqS#Mb1@!%cv9i(*NPo3cWFV}nE_hW4 ze;@|nR;n?QYa8DF1pKaug{+jY8trxaipowR1myaLZ0R1<j4?ZV6y}_uf_)$2$lYwAw!S`Y@7_%Z#1r=IoCwm`boSvwfULzqzu-y z%7_VsOsw2!VWa|QfQ;c<&lyrg7#SQ^`RuJAEjVH&m-`95nKNlPdr8mr*`7BkYWWgr zt&MX;@_!Hb%^H7=*Gnry9i49AS1!%}0DCF&=2fmc)gVk;-)mu@w2fS(g117#&r`fG zim6p6?WUpi>f~_j-w#fB~klb`LdLPUg1=PwzPnBy|j6 z&#D#%nK-Mk!y>7S$S3+z{{ZO9#K0Z^-&_C~geimup?aG? z;Xzdb0rURT`Hjjm?QRjV3Ed?J>E>N*7dXtFkQmnxKA?_Ja52nQXHs-Zxy#uj0NI9i zCX2L=b_6JJ0i03mS3hmM?uX_L;*u#N; zB$C`wkjD=fq-NjWvKUBovo?i8)uY@fAvW+Mvc~2QZfU(l3O-Ez8(kI93iEi;6>ybqmvDn$UfXt zDIyg`LWp)oOMaYbGBO1Hl7n3-NZt+; zFKFS|sRp3JjSIVQCib=Z;E^Y>?bfK)JB@a!prcIx0Fxk#TE#oJ!g>HI=SR_3zpAJw zo0kd0pD(Wd9%U!^jOWiU((-toNce_@O)#ev5y*x~VDJ*^pd=F#;y)y+$@YGZ?d;|o`7K&5gM;n#t_rMNgZFUq+PfaOkoSpdsa zJc1k(0r_qN%>F=l{F+q-n`eP4LWm*i zrp16rew&Pik4%e7P~O0;co|eip&*qIl?|aJ9!|6i1lRdFjMbMW8DyGqzT@LFS~I0M zO#lfIAfg#Iv9u9zqL?=eQIYo>$lVm6+E(8pes%0^F^C_J+{oPahQI2cZ5^GoaP497 zUO|7D!r}UA4_+ouy1JGNmQTqaAJ;dTf|_R(5{t|4j!P0$NTVj)^wSV?P$#gPhe*|e z1X?rQz!QpF%0%(M4B6ilvMEr%&w{kIteOh@FLQIP=0 z_48E#V9(tr!4kwwA94#nWTg_NqBg~lW~i%oy{1&;hbxi(>+ByWqVGLjJT}otpZ{B!nxR_w;1BD z9JX^)K%Cbtc!_epv1?OMFVRchuknp&=#z%EFHG_-e72XVi8!+cxk zC?nTnTK9U_Qt6k7n}aR_!1*0{c8aN-Pr;&x3iXce_FT&1wfSzztsz4md2c}eD022k znVuY&-Pwg70}r#yxU({h_#ZO#ND4DQ&W)>!JouY@ zs(LFa=?ah3mK{+Gd#Gqyz+AacO++sJ#LErtQoQ!$92t|a-!7rR$7P?Ni>nPDgkg;J0KZC2W)F$C`4|lDKubl2953YCW z_OUDz0Hd707TA)ia~$zGemWe%6z^ES8Lrb$Dj1ucg4p4}U`|LY#jks{#={OOW}bhF zB7~^GK*uYePcP8Uq)~eIyL9$MZU&|siRBhlC6&Imfs~U~P6N`2f8P9jc7T@eL!zWs2)9aE`LMND?TTw<#Ti{Qt^*9oY%R7`4 zrvz$zO?X!TEom$s=5uR^3|(D!opRYo;$K}hX7vJS{3~^)jM${ zr)aQWtA5ETa(Qvij|7euPzFn>DFO!b8)!A`v+F&+bgmk@_%X*`y4jek8UXJZu=jFP z5_&;sc^Km+1~3H`CD0#Ry!9ce-Hkqh&s^r-Ak&@>bWkb6491YzD_qsW)imVQ@Bw(* zW}tJ@wDUKF@4H-V`&-Rpnx0H=116YgvTiP>tnoas#b2vsroepI1HdLAG|+Xuhma+6 z-lA0X3xSRE^s$d_t75}1qgYA(w~UGIdKpI^C7cJ&bu~-!>WnS?HC*Rfy`mO3I;#UM zHRhFKQ_s)sSTB7le@P^s8zqHEwKaZ2@%Ri9AD9f%dM;%KLHXq(K+pjk z57ybBDKZ7g_GHN;MZ!XdPubKwxSl8HIVu$OA;37S^B|9iT?VlMBA8&-gp%yAe$P{@ zIn%AAHXh9|GU2o~2CO~4>NXXYTR%okGW%UA{{T>sC&^At`tuzv!8pq*HZ4PeGQs3I z;K3k?!J%xsU&EOr1BX4+ml>9RHS*3p8?6z}C~%2&PxxTy=@sO_joVX~`o+K7KK}r` z)SC79An54HnwmzOT~nB2FVJW9sFj6#Z{paKu2DPFlsNO8UP|^vJh&d#e!^EKKF;nS0Oj6V=Q!z*5 zoi@oq`L%COVv2P&gicuc7t|d=wIMUsY{&&`wr(e?+6Ee<5iw>N6F;zvC-AMsR{UaH zMJjPtd967HbKtNdgn@^#h( zkRAjWWR-|GnA$Up(LGcckc9R;4?enZLU^`?jUiS8#4>>VO{5`ozPGVn3z!y*Wv~ff zNUcLen@AD~FcO-%HQL$eOofLz2w&sf^nOIVgsyil!64@?&bgz3QYvdqiXIcW7FR4& zO*kfn>T#*yr?ge=j>#1$*0}=lKk}zjJo0Kv#l+?~kF?wiWs|qZa;%|8HoJ$-E3Jg2O zwBSTQv*c|bGT0}fNU2!q%~;?Il8mPskU*}mxW5asf{_O_ypIgEE=ZD;&j9jl z9Gmks458{GnuiFVqmg-7!f2(2vSj?k5_o(QtS1FC4LYyO1oA?e{U%lT;VQ$W1DEmT zFgNLeLHg=f6zWz+Zm)>97=%nI&lWm-;jW{ae{1>&pR|6F0MmvHTtn0u15=g#s&v0pnXOCpaHWyD>MM8lmF=>!*Uyl&NU={UnWlKfwylmrU#!q{JQBoqK>6XqY+l8k9*6YG7xiE5f?k zip{`kr|C@raG8Inx7dXk{{Yxc!W%wa^g`eVJyMsgUys#xzpA#S#EDlDRIX`bVp=D6 zBR?F-fD@Lh0`3$koYgK~AhQQaoCgpDr2B<4lYB~TseP=h($Ec)W#oJa0t28sD***& zd`MG>D+S}KV{oRr(8+#cB<%7(FuQ0TVb~aUw%lYy#DS*6h5c1Gn{doIjz%2n(%bs-y`48qTJ_PDrfNV1H z&kmfmHL%4kR8Cj3ifGLDG*QOz%^0PKg+$+`CjVzjjc5899ceY;BVPFg_0Gp{2(+9NADjqd+`&yWs~U@rzcf| zJhNpv^zsY^6r)Oo0JNWN0rD|eF-`{f{g=u_3=E804$<<&KK}p*jJso1L62k+66IwN zYfhjQGh3AHDsL0ViHa)o^&!mS#<=p{if9AI+hobDl~Wc>4}7`+K#aLMnhE52*U|vZ z0xChNK+w#+1(0MT_ye(#2<2`ZEo#M5 z%!$FQ%Rz*+oQKjeU*Q!kU3Nk;Q4-(?B!~x}WU|fYC z@?Wb8sUZtJMX9>&Bj}1tSfj}aP)G+-ZhwxJcCUsL#+B^0ieizsQG%{2`*;0WFrdc(&=Uiq6u1RKUNWtVvDnGOCl}oB!`9*kt@%~~)XGKY zv5LPmfC%L>DT34zjA+*9V8s#9`5^}i{3XhEc03TYi z(_MU$bR7QxiDMa8*K0nM?3a{LeMaC(^EjEkqVwe5@sJvcP(?_T`28U-8?2WY?E2iV*`PbxX>#>)~-WLO*DfKdFv3*CVQ^ z+?=}=M6Xyd6NX<5;)9ov!fZUsS#CO>!2Z>$kFaGuN$H|PW?Z{>Raj zYjPNYZO%;p0K3J@5~cePZwKNRHdT#el`a*|;~AaL$@Oy6nkT1;lfP;%MIEFy+0Kfa z4jLH|_0pKco}lBa)=yB3*RnrPxd-!jtv zC{UXgIp7WAaaD1Vpydn-WnhA_VEv9NOf0MWM8c}|t}|hYp-8qa7MNFn^E)ceQ^1LU zoxyZG)jJ)r*4+0(*^0I1ggmwu-HuBmVePQlSL>uy%$9pI?S6x{YvLBq4cNkT1He5k(26MUne_2d}T;3Om$2%1+lmTuA<0EvBdQU zSYQ&9c;IqUh7`v_Y$b&6HipG;@qH(QG5G|JU<1^6QR5Ua7=mz%9TbMwM?vuYJ=-9p z-3ZT>9`jvB?m$ZTfzE(DjMvcC(wr<2EXNBI{L?3EY>w{wSii1y{kZ#_%uw73fntJw2!ST6dHIT# zrx<4qD+)$Agh#-HtA_8k=qg=n^@(fmx$YrX>Rw$}mJqZwek^_@4^PMdOOCp`^e^T1C zV4Ox^)vK-Q0;C+(6tCA-N79bM*y)hgcV(cRC~;9l>iDD~%t5zv}YLZ3*q+uu5H&Zin)H zsLbz^TTnYQ2;}90uD1P{E^J}d@$1&BGuNX5&o>TnJ^HN4kqks;pw`zS()`hsX9(E4 z*BlJa^DmuUzT&WekR@tCjaSpB)xhQDEQF8@*6XL&Bql6UsF_1*6kFOJY+Ym(G}~Wj zuXWo-T;O;*ir%1*<5$|9Tc=?%vnGM+#nd+Kb)b(C7JYuZgDP_wDqJjnq_S(gHTd>X ztt0Rl_n@2!Z6Q<9UMNyjU|QyMrKf@d^82l8Nd%w_Nqgry9gZR7SE0{yralDy{II;R z-s1@>?R!Zs{{S0hT~%Q|$O|zjvQv9OSpe@xBRuwr!FW#YLsJyoZ2(Yy;Ahuf#(Jgb zQka_aa?R>A>++L3jGaTzgvs_dAz2B6=vT)xTE0caC!Zu+D#aM2xPjX&SQ(zsS^URq zKI>`gCZc@$d+P5kK(w*srsl07Kxc~6Fm(2F;qPh2(wh3wg8k8ZHS#YFTuMjd&?^5Y`0ukvDYqzDSR zmZ^@#4$G64c!n~m?g~SyY}B|`-a&&LS1YoRc^FMb+vC5B+1d({)Yr!t{(Qx_l18^J z=5JkAn{glFrJ>5ef%tFC_((OXVtS52eOvTgZpRPip#dTrS z+gJ48y?(jk5I3~mo2%!3O}xKNUpf3&QoI=hv5?>bWYRsQt5hV0tC{|>2Fa<@_Yi>m zS>Y-BeYnA%>zFt&qI;dPsX3m4oB_|-LggzaDM?>-0>TF8x5fjU(ieSu3`;LUfx(_` zfhmH6V~8;pr7|Pg%XwyMv(|t4$ltV|Wu5_6MyVdgqO&r{c#P21mp1u{)&|^m{fxTo zR)a-`Sn~muET7NqSYyd;6W|K?`Rz5ciLiU9%Nbh*j#uSThj=+^<{tZ6@B&6$AtDmS zx|$8aOj3g3c2d(OW{98mkRu#XKHI1sJVsDTpHh-s1|`m>H}b*x-z#30roJZY*uqUC8h25Xg4?Y7IGaw(n$DAI%Po8@5|17U+wi6C@P+$ z9LoOywHJm!Ch5SnCWQY0nw4>)E!a^hWAhPQBG;Q8b}ESs{zHuDI}Ka_86}ZcdTt> z0Ez~nd3epEid1Cb12jAZsaY%U!#Guydei2Q1Sxd<*x#mu4t7$dNICIj@-j6SFFojG zoVb#jPTsy(G|wI$#h2r-I-TRT`h8FkdOWGe%JOGHoT5dx+@oQTGpvix)0Lz&j(Wkq z&eFZ!$%M>QV6AOgsbd+dEp)2d>(2(d`-9{~QT%gkhBYd5SiqqIBnuoNjzLzmp~-aF zPdo=O@))ZB08@tsF`+40s3KCEpH%3b#sWnBiq*~_{Jg5Q$%d;fOXPcHZbasHN1Mxd z;YS_W^HpAGybkI!Fc!-obY=StACv8+`ZZKX!Q1)4qz$ituXhj88k)6vE@?AUM}hcw zx^xdgeKi;5L&?M*9cxxOMk*ni+?yyTHwqN3Z45KCFfZB+p3^ufo+oWkpoao3NNi{3 z9F!^~Q8=ZnX*UVFuv36mCDkq%oS#Fd@s%+wF4=J3D%oYWfTv_Dd;v})YC|AksoOXgfQ?d?*AP-;j&4|B6f00wTCrT1ofa0> z&5p?vu-uR-_Ndq307!@e{iB)FB7?~_lusphI{CTKXfIdXkl3$^U8b8)C#@rRJ2?Ya ztV!mH?Vkm1#k_^Eox82Cwf2$L<7+*mIW??TMj*kLu4@@p*xDy$_cRjCNGq*%;sUtgx`&*;9oUTT36d8tDh{L@YnspE0KcXM!ng# zS>oEOm_3!thKP20(O%B>@Q?>58fj$?b-|i*@;J4%h)f*8-zk&OJ|IBv`L4yFedGP1 zy$g`#hya3Y*n=nLMnaCumf?IO#|dqr*GY&v+^!$n$+a1Iv0b1Z$vD$G>O*Lq<5$=* zj2at*wF5KuDN5=U>%iwm&dT9Zrf=i*t#3BaruLlc49;*La!D7uj{XK-G1LmsyAyy+ z`gnE|($*eKmj>BbK2!;-)mvO?IA~GHJ*uy$+FUZ~r_}cwutQL-tVtS31hCCd6-*_? zIK%Nme(=#tC)ebGxiNILRyL8oi3A0J*ot93!e6^S0S(ugfer3O2AOfxm%LUpFfwiT zUP1TEtxnz4F^c zr|nsL349U2PFw-b(5=KSh_455Hi?5M4#u54!0XHHKHyWDm9DA)9+embGr*mcmTVf= zD{q)oWq_T@RTWFHNN_);0$)4CDQK7;=GNNcX^NE<(4~P{%iZO>7+XZHRHTHy^`@t@ z)Mr$+@OKG|^0%Y7nCd$WB2L5DH4uo&=nh&SXU^Moq+}-GR#xzJ0-smKy}H%4lS{;z zn}sCq)8&k1PbED-N<$=77-MKM@$Ea7WE1nke|VlIzHTIzT6tzzZtn25pirct<%at~ zK*^9X!*>bzvrJP1OuX2JwAVbzlK^Rnqk{?5T;20mXpU5)Uox(O>1e=G!{pPqYza}1 zR|=W2pgFWf#+mTdySM8eJ!=dP{{W6Z()6aEjv!v70A|=xfKP5);~7xmr}pC|`kDDI z7iC{%B=tguy{ZI^=v^5G_LwDmT7!ukqVTUi+$Q9uSh+haLzzUx&&zGCrrgU=Q{;}e zMs>EVvAZYdxkz%bK5aLD;0#H}Hv7doK_+FN0S>DT1)m=uD%6zyQ0%pIF}#nrJQ+eL z2KsFfZY{E`w35RbFR!~Tk%Sbv|t3#TIw7W10Jb7mz~NWdBn^2xcl~PN z^g@3i8aY)U=3rhCBMQ&l&2{!UrX21t@?Df7gO$VdS=(5tM+BjK@?FO~b2yOEoS)J} zf0^~Zx=rnq8JF{&X{-x?{2V0tKgbSCxnWOyt!4lW&kkJ$kr5#h{ZqB`%M4w=YA05# zHNWl>?ikzzf)zNzrZIv&okPxDj!yza zu4WGg)&kdXDmNMC;h4uQACNj9?C#4%Z>?1}$(kw@?r3gJ{W%vyyM;({t4k(mJ(~;* zmUziUv|uc3@&cB=Qb$hisRC;H4FI%&>%5+)c9VOY2Pm z(XpsoTNzw9YSMYg`t0TgQ>8@MP}Tjtq(X=@KXHMELivBBY&-~-)P6hrcBxUB`_gKr z7yZ-C0r6dlr%ve;c2ceFsH`R0VYxwQzDT*`bj~ckZ9T9G4#fUb?RHw`q#QP+2H|8@ zlH8M`W^PV?r7u{_gT7Yaz#-Bwm5-Iw)f&A2kjXICLh}S9C+t~{EKWD!b8^Ls&=$jpX2}oH-96<&&nw_@*ZDe zh^nLhv^4M#e1cwJkfcTj{JIk?Nt$^pW%7v@Kn7S0?Y>FUV}mdWH~U#%*yNjrkCEQv zEQb}48w(|uZgYWV{_-FIX_ue4-tHXCh-KXFB51Zds9Tq`-T|48!MwkAurgnlSD4>z zx;SRj@gFqY#VDah1Pl4b@Bq1xau1rn=mLpW;LqwyIW&R*&xP|0&?Kw~q;d02h+qTh zK2h_Eh(D)ZwU_*pWY>NqSQmVb^T!UM@IFOxJP(f&3g|W)N{^z$s}=q-C7w}!(V_Rj zVc=DC#a>?b!(+uAefmFyu3jV#Ev>7)JInk{)0x5nl)uU6k#{j6$#Qa)N;g+Pz ze0+T5TtSVB<}^PVz#zT_WY;gpJB7%1(c3J()cB8PtQ~I2OTtF1yq7SvJ!VkB8N*Ip zL=ipW?H;bKZ_0oLnk`h%0UeWowo~I=guB%@1|$vWP~^#CD0Z~UPKsJsY3eGWiC~*a zE`H)BC^=GOncfV2jvihuA!s={w<(=^nZPkK0B}!|Sr|Q1Wc)qL57mt)9OMHlwJAt- z6LyEmbSXPIL^G~kOHs;`nX*x}mF_MLp&%Cf59Y%@K2CP7LIDa4+Yp zajJ)3g(np>r_g+jI?$~XsF<v*c(~&EML7e)h7;e&;-uySW1(1|ohhYKr({ z2l(f965@bm3+0Qm*cfw56XNX3&PccIGw)`h+2MClzhft&Og9}3a7$h&7VNWw!;k>n z%mRLAYQdJSV!Vp=T0)akdF<5MCw{mdV#f#$K1BuqfX@Zz{H|p$i6mP)_L|zW%h@!X z@00+IO(u>iB>oDc@iq~;qNC3grD273w2TXLCaVe=9DI}W6@w44tubHCStG%!{DGe> zOMkYo!+c)e7c9YovB&PvMTaFM88`1&Qq+>W81Z{(63@CCCRF@}LL)UP{86=Gq#4Y@ zkKPv2S2OzYeAgQy^Jhz)yb9xd|l|RV=!?rn!cP9 zK!i$+?#+hOwDaOIw6($!p+8?TgPpFY3t zPuUY9JH5Phe_)G`seBid%D<{mN-5Lqu(0z6*U?(GQi@W-Z*Wu^+Vj#sY%aLJ@QZ>I%63PRAi2V-9_1(2E10D$ z-cnQruyA-8K#$UQVUv}73=KfMc*^xEK9>hJuqFDDX|(~CYjgAf%Rn^0bo*;I& zB1=QPxT{?w?M33Q>W!B$UQRCMu-uMZ@soonNcCr@?`2jbT8Tn!ByJOHI0R0_)!(X} zg14z;LGrB94O7&l&sO$^;5y~bC;iL!ESGn1H9NZS%x5IdbM0gpl_*KvciSt2kEmne zzf*+p{kMxkhlz=3{{T)j9KhL%#54MF@&12fb3kSIc9s@l>7TpI z==A-8(xhdm)p3+TN&qQ?9;l@%+N>1OP32ka-4{{T)tQ$AcpJ{l+RZXV_d1z?8tq``gXP0tE?TsD@Y912if_N$_UgQo z;a@4O0BVP-e0&n&S$j7~u(#vjrcSMMU1=lXTOx3cabQDL`c=$5muws3*NqAlHnv`| zqvUMq0?$$fA1Mkj(Qr6R^$gPO`l`VGE4wP~=@I6g^9UWx@IFt!u2u_yztt}HRYkLb zq=+Hd$Fl=f0ro6rVZnsrBj$chvh;mSnSd{4QoElw(VO;HnoN$|QrvE3iNwjTr z_|vo`0v7yRb&X}cj%j5s+|gI(Aqj>)MA^u)BY{8pQYeV#rtY)W{KbRnq{&1K-{KlO z!XDyx&HgkjoF@EBZM)dv-SqC#Wc|+DtP~dIzG}Cq*1*)d;`)EcpmP+;M1#j$tJ%sd zm$1kFQpv#PMFwKOpCAxG5(%|GD#MnXz7>$?coX5%O5eeC$kmPw!T?*_;sXUZ*g5%= zDwZTMU0xmX(Lw(J+zDlMM2sd~w=z%5w$rcsVN=q7Actcpf=w%}8;!<@#a+jcotoRt zq(BLwH?v<=02P-~cX3<(NzMS)SqUMbBXTN}G6~=YugBBX*3Vcf^@dHV^woxI4$=Pr zkRqC=NA4&Fzhb2^JgsLH?43FHGZ>{$`4%TnN~FNI{!J5@K$RQEA0v>#O(dvWX}^0| zP0xy;)kK#l(~f>a%s{wKBjr;2E1gl!Ty6MP9ak}>iFEcyFxz%VIWaw2eT)Z-8iM~~h^ zCxs6mG8+`plQkYo2T9{O%%z_ZiHjsgMkepBL&0B@amYJ~qvZ0{d5Tgb(_h86JPnPU zKttjCCjgc>@yEjU-1s|)6FwWU{Er{%-->QS0@bFU#3zc_+g` zwN)|anU};QEYE>aFUNdVK}v)t#u{G>fwweCzex{>NY*#=AQya5a$tzAcNhF3s?2zs z%)TY@zuI3bt+mD)xbBF$V&n0=2iSs>JoYVw*m+H zWrrgT6y#2i(x;~YS*?N+{*%knM%tLu*L(s^O52&@Q_4Ww!59AknnNe4gK}=D-#P$Y zF2zYa!#YG*jol7z8!CWux6XqJLj>IZ`_`-zPYJbkHwsxOjmp(*ggbgeo3*>e0Wbti zLshmn8MlT!4~Z91*tvaI>4_(WRJ1#;wdXq=`Jp>J4hbX!_53e9XVN5ytvYUJ;~ zA^671Tu>uvfhXa`pTpZ{CHzwn2w_!_6TUNX0TT8H!~QwE4jA{phI~xzE^j%H#r#Q$ z59*W;%xgADUrsghx5~aFeYiIOs!9v=^W@|iYxrTg_$SF5o<=JV9r}6lHFTIYEc09X zZMER%Syxy?@hfM`WjlF{Ul*1f3i^GM)&ASBdbPnLyxSt5qX5^h#KVX2_SKb5SIHrk z0YbI!UT@LGTPRe*W)l2)(j7skdSxVHWRZUA4yz3|xP|+aP$~!2{ipJ26CnYsxv2R5 za$Gua9xvmI<{;%`g&!DNvQ7iYlKwFMzF?or8m(C6Z)Ru6!Y`L5A| zu+*|95m}(9-Yjv~9QVz4LE1xM@t+ew&cF{2{0tZ34fP?o zL8@vMtF1UNAQ#tH#y1;VL=z&`8y}AP?#>R}GJlbLJNG;W1Wc%-;oE>`Po&;V_>R?B zE^;({PsVqIgD}>g1BTzA=PLss>gU0a_J@aMW{^?ySTedCVUuw;!PzlDo{-2N?=}8K z)z8K1w-<6VN%)V2?kLFvOjHQ?0w+Uo&TMh~FKQoxdjyy8jmw$&o_s%q)Fw(c^6`He z*`!IKKc9afRytM>!20)r@+leG>#m;yu2}#*mF36ikDD#pP|v=jKLa)v3yO%%5N&A4 zh>7w2i*PwF=se|r9Naa3V4uW3Keprl0L9OT@%@^x26G>c*6m5)Lm~KY+=t?FkrODb z!NH0AeWoBk0?#GaSu+GeMnPo(`CtS^@6WN#A&)U_eFcHbL{Re%L~ZasLt3YDv;Bcn z*HaQ{1_>u|kXo`q$d|O&3zbU+_&j{OWTH`khZb(0c_$e+$6Y&I1QMSqc3Ti&k&&Jc zX!^2lK6p7VsJQzy64h4O2GtyLc#yj4nnMWV%{G#WLAem`8RSW=t^WYQ#2KN49DIQe zR3g(gnRaB@1B3i))jCWy?JmK&*v~9YFENV%?(X3gH!uT?vQ%;N5o=S1fG6|)uRY*i zxR5_qx$u^vUPQfJSuWy8fInId$Z=PcXn{u4a)*v|fkfs+LxhLN(yz<-EW6{0a(|U| z6FxR$lQRr)&&CW`MwN2$-xMB_U?+!|`0jWlxcQHZ;MNV`Iq^RnJaTVHhl}|5{W~9z zf$`3Ah%+EX{{S2XFdft^D|EB-2LiLn9~{F>M?Z)TkQ^Odzg|`GnP(w9+gM4jkNsUkhB5VKV(CN%*AsS@u`VM^uoXGkx(B(3_dbr<2Bh zIGI)oCjF1>lC=9dWJ#I`XwN3Ak)DoEA$ zD84@tgKOCUVumJp`$Qj%19tLvh%Tk$%CDAL)mwysc zt%t)LIE=C+5x{|-$EA?~J{T`P-b^e6o<00tKWRTZmRRI!;H=>$!v3$nCy8Xw<-Aiu zB|*C?BQGTSZW0U*B|t3LOG$regsNZ)ebc$B%=;?m+v*I+p)arPM1hXWSz zYkzKD7nZV7=9y5e3tK1}v6(0Skq{$wRi_<+Cv#FXGzNY`V;t#yvTo$Zay6I0}v*1$Hb^>2o9zZFW?V6f3Y8d@EDST zESdI)!UOMzQJE*J;e^v|uUVp=YfWFc|U-4vc6XT9K_`=5m ze!g%>_`=5}oCtHz#`4}AWaMMXZO~8FsYf=dy zS#$D;vgQstgCh=^ba!_vA>#E=wS580l=|pefKCJLtBHISJt7$zv>K`mSDkpYb>AI< z9mz!IrrYsJ=t7g*;`AEnAeDHZIL71Su=~yghasa+j4<5M6ocV``7DEvmOeKDv-7R& z73m<8A5kQS!}xZz%#DIzdHA%d%5bsE0g`4{{y;_{7i-HsL&4u1G;;bA!5_vek}`14 zmlWE%k0R=37M&2VKkO_9c+e&}Y(`?nU~}C}6bTpHwsA17uhQNFYb9UGluWm2o=LUrSXXjs{5`2^&t_7FVsRq#3Eh zl1X7bAl-Y2-UO_OxlH65`n$*K1-v4k4q;54C@r{&oC_cdOa^$UfSuaEi`JF+SJ}H1C|DBLA5ZJM~9`bi(Z3SRfV--{^?b^Z{fL6U|Mj5 zvNh%n_G*=qbyCFsSO}WJJpM(vg;9F==g3%$kK&)?0stlQXoG`Y2A-f3ezeR_;m|0< zE{H{|_-?FFKFooYW8yHOVxLfWFGQ5`0GIn&s@RrIs*z$DiTsPW2$TD2+|DJFUx%o? zuz!g0ms65FKAHN)JskDmdYqvZXeas>{v+jjX&r*gfkERwGp;NZ=9K3l@aV@4&Sd-p z<2tfo41FeV`2Mj@S2@I*pN~b3LU~sPK{z;Y1g|2~>xj)Na)_$b@z3BNjPm~G#RgQe z6VXITFSg^mKO7S=0Uy6V;+a-Q0d;Sp&2dN=ANZIl#o8U7JK|E) zK({d{Jb%Sy==xH84~NKDGR(L(!9R2227gn))%AUapP0r`~H^rHKVhZ0{|YT1ps{bm-2bQ zaskU|Kp)$1CS5pc$;HHc#Io}ha{4DikXfIMKyw@q*$_{aV1ujk%%DsE08hs=alrVw zNVAS%_zLnSUuXFmS^l{K@p7;Iavz2v!2t3MV6&j8{B~oX z=mYV)Nc!@iItv0{4-RHYpvaN&OwN5i%XmNHDK{y2wX7L_A17dsb3@GPq@4m>0Mx+2 zSmYfgF!YPbTu>)#TW$^5RnC`T&0tAjlF#1U#SZMkUku z+m;I&=5xYMsmC+&F&wjEg?|YWA(v}Bs{?6dK;J1Z{I;p%4HLNfMWg4gp7QDXZaTy0 zvY}a*KpM$sz*=bG+kj~+#z+9+rB`<*cSx71YZErGgNOEjah6YYWy!rjxM%6Wa?3*~ zT1}&rWrEpR`E`N$ka#6arhm4cG2B1WT;D!T$}Ci3+S6vUS}l{PTDJRZOI$o$$!BU* zYXx7l!~B zXb|I*AX{<+)LAb9j0;?D_|~}S0Qx+JB)LJX{2j*!@wj%lB)Qo&QKiJpQq@L7&)a};!M|LcCuxAbn7Vig0lPnLHUtcA4m=dbCi0|)!;aQm}E`_rz6QZ0mPCM`%Pbd2Aj3O zW<};;%dyg6UNcXQz&xlyIoC?mk^O!@w*LUOG8kSNAWJ{`{gNdD!IuFs4O$gKsx@#K zWkBQzRm`&j9sr!Aa^?LP8bovA*5u34$p%JsixM0Oxd|MWJP(V!nstqtV3+0UP4)aA zTXM7lPbARGs`&cF%_F1fr>S58Gm&7W)iJ<4=lruf62idF1T9+|fyW==D^$GxgB;$h z_7Q?ZAY#K$9v@yI3!jnk5o?*37?uDqIS>9`d8U1(?E>U+8#2|AhFZDDw8!mwOF(QE@S$QMy$5YrLikG_^E z<&Lbdoq;12aLKngSggdu#A}dP!<^ne9Q0(wM0tzNpK1eE2z@M(kpp-aM88JXa3kw@ z@MPw{DhJl^<{|`@=lhg-&lkx*(EyowRA?@r>EzTSxAMmz@D}r67%P&vxY!F5Zc=eE zR5bXfEkmz&;Gh5(0~EftnDPoZlX8<43OX>7&VMf@UvmY&$Q=;W+=vsfM8xChNk_m{ zC@ZyWllxxKS572QE63vz2|2@)250d8u3S)>6@vl(1%ks^{RiKO#!LSI#c?y1l?VtI znU@&KS;L=g%JFov zjWHKj@hZcQH5_SSn76o2g-^f->-lY@dk3GhTZj)&o4Y}sX*=}K)45$omxi_j7*$BL z0keXIff)vFH zG`lHKuC-vrI^Cum1&|+I2wdzQN-sYN-bd6;6MXJpCXpn`1@^87$P0&3e{bqY3fd-b)#OL}!z2N! z3LGg(g1|Mo6X0|JD-m*ee~=!2+{UboTluC3G*ns66hE~P^5E`XGgdHUzv>&1nfJi;#Int2z8g{*<{83;w3| zjwkI}vy=Q%2e0Ex3+uzqoYiX-Ic+bT=*A9dOjJl>ayco?$tmN^xf_gS1Alr{e7|ZC z=0;oywayk6S31NOt6-lmW9!C8jI;eYc+G0s_Mfh=H88oX5XlgS?C*#^lzho6Pg;}` zWPBNN3@&_e<05lRc^K!(P~>q~@Fcn;9vxqpW_5RmHF5K&D&@(hUIIa(#Lw%%l5@d< zf#b~UqDsuM#Jo2I>)=Dr&tU=y4mtC(db>#f0G~g^`sPG9@oGSxG8}SCO3SoEWAlO9j`+d_8aAObq^K0hbS;!THw1 zKdwL8$!;boAN?8e_f=DV&xeT7N(=r+pMj#RSX>>}IMD_c*8PyU^oer$HirpSr>RL( z(NPDIh4Y`$fEb}TqH^Y;GE7OGBA{uCwNKuA+cedx=Q&8f=K!O?uTtRQ@{ou2>oW0BK~rKUG1@#|k9i4?k0p8gh)5 zNE%=Qxo{ZZCz33se~Fre+E4%oGyYVx#X+dRh=p>a>;MEr$N+k~NIW#GutsITaVktW z7y68<9Fd3QOpwilOfF)`6Uj{eKJ)Z60XqT8tVu%qa0SnQ@wDA7TN+h^cDLh{Hqc+F zDf3674SH&=`tjqKHO@q>$YpBJ$0Tj7>iWS^qC2fd^7Cg?3 z7j-yKQAPg% zZh!6MQ(yyPz?33O zaTyTs;r5)6wTj7=+T5N$g#Ii;2Pqd!T#j@U$NBxa?!r%&NU%73g!$5|SCV2EA&GGZ zDQ?#j2u{?_-fTiSq`kpoDxk^YlT4Gynv$R<@ho5`12SnC)hiRoJByxu`NOl3nFRcc z^F9U{V_npTefS3EpVzP)&cvl^{CTu?CZhrlISlQxIpWmk7>(daDiV1hpBZxqG9Q<( zfmrhXqII)_1UZ410HL4h{h>LQ1Wb7Nasy1WkF|KT;Z+fd@&iiC1D-kaF%L)mUw$S` zH2$$TkCp3|A7l#0JO&3MJo%TRo^3EJi3GX&KHtc*1_8yN%zX7-z&IZtF|Gms0CsZ_ zUP;83Cy1W4B(ne!SAna*;7pT)@MV~D`48FR1%m{{Irw^?VSh$K1C3fR3IIIw4Ql@X z02BJ~(6MLY1H@%9S@iwn7YogS$Bzs-z`E0je!R#m_%t!~;=!TF+#g`RWhpXbk(%ef z3&=D>m#z@wk5dB&tw-488b%q{Wb?-&W->`= zInV;q=i((Y##_j_<6nhmpCcg3M8AM9F)A`-1{g013+5cWLMJvi=+)<`IJ}RSj6~&v z;2iv3XAU?_{9EgWc?N!&gAe1200+z`DlU29k;4(sJckBCKx;AqP=@kTonu}k?eWhR z)EP|#Ekz8d1&6H_sw`_w1_A)W$Hie)POQY78(kdf#77!|elJeo%1%KiDgOW+wuV$F z6(n6E&zD0Ghdmb-LhSxj?KN^vG^%6EZ(Y z*OsF{nO6e;05zyMc$hKL;K-K~)F6&iHs>B9C7MM0L&xgFJe)*cF?&^3BAs?9#Z#ka z+b}3OCR8buthN6Dg(uX+W0FWS@;{8LBiFJ6Y3^XHf_~hX72B(-fk(eFx{FaJDQHlY z`FG7^hEZ@`COrQDpXh{84y}za`Nzh|;*`;nY5amP?iU<|n36Gii-horMv$rRYpTXVNlFlc0>L16HN=k7{ zyl2loGNqL{ZF%xv)LlQ~f3`4izto?Po7?x7@qg-f#zgq2AJ1j_n+TX5yaa(isQXnt z#%%{2zdzNv;^!sk@?GYtrIRMvD=A<3t3&2LwGreQ{1|=ZnJ^3h{hbPY{{YFPct2$% zNixk~9&SE&t4M!}eXgtZ8{}Yr)>31}eyY?AZ?ib_gY{vJV6=4j``3Ku<27lUvT5d4 z{{ZTSnA{+(OK=+7^;?*|iE1L9Pn?X)=#%HjHd1JH-?%*RwA1>VxNY3nf|FvY%=Cqq0{&Su5&i>K^lEZSF3Wf6e#u z;vt)0d`st_EK2z~zFYdgYNY`%>TJKNc%m<+rGCQy091ZOl*~C9`Z4;MvT!Tb*2gD@ z^V9XnOGp4%`NmF0(=a)wZ_n;fCn2h94S%S*tCRkEjxQ1OEjyN)N{XJR~rx2z>s8RZi=v=9<(h$hc)IW^t z9;BPSphwF-C0|j6%UY4S)mDILP?8M%t3X_ojhG*m{HNn#4Guk*YhC(>@j!7B>w7~# zsvi}}nmM})m-P?gHTxJ-bC)jv0F2i0*)Ff4&H6ibMr+(8ymrsy@UJG_f(#(q=_jt^ z8vBC1+U0SWY!+nC+N%b!mpM+IGL1oaY#ieKwnJrks@_#Y@s?}D{As~P&2^1I36W96IwnG@XV(bfL|sXrP20P+lcXX4H`T6QDE&#$e^wt-h)?x41$RAU z(w!fwv()OckT9KpsK~bl#H0{u{Yjx10BnkCv-*##ZYVqk2q*nU__X;mcsTsW>Nb$u z%vJU>e4j;Bg-&(}km~vVol7Tsyu<$hR`uO@{{RDkRr8q|@-#}~D}GJD=#ixPldbs< zs&FMuI@CD%Flt#t*w?)|{Xm9>3z@3??)k~k@gYg0%|FUl^-;AX!k6X{(80;{&E>x; z*7x+OsBpjL@TPv8U6&mH06T(rfi9+!o%8Kh%lW74whxhM5B+un%NuPly;b`iX6?iq zEVeaPfG<t>b2)OKt#(MO`v5=2S^b!_0z^X74>jMZ zTh$TI-Sxw2wdC-nnKMtZuKBdPh6yIKw)!cq*1QNptr@htq-hU5I4c|t-^SxKdCV}fGzGvny;3lXTuW^Fn&SvM0{~| zasl=}Kl-O8)g0_srAPe27Oc&e7ZLfnfN)J6-a+z7e$|XP&DCuJOrd6+24B4Y0ASYe zdH(>*vK(`NS%H3{^*nGOo-h4Sl}rE_naBQq@&_GGRuqraP=w3AwLK{L?H6z;nY%UOtK6j`JT(4cN z#(sCHwsJ3B*z;ZTv?bW=oyrz`#7{SKFbVZvJPn3R3?Y?NeB)N5If{Z4qvcw?Wa8Hr zdaB;QNmXZG6u9xQTn}v>9x>RRKVl{#V3#4Mn!gBN{{U`YrnDuCGwf(^fT(^|^N2Kw zAc;w)xqg1jqB%__r%Ch8td0Y(9ljsxbwprBudol+g~*aqJ~>WHN&2U!-(gXcy;|A& zlcyU_WF8Kie^Ip4nwfw+9=r87TSgkJ&Y+;bP+2*;Z0kGxcj`B;x*yVlJ+JCk+KT6T zr-WLc)jhV$KDB!JjM?)ql+S3K5~PD4KKY);gZ6esFu&wj*30!hbY!RfNckqcNgzV0 zDL+$mN!9B%J1bI?v-M+5Q$1}oF0`}yhQI*s9<$T@pH;J2fH+o3sbT^~k7!(|#>4FD`BkQ5mu&e28_QJIwKW<=f2jMJ89akPaM^yLZ7Rtm>i|_7oyN9V znyTANbMl{)P{!5{EDn$LcXpXUX;CmG{a@J5=u$Z1EBQMA0J*o3U^DVgt+PAxk;-Lq!1`OqnwHcNd<->xWPLz=k z1ClxNb+GAoK>;xZkZS7LD;a29uS(AKPl#UIEUM5>p+uCl3(j zFWfJJg!_D3m>i`a=21u+%DQA z0L@|xY3z0(Dyb>NRK4K_L%yH^OX?>ZXFQLR?{-kt#yx|RX_ns9vN9x zn}IW{kQFp7gz^5RcD>W|bK%9U+b~yz{{Z-;Q#-#B__8WFM zRN@C)OsCCRSe{+<0K*H~bb}NXyuoxOD(B!rwK#!%#j-`V*Wj};0#mL!XK*^t+!=*V9y#cDuEz;i_Krg z;3O;6I&WF_VZ*mZ=z99n2iPuUyPlxEvX8I_E=M<%@?Gu-Y$X~+p^ z9|6B);+BWaD!G31+PrhD(0d)8T4(-I@t0+?2$N1~Xbv{}M!UI{_KNG+)%e#6Tu);G zobH7{EVfzJ(nvjc)BNEQYh_Tyhf>egcI+9fnL71^AG)B(T9H=}T<4N-&^QMMk|YzC zun;=FTNbg34|}`H{{T`Q$yn9v!KZh~Hyb*O+S$L3Sn2c9gL8b&<0VBC6{nHO-B19> zvf<^}+6xp1$lXQ~OdbT|R&`&8bv1Dq5t$|83duIqKbU_{c)CP(5KWAM9T%PzJLsjt z#!zW!8E4ER_bg|ygPJvWxq%yq1xQWG?OTBPuUh(X7E|;IIXWmI^>_{q0hNwIWxq-PwoNF+lwDoMICXCGDM@kv03*a+I@bw}UzVTsmJ;flaW6n>-4$yF zt-oruc{UC*LCfco;J#IIz<7%&aDXVs063#Rf7wP>tgV9PpsN$|yH_KGlR*gT@b>=z zHHq@Gfvob8=YwGa1kfb0hI&nA=MiC`mIDluoVm3cXc{^8%;lugiCF5_S!Xq<$FSMN z>Y{Tc-H!R?$R%V;sEn%FR@U&7!Pf2YVU|`nSFlqsfwdb;Q@c2DYK=SxYx27G7!!Xs zwbiW6KyvUjw8RLWW(U%fc{`sEC#{G706`gfUhbC?aCMlO?_QOC9tt=#N zB)AOO%N}=5Js>>%p*)RAK58I|GGJQ47WfO({V9%U4~jh@%f%!HG;EMgBRNFdR??~} z$e4Y#e;};PfuDS_@;v8=k$r;qyBA=BVa5d;SAxWH(P^TFH6+7pK)-csv;O6guGP2_ z3{i4r;9=H886L&E{{SRe9d%34))kE2%O)l|@Bk}_HD{YSuM$%F2p&~0kkr0G_? z%5)cKybM1bp)9o9C$f`{CYFU1ZSeRY?bsueys9mMmmX#-hMjHF77(KZuPJGmI4 zAl}p9oV}CfT{4?a%QqF7h9~G&CD|xcIjD>?AS(*1W6Rq#YntYX$@CMyscBLO7Gs9D zJV;1Nj3g2ZQ$$)%Vt=`IypB)Z9gcWu6&qcSK9k*1cV@S>XF8|sa%C>vqa>5GFyzXeRRZdh?41QTfpy>j#sil*v;C6yRL~HZJ#QteI{p6SmP&KZLCz*b4qrsi7zKvM?m}9 zmnWV(4C>r&Wx|eKP%LV@W$8*`4hDm($K?LdfJq8r+D0$u3C9pZ9(~+RJ`?j+BCUzSghYTZ7*;e zSWU_5zEcGAl(+ujcZ~f<*8V_oQrUm?s}jl~m;=7w)m9WrS`J(Tz9YGC7(R@E&+%zz za337JwoLf}ywteA9d@te&T$wDkHP-{l+oXxL=2Mar?nx`HfyTfH3j}6no{i$+?pv6 z2IcrR5?ZFP&q1^YyC`q??hLg&WR!^`BR-SGLe*O<#p0xCG6gMYPCY)RtfAG`)=+$p zkL|g1jp6`uCrPc5ba!n@r0+#ZX%G>3&FCs2j%t9-8@IJ{htj;N*lpxQObYPs+d))L z-qZKh>`k3`^-m7QyksB-RISdXl1rVPl5%dRc@DsomKosdl3KN*w3ABQRhc`&@-FE% zoN>y(!Pri;aB-)A&ghn`I>Z1qNQ(!BOf}`i%=#waaA5p(ad)L@BjbfRQ=bc3BiVxj za-7o|u3pKa2BK5HNOr6L0EU{nv!4X|r4aToIQ>?OV&9x>m}GuIT}lE&1z2@k7EZ7= z39-^=HQ-L85gn2j_8<-W9ED}ifO$d~)9ZKjfE!_~%eN&yE6TCUfjh$$pZ@?cM5eN! zY9~p5+X1Ct?gzz)3wSs<1}@i9=9>y~H8QqODE&*^OQ`5b{ecII*t07lX>}zz!B@pi z{27T$`M_ra52C7D>&hIl?^m8Q7t@zU1&+d4C`v=!?rG!ymP$ylVFX$Hv4!@Ow$ za4#|unw|d7*Fvm*YWg$|w0U6206nl&qaYhXPko+&p)@#rk@YHei%%_7>$S*_8ipj}xUjl7VX5OOhz>{%ZWeYV zJdi4G0Y9HP5r2BB0}wYkGqd|TvMY4|08Z(nkCi#_${5WC34!?6oeIC`h_b@Sq(n33 z#)E1oXc!U2(G){YTas*^z1b$=P2+^rZ~D*QguKIqxEc);*8`>RsKWsN095!XBnlKE zYGQ-5utu;1(UkuHr>^GU8#wta?l+SE02b#O=L-wAfLYYcry^Y1Y8z)Kw7BJMuPK&8 zXg30!q=9{+OvnVRsMK_~^TY>o+sUAj4QeOBpFT}<%om=|toR1EFMu>ySzE^k+FVmR z@Oa_W85P--!a~9lHgIn&haNzARz+A)a|g-)0Fz0Re{qsr{{ULJwf4{UKq6ja>kRw^ z+8F8e{>)d;6-&T{sq;y#e)oAia{gXRBJ`+C-NJc$mPf^8MqjB@zI}`}Ebt<_41X^d ze753&cp0~YHR~rhc$ziYu7y;8h~Vl<%O*kslZ5hE_k_nL@eE++0rHM_1zA%|wr1HP z{;Di??k`1PoZgTHV`Z(KX=-2nO!*XD;hzyv(QxNBmP7XG(U5Tm6=W27YgA#9SGwAj z^g@~3fd2rv#DwCJAimp#dD^m-CeSaSEG<9H0(l@uH#M}Ac;$GL`255Ut3k^3L^7rh z9LDl!3yw4!#|OJ z@hQL{LLHE~qxdwlYYsw5s8URU8xEsIq+TOWEy2|9=q%|q(yt0L<>MzoI&_6&)WoI? zwNsDcovJ^RaW|Chk+F~mFm3 zQ%^-<293=gjb3?QU{U80e*gmsXUH{oA}U` zW6V{DEW)D$73{S{f)8)4p|a0+04hyM*(B$qs5%E+_)Wo`&0RihwRK4HWPOI5>grJ# zsJdu#wb5sdf%M_|OoRPWYPe3lt3H~CaCGodRctfvO2vBVRmA(;@uh${Xs81%%l`l- zq>Jkru32ybVV5P<=H>^b$us*{qFKgeJ+4~P(JyagGX|-1!zc0|f*(OKreZ>?v97Hi z-z9Q9+}0VVi$`2myVs0NJF8!>I36ng*sbN0WKQkz>7tI>Oux2SUT9VsD*eye?YW2R zP+*nH?ouSUyiQ!Td=1D!R8Ce0{IJ5kDAZ+Ren4#+C^ z@d@x2gQrx5#h(Ib~CdRkHbP5T(Af{Dqq> zj_GI=soc?a(ne7+X~=>}Z>YZ9EodIQV(K{Yzp90;u%MLB_kEbgMUU};yACy?^$f3yES5wH%Gr z8JLqp2~15D@(!ac>at5UXRyk#*y@yYf=z`|@llg7VUztbixT`g6aK+92OR$Z2aaE? z%BEY;iq0?kPBw_3U+=9N1mKACdh z=`lXk>`r;})6Fi2O|F&0WhIvwe5+1O1@I#C8x%^u*8cz_PTSf>0x#sTqN1**w`6!d zSI6@`O#`jR<=U5U!nE>sxYM=NN-d{UH>5YZ*??Tp>8+6Mwg3l7vTr5$=DE-(l>EhL z`2PUM&8l?yZ;akaL8#TQF07s!L}VGub8YlX%4GM9n{CXiX`ZP#Qr}(!HeEj{*Q$8b z+_g<$B1|n=PRIU!2=37kRxEa+73b${a~4WI2#5>s+b zJM{hZEX;%hV?78WnYc1|9KP3bL&LYauncOss}LGc7^MI+0qei+nA+2#4pap;o>Mq_ zsu-TCZ1e=`FbPF{ zWJJ+7V-}>FWru|h9>`utGF&EmxP5`{pFC5xOS`&I#raa`m5wGKKMng@7#^%kB_~@~ zu59EO4Alcx-V>TjHDF~J#UImOU#u7p`*I(+bHwfDNJ|yN76;LvLy+TN0xacnfj1+c z7MGa!aN-N8iUykp0pbwy%UGYLiXpD1Wc!C66dKtNh;nvtjcoRpNRyS&BOJf>iU=TWPUEK zT!A{c65E=Yv%$TG#Yuedo^xGzAPVj}2}_jnm#!F|<3NZuy6uqF?W^&Nb0ImduvR1c z!qh;+B>{jtW-driK782e0!4x2`JT8ys4!3v58czw3P0sK-IZ0&2y>4TGC~PwIjTnp zCkk+rnZ3Ek(6Ggg?QV1xRBfn0@uzjl_AYvIK+=48hn4)n8n5P&A41rm4GRT~uopiih z3n7NpNTjUrX_rifyZ!LI-Wumi>k%uKWO|q(gsUEPNgyQsj{g8Xbv1pi43W-+OIVY& z>OVhiTWcaTkPG!eLAI73;rlflClt8I16OgIzabK5?vX#3w9L`J*$ar(DG{abtN})@ zGv7KVVFH_uZ+=xMHv`1KOr@7oqAb{=JhI%H4ChdSzf&h$zA!AY-`WeJd0UTD6#1^G z?O^@}iV>BHO5ytxw;I>qAJIqiBg6DvO}peQt9AlR#|0oU%!R z4D1AKxAUc=g(TBH(o3Qcu5dchsnOMjfDwtac~{L)YIZ81Ng@s` zE_ia|dyllPOr0j-51@-RqKolRcB(5$Z$=yBs7AFEIh@a** zZ06p>Z&a7P*asv)!YiPvqBEc9?%3${tZ9s`Y0JDpnYpmFQ{*+x$#Y7um+MYT{{XL?Wpwa;9r?r6bFBE0R%HvG&zCG@ZZJ${*4iEJ04-D3s;mt7D9kU+%k4xV#ntS#3-(+M;OI701mWEL zI3l-GIXHQRZePjhjKR`(4F3QbL8viN2RuWusueaEg-xGH$0~Nkpa6(;(PkC|mP+eZ< zYMq@V^Mjg{J0~o=8t4}R00M2~S}ZeNc_>`M@IxD&T!we*KFA(BF zy|U=V6PXZ)!~XzH5%P>|9vciGN#K>LMMi1J=L$gdsJZ^DNf+&8cZN#60pd!i!_q+1 zBpZgC6~(x+LAso*vcYw)7Aqw=sBy7%OK)r(bJ>!|QOlAoXyM|}BL4s!&yB4-@#zF2 zslzT%xLKqr-!a>;e86!7g9EtGbMD2SGwiDTOzwRm!8 zo;i+PTr@nHLT@3>$<9@Vj!W#HQY6Xu2NQhjID7G&1nW!Ys8sub12XDICe!%@K)U6q z*6uBoGo-*X_WuCgN8faqQ@|4LZ;w0k+U0y&YoDrF2tbwCOygYmvv_GnFIqjDr zBDyK(OEx2}kUHEgq?w(AI;n|4Lf*0_&737P9aWUPTt7ptN2$v`#yyX$VRSjb1LCU9 zOyHmH8Ra=%*K>M}XMIg=N%quKNmQ93PSt5N?skQT23#c9ZsAUQ4uWANf!9N+ad>+K zoRLi-WrEI<>O4E_TCS|Lu|Weuit80%Bm=E;@>_eFzSE0T3!oSa6GqAgtwS`#9xh38 zgB#u4(?oNoex6`Cp~M1^pxfj@)M8~K56hs>wA3=ucw9^UwMt*nco$xi4hBc#FWOQd z{BbomWqCLWUd*bbJLJ;49qg+usDHe^68P0mmCDwCJvG%ayi9fPNN3*7*u(qgIAeBI-Z4d zJcCnwj)00e8{38~6kW~gyD-tUNxdIUqFo{+?F!^mjhRTkOk_YXY%^M3o(4~K+a?i@ z6Pz^QCP6@v3$)YpaWwMqbc{9h4;)WF!<^!4T}T44`*yc7`nuczBRufqw_oAZut@X< z0Eqe2WCTJhUVSGu?awJ#;Bkqof#5i?&Bp+CZo_fhO%ZZgMRH%;I(uqhCxm!!-;v>d zx8Qu0K;XcG`QjSf2L!klMOLb+3=fb3a7>pZyb$DN*;J-W+*oL3tZoRgD0mj+vPNpb zc(d(MF-abERe3Y%F)sqgt+@u&KTW6+N9EcW@^=Ll4DK@GYXSBEXW%a!C<)UTmy9Pg zT;+1*5-}z@Fg)u-u1P*Z5w;qnz&OZ3OS}QyYJ(0|$JA2OB!$R6ISOiubbBlba+_KT z#s~>ttCbxRLyQwjd45G$fB4e?UgJ{a2W3LT*!-$`0k~YDnO4Sbux*Y&8ML(?s(L$` z-a)pK?3-IW)Oq`ky62ragc;_02B@VPF^?Vbwss3r9RTfYRph|v$0tF!q3u!2fSoCF zP@-g@L<^y)HU(`WL-8&^>7R`tzT=^!m9b9OTHYtbh$PZ2AWss*2OCvUK@`*R&B+{O zd7tL!PSvzKh?IwB7Ig}Um3IFCRxG7&Q7Co$Q{W8(1*-3q_pHuUXP3t$qc5u6s&SmA zt+A!RfKQCo5gAe~=rwISP%lKEkEjj6=hv7T*)gx3MNsD_w7X|$t^X`}Aw*yo@t~l57thIGN8hm*F0MsYT zCrhJ+>>Na?f<(;UOXB^hW46a$G8%K6 zz>61Vr)@_IBnGZ3m5{qD3qDQpDdKnSM9kNh?|w&6HjwI8i$!X(ZrJV$eebGucsHkPkb{>EEp0av2EtskcTOl3p~LR3sl_trR} z&7Uq*n{Bg=L6s&?mt zS8Vm+Qd}O`uSxaIQ#%c9)9qZAfwwB3SMo6Ra~0{yiZ&>AxKAVbZIL}%+05bO+Wm2N zNHqLt%SI$Xj~_9YPPFvSk*3_ma?UoA65R&(Z}F)?aBLK*B62R4cc6S)(>^&0zqj?5 zurv}DEn0&N-~yEJ$>(h7a3qxNwC9Hvn`?UR1xt2Q$_gz}$aBom%UloQr#ouwz+6T&E9`f%X?oxTG?ak%0}Sl{;0J zEk{FBPk@`!Br1^bTHUL}T6%^aZ2V4LZU8W*yN{Os+9x0`rDQA71sMa1 z;2>tVb_q}i8dZ;u)EwC9Nr3NjDjz)0gr18gy1hPB+E7YE+~e zx>$pY)z~_}Qrsf)$y1tpQx2^Xy(b}OK0f$@rtU~L zTUHWhv&`%R_JiBFschh)aIvzkP6B1JAWt7$7uU3&)`AFxAB^94dK4OL&=NEGT zVLId~i26u+HGPmV_;I^pDPi??_U3>U{{ZqEpB(z_U^u$f0p z7E|}0zpQ%hz#G(LIN)dX%!D|MhGOATe-W>-R1hS5os3s-7d^5^66l$m6B@>=p-rfnTbU_jIk1pfdB^_vB=87OX?4QU5|QmSLbC0I9#LkTeA zbP3YLNebP=`6`gk=|Mlq{ALzvbn1_0lL6N3U_^*<(bRvaNv+zoX7c-JXw2}_5DW{o zaY;f!ZvrRiQ?E%HY9gF9Ce_H103~0ibewa|MpNmK+4$Cz8YBRUaDrj_1J#_=HmoZR zEp?PP1ZPou7_{oo_{#cn4=LoMuL>Qdu}B1Js9M$B`8YJ{<~vQwOEhB*@+V?la9>De zq`j`-Ry>JbxL@CBrH>T{?o-c$!e`*q!!1wSCo~eyfms5J@mOq23JPMvRDTxG)mvPD z+v7el5B~s-lyaza8bWaZP5^hJgRjzOXsKr`pp?L#MeiqMwQH`BP1F2&5iWepXyJ`h zK8x0F8hK%w=b7{N;OeV^oXTERUiL{g88?~W6Y~sEuyYAHp5KwgS0^$OmaA{sS8+9b zUfF&>vaJcGl?tfFjJ4~P@1ZXfIY_EyJW@7R4yjJ6q^^CI<2L2XnZ_w(Ea2$WBq~Jt z>+Vd3uOLNAohN+xTA3sE%&%G-G@?kpKk>b81C0)(jvXZOo=&0=4bHZFiE3f&r3YQL zbJ;ft7w&XZ)byKj)1&3o^AyG-+V7L^-1lOXsZGA!&iM+0ovAKG{CDKd!;bmQQvrdy)^E{EuR@Yv2C8D>hI!0}&p9fX|aq;;;YWC~n z;x#gY$mFP4sc2l1m?ff_!{pY33l258DB9!_0uvV&9P}-%Z`hmf1p{&H78@2dLjluO z!@+xrNh(yE9?XXFRXh|Ow4JBBl_DtE2nAa$jOxm*fV1Q`LTkgs^Mj(<2OQ3GrxUafQG;j&2Autl5Kd{ReZUrw<@MR~~DE7;O zF(-Rj)EzZzXKq!Q%n{|WK3IjPugTAeUpbM@{S98IcLsKBsu7`I7}KXIGm8vV`fVJU z15}2;0T5IQ1FT84Y-MuV2mOZk=A^1(F;y?q&F`2s*&t*tQ8v9+$)uEScY}cDBC)q~ zd0-ME)*ofnU>1q|1a8x9Ni_mW8EV&=9pbL5^UjIdrFT2`{dUa~o68c{fL{jX`)0*E zHM;9o<4cPHolH`Ny)udT%``1O=&r&+j1B`d&j2Y6>cAjO3WJdwCzdiDmIN%GQ(cz{ z0BmIm$q^PCJ-01Bs@hAWlF9*cBnn|sw^Jt!iH#yPYRLr8M=cn(TWgM}HMzot5S)mq zHf>18-nRbUanN}*8@`hE%k)m4BeD+Nfrp5}sr=;acZ3vMhZ+@zQvU#IOoH9`4SyWG zDkD0N!`5UZ09@kG{{W7m$*G=?BFXHh;)ZHwN=4r$dwpqTE@;;5ODbi7$w8*pebCm< zd{+bLk+jANNdCqN$vb04NLMVR!}Xyi6q%SZ0O7`Q{!>%_Cs+#B;ba+Y*jJf*0+I)g zX-ES)PGyRQj<>cFBe_JQd4f2BH_N^&be*X&sk7pCq^N{nvbxhbG=l1f7E4%yP{N@OT&VwtL$+K zgwn?T5;!uX%I>lQtwbQ4GzqK$2D2+dd2$}sU>%wN0I6o`nNv)SqV`op<9s5&ndwfH8}e;ut9ATZ_|75mI<4)&))u}aZwo|&rJ$5RzwD(pvpw3$S7;2chTp7 zoog;VKX?{8kb0gb9v0OtG|qGePrjGnKO)FN>F3G)jxyD(=U``$Fljb9!#KAbV#3mu z13w{lSv%d5KFqsfWNpG_$xxkP8&JlrSZ-#Q)`U;0&$&;Du=YdTb8oPaaSb2>MY81dz# ztf_6V8XwhZ#IE;A}?M6hBWs z;av2-cILIog36Q<0E6`Uxy?)$=f%k_1niucN#7CF?)3qRU}!aU`@hsdt)F3*(ukO} zr5gFbn=$h$lT%+sHa8*RvgZE)@YI!*v2IHQVSzEq89i+P5b?9_!qZYy&0iut-EW=2 zsZ637_kewoJU3$#Ct{Qd5eYDfD3R^_itV>_vKR_pRD7>Ypfw~Z&yGg%(03-av>&zk zOL>cUDD?HCv(>p@l^+fYo+6prlSjkn(}>fzaMGH0Gs%t+$;32!6zspHDaf=nQ8zRz zJ16@n4^mJ995%h?r&=rJvedL*I+V!^1kwkTH%jnpG+rl7d)W#kZ_}$lsY-OmoqQw2< zkVtW6IOO}PN{JbsR!ZiWQ=4>hZH%4xnN_ON63${Io0$ogMu@1DVD=oDNQ!|bpHMKN zHkWLyiis-|tH(jB*#{-orBObf;0u((N3U1Ma*&?&*1&4^J4mrmFg(`&)_fc7w0qIT)E%OmQ_@QRrC2BQpczY@%bM$o7ZS;8@`OeUS zbjvviC-=t8C$Z$zr(-F|OaMMM=eD|?+V{39m-YG8k7n3(#^mAhx3}Qh-6p@|sgqGb z(xEkuM1Zl9{Ye+Q=XHQQdbTw!R{|B0%9hC!Dw5=|_Ac*Lz)ns&a}{wh#9#oVI||8k z`7E$KF39rn_{>#un0bv(F>}bs@#d+} zOT(GB1bB-oK7PW8D8;)sj2%D|&8;~WW7=2?@QAgF^dt{w2D|5M&IVFZYP93r>a$3k zsYHNcsW9&shc%v=z@uxmbx%Opn|e+4>vd9+65$FHxuQWZAyKI7M>F>UqdVQ1_U)i8;c$ru?f%5$IiQeneEPiX*> z*b|Rhr|fO}TuKv)Vd4+k#yl2>A?b~PskEkNcs6dD{q35)fV8DoTpOt;f@+!>4ivbN)HO`0c zAy`ltp+P28#MS5M{!-&KV{AN2V7 z^zNtXWctO4BE$P}{*|E$%UrbyjQ;?48jM4z9!_crJdH|wZk>uYaA%o!C1Iv#$J&vp zC1lKeiHManU_UZNs~VJsaspntdE(d4&8UGC4O7x4;6O#w>|nEk0$XJVJcv$wU`egP zu$l!y#-nnTl~878Ub?@kWZhj{**{q>DFSwtAQ(0>f@8u74>Ux}whZg_2u$--DFbvx zpAC$uf7JXh38QH^5s3#9I_6Di-qNNbJb5 z?$!%1n}$a#byKMgDao(S$w$Y(2ja{m`hLP3dk9RedV(nj6lC6}iwRuIZN1jH<|3m5 z$H*YMR){3<)z0+Rr!#<;#CJaYscuM?3S-@lNdN-6OGHOse*& z6qk)Y`i+QDu5y<@bLB3}YfQAM;W4yVL=sSABc*|i>rG|TLg?`e`&xPc`_a+rHLmx7n1s+x~w9RihV zzk8A3lGtG431m`44I*hwC^fZnYXluGsp{q5w!j7Ysi?sHyO){ON|%Q!l0JUnUbaiB+usi+_Am2a#dSe8XnWyvIN@28nZESC^lG>WR0rM6pOL`PqzT%>Lq@0Dv|L)R=k-7fFqI|&jE`b`@htmwf;Ez7*l?gD-de^^sKSu1l!NYa!4 z0GMoBQkJ7@15K#fZ2N%AJhSm#Jn|H-l9yQqWz&a5T1=CUjL}g?dt8>BI^wLOI*CS! zV!~3*c#;~m?ela~_R9AI?TLDc&<$jsjC_@_tvj(@JUXwxM(Ox~+#a z3{K;p+MCtuPzW1jq4_rxM2bx|s0~=L%pu0Q0n1DrM%|{xV6k8*xXp%I&JacPXlGM{ zoKu0G)!CIO=~D>kV`Rq(gb!$RQ114K17zL3PAL0u1>OK+4|YiQH>JAgC##C3W8~D% zhPXJ@q?Sa^DpBfyQ%!--bhbG{0)Mv#-fo%(S zHvswZP((i*)~0Jms2P^9xDeofQm=S?(`INK;>Y>yHg`PNV~0dk&mzg{vrgB(vSSpjm-?}F=}q%bNjSFmKcCIpvH7WFAxRk5F- zb8O~qr8G=_XJd0xX*m>0irlO6Ns@d8n_ZVW?2Ox8iuR^UGXfYVcBZ0Ezo(SxTC!#e z%9I*+(S+j>8;LH-RHSPag!sIgm_RBZYVFnf6%`h|TJ5s}Mx>E*h3O zb4{n0f>v>jzlqjqPjU}FPqKSTwbv$cSX{NGrbMxJ!+C7F>A?ve=p^55oiA0Q>UO9t zY6d!MGNMgw;&!G15d^_Pf?T_ZDyo?$2Pdub>AptGj*P7#?CjfB5{+K$WDu>JRUQ${ z8l84WAmC^Lnljgd)|VHH4z35(%qa5^EQ}&9Y`Rq>l34svvrnw4fyaX*ykFF92Lm=I zIZgx#aGuu!o>YKwN6G3;TuV+}FRNqyuPuVpG-#ux%r$UsQ$*lGW~3|j)z04K3!b3X z<6(g^}gVJX0-yoGr5M~*L^b|dmvb% zT$V_w*(eVfK&`anU;&Bhwv1PqHTX3UUsclQEl5n5cB!?+XBm}Ubs_2mtCZig#%9sE zRrAm7DwJi-9ZG*iL^273Mf&V@fHgtnD8&=LV^H+IpWEv(V!8Q@%dmU%lQ0zDFL>oq zatNTHFg1a71K@B@YjAxlFgc<>=NJ`{EgrD5cp|kZx)6>@3(O$?^@$_^ zZ9Ys2n!;G}C1oI-sUYzoVjr*OJveWhU8TDt^^{#|n^id{{;p^7RkBZ!L53(;bJy%H ze54PKSAfZ7+#BcWXLtO8I7y1UpDe2alB4V>&aMo%zhK<>y8Z0oFsRrv;pV|vtE?BX zdYlQarKE1$L#;O9$rhc?W7e-xUxd1;Q}Nm9Es>7GOhQt%6&`(nLIU>pTGF1Z0La`A z*hM22QkoHO^vehyIR?N?Hk2-Qe?(l#6=BgIvH}N~9dPEAiQ~y9qv=8)=wbnZC4>Ae zjU9;zgv5QU_lN+G9OJapj@%LFtZ<=cFJWmm{{WVJNluFP=2uU{2|G%P8<6_N2}7#I z6*x@Qj5)vDW6d*$=76gSP5|Wf4;zLtUl}iEg6zkevKPdE!P7+vtpR-l3 z`0T-1Dc)QNMheEX=1=OwuphBpt|jEVyrk3|ivuND8AhhGfven3Qio)?>gTN#b4*P# z#*_CvV8`#8!o4ix&7fnAT`IJ@nl^d$n6ey%MIiL5Lpen`ZPSHlPvgLl>e{-2YFPN} z;(jfXk7dc=`2~NHyj?8+B=Dqz6C^#U>8YtIF|E}C`suA_O;u}W zSeYagHS2HaH^W1eQfsz?x$~MTuFk zs1gbg9e2l9tZ}xUr#TBm>5z6d{gM*x!Quj{@NAyZMNN8_@NFyxO?z0+HCosel8;$7KBo=DIH4cxbU%BuT|pka zP}DCl-zC-V0kUn9&8~KI%rUeteRN1Cmhh!E@%svWclj>|B-5Xf#WQ8r>wUR@aoY*G z{{SDWEar766Dsx1gj0h{0h%p6OHty530DrrQx!pw>JMr~wN_9K8+FUu7%)-*ulU>k zs+wu>g;lGsPV|(<$50R}lsGJVRPJ~2iJOaA}@@=yvTBiR9nD=$_@>PqB1vMSOZ;5VD) zqE(j)zLak>j8p}HD!|%qQud}ZGvdg~96~Pk7y%^jOG|M>BDmgX!>r}k1n*+FEnq#MMZhky@re&;$3tPm$K!0`{QJ3?H5fty?+%zjy3 zisl#hK4#B6zfJaB;7(DaI4V%aFrVpoetGWtuj>;`7I28vTpwoL+Ku zQ5>;zQ2#h`&8X&pTgr)MkVns<>8u z$%*+yyfY(GTNc+0Ez*0OkF}kCt0>SfoUd(jM7o|ZatqLB-MMXsmw0JuRC0(cDSC&ak1J$w{g4sZ`nK5H(W+O zOI=mu`cWfFC}yxw53y&tw2U5qd{?BUGNkfr$0PsVf55-eZ+urwotka;y!GsMS78#CJu8 z{(s##In{D6unlp#MaB!L54QfG#Fl0=;P)I~)W;m)6o zpJwY-u+CHK@Nu))!bzY5;_t2?eiJ&gnxLY8?lkZ)+TiEpTHc~!^3dS$0i$I-dd+n0 zNHxl$vuYHHXKe08_Q^ox$X+n~o}jD}`3W;GafME5>J<~}h>}0%{sFRGL-)wO(!IrO zQy4gAE@XIfaN z1BhE*;vrywCB$;C)2!zG%LwIJ9MJe zofsui1c5Ot_l{*F>j^;y7%70y@mSX_0cRmIR~1T zpsG_G(c`XuHm7Q_UPr-PGoSweXSsAeKxSjh!LM`jT(#1xD!77x*vF-<%s4=$f)|!G&1XWukr!mjl=e64q8ztaX zvkqHu#^)zJK@fkK)i7Ah20QUbXqmHMfoIZ1M)pg{4XtQN@<-7rCnU8iW4Vw34Ft}A zAKOw)H#|wDovb^F!R@JDK?a{-`kRPSuPXS=8mIGJcnR06*3VHlUA{=FyucWg+IS}0 zy+coq2RNS}AblK?TLq}I@(t)ek}aDmt7E2f6n?sTXV(j|b|P^~aP)v+?=PdR`lhhk zlFN#X<;{SlMyR74GvpHKjAqIfOQN|@rPC{!;vD9HbZhvBpn}C7+D*l=*4rbKPO4MF znLhS_Pjmi*_a%}BG>Cx>+nGSp>cq!njkRD&10YN~amE^?LO2=zF}OM>%96AV9{|?Q z1=~|I=6)ACUM8uUxuy7^tC(bS(mLI4vj(hBAS zj&@tQ)*MASRa=}Z6{@Xz+vE1fFHNw>ZJitDHzP~+{{Z8E$@Fz#Q|t5$`PA(5hQLf& zgfCS9Y}_%yR<~AFgGQH3FSRb9RW{|QY);!w+@Ip$ujMhR{9QPQnBGh)I?|wOft#B} zy-E;F@m$~N_OibggbzHOqn{lN<({&YMww!tt-nyED$XV)nHs)>5kXQ3D`@0u)nztA3f(vXU#oc~s+fv)o||(M%)>p!5HC0;Ttu_Q8r?oQ z>zm(~?G9E2GR#l$JH3v!IoG?ss2g}WC zlU6?6{SGL0zhi(%5@-zjeAy0p-iv5u00n~-VcM*p+D9WTUz%D#CF0j~EIZI#mDUb# zvXMP|0`KX}%?B&jfBjoSCQ$Zd>p(1Gf~fr_b2u?1_Ps3n`Db(gfO-|l)HG*Q?kgOp% zgxqZc$Hl7y{H;iruI*FF=G45Gx<6m@Qi6Ije_nDU%fo4CrZ);>^G81JxTyq{EkFqK+6d7 zz3E$mN_DPj+oaoV(xY_}ugQKk?rP0@4l3CWjX^d-NxGJQ9iigp&Om!7{C-0u>YGDG z>xo8Q&7&~k_#7LPFW~L#%5qyr?Zv8kLU*k^{FiEOm8o?c$!lSPn@+z7CN5XyRRmdK z&g7cR5^7mjtwiBF1E|VrB~1a;-p6BOk$keae*9o1L6(JJLo76NQ_*R;S#Z>9UjfNJ zy>zA^{2l@0g^&e%cR!X!wm`rHq>qyLzb$%du57KjQMu=x016_ED*^` zfivaRoE|Uq(U*FZXzNnJ$!}E9DX4JVMIDPA@!gz|3KC)$$4=KU;<}uh(qa|`&Q>FMnU|QR3Mima(Xs~VQ331gp zVndy8BI?--C0MTlZ5kO5+fE>68$4AvwY9Uont+$lf4W+LMrVw1x>!nI6HWei4 zWS)=jXo}stt7tR=$xI&t{fdxCR;k(YeWv4G+*HUcB-=*Wjl~;WyT4W7Da9V0WdkH|RjP=EuGSr9){F~$V`sAdKAYPNyfM!S#A5^kQ z%~SBL8$`J+EJ$f>%rZ?18r&x!QLjXfkw!CbHd*)RsW*3dj_rcTCZT|6)6mcyavVA@ zjMsL1GM+_^cDq$Nuyf_^TstZ=JL{CEn`4b3yjQ$(w7`TIB=DincIlk&KjpZrk|D9s)|WpuWP7&@Q)*8dm_Z!8?J?ejewGi_bqZ> z(p2PBXXfY?^QL?qGH*UbQyR5SWU9VVc%ns!0({!+nBWfOKi8J137F+u!^MIe6RN%E zc``-XLg)z5;xTNJl+|s&9E;^+M$LhmUi*_NhAZap>VH2_1me<566iEqV?!i_RzJ~LnWN)7Q8zkEd$X$e z-oWHy+Rk})r(02@T;}qING)e-L+itbTB^yf5G5YRRj;H-DmMy#K&kL5a+H?6n;@;O zDu9AoHdg@wv^{-Yd;KAU39}k=@(qaK64VK(_LB>P+mw{5_h%yJXQUi|b<$8HJH-Un zViSp8g`l>c=U1*KqWMhx4azHry$ww#e#9s40q2Sr@~vo_QMb~T2{Qb5WP;3gi8tQU z(EbxW3rqDj*4uFv3vh<5=a!pV+<0s?Jcz{0#xD&?yNZNYkmj6Ze!OHAD=mMz4p!3- zQZs^YD46abzp90wy*X+K!4-m#q6j! z=QD!A*gweVB+90nUauO4R=HEdJTi$?$^pE}m!r92wKwfjAqCGf3Y6T!=&Au4&y{uc zU;rw|N-?hbQ_7(eMbHtEAb5_q>W8Vb5Cs*~&f+)mSsFE0VJZp?JWiSht5tTS%zORgFDSVWaJmaj}z&C&8DPS8ImPUp%&0yq|>33c*$t%78V27y*I1 z{?b+fc84y5&l&G$Vx7~^&)#)?jyI{GDA`cnY$*kbY3Y#Uwvggkqd4syZ2tgQo?O;n z-?PE_vc7hJtBGMq)6;2@81YUuPL*vWgst*3+S=x&$_36E>D0w%WYDInHVm!YRTtdu z)}ZnYrn6Ihlp4o~F(UiLrqHPI$=fR%kV<+`0Q4rZj05tLSXGwL74UVqK|My1`tjI8 zaxOwx{{R8o3i76UygY(Rl)@qW%7MeM(2s|9#g$5w{h!d0vteH(BMliebP1DMDk5gP zS`2HOK~QhUrH1Dkeq}B;S1esD;IYQLN2*!Tz*s=+R%$R;2Fnm>+1%TIA9NJMJcvKV z<=|ybb*>RHsHh?n!qjp;T#zW4!R4O5lM)4M5h|I~s<0z=I-Jwv%vMb9<_*D!ypQP3 z%faHTN{0SjjiYS(=vHZ*fNH}GI4Ysz_l!MB1dl&UrmnXUADKoIfWs;kD;YH7say$8 zN%xok08;0PRwPOj^J8cTP&h75L+d&EMuH&K>~lS;5K!^>rrH|xavxC#iMktDe!uXq zlgPTXTRuVgNC;9u(Q$b_(iTgKR^K)_m+Y985jI4izon!j6&~5zhx8tSi$OFDWd~wjYk~I+GO>Ws!;d9%Zt2Mn+ltZk;TNlSR zIN;v)EM=Vn1}<}bv@(Y=tjP!lJvnnj-FIM~%2S0iQt!B={jtev3S9ctK~}bNY6t9> zxuah|Q%o_ zV07&VPsoh`qzX|#*sA&n=}7}=^RpvYQEACw6kw7@*~Kl`*OFwabiZD054W`QJ~8LP z_XnLmrPwi2vd*IpU@jlkR#!%hRsR5#zFhJQfRK)xT!UF+vILInvxibB>6{UTB2=i! z#FMIVIzv^!T$_)ooT)+Nsp>q72iKc7L8)U?(mWlv*;c|xea^0kn~^-*!_0hi?o8|k ziL3URWd!pTWvA-J00T)_Ys9v01>l1oV_I|I+7)#u>b&xCskvOJ##@zgtLVdG`Awj7 z2S43t9EUOfaco0@>OM{939!{vUV8c_tx4`2m32ImKMDs4PQLzh#4!Gw}@S zkw2q`I~l-80{n-y&%@3V9Sm`RWz`D>gM(tKo`j&Sl^_QR)Jq|{6c?M#X|;vuEAUo# zs>^VLY{|#R=L`#5P|{1){{SM?@kSul>%TM~Q;mRvLqbBqhPtiUtw7l^!)cp?BA~2V z)XHX>yG+l`cDn@;dd)e6Gp6<&47P`GfuXY`g?Y0mDIaF#(pyGb>s@DlQvQhn`_Hn|ds16|icBKHI8I zE!tZxbQ6&vWN6xH%BkM{mqUwXIWUw8z!q~?yeW|lWJ}DgAjHz;L6@*4l41})6*_{3 zo*I54l(`iGs5KsFkmO3-2il#!saUoJSDISd;WPu983N5(>N!!J!rGd4AfwN$d0~gl zaTZL;PRnPZ&pf$lZ~^ZUZm0rq5C|eIV7|SFK#nz0W>=+PcF`evf4ilj% zR$zfOwbamtrN~79Lox8oxP%z2IlS;4TET1PEP2_PBjvJiD!q4OSX|TF=kDDn_L-v* zb2YmFA*j{L*nTz1sW^?mjA{)cm`RHBFMy;ewquY~S}iBB*)6BX{y&kUzuhp6&k&y~m4f~#? zFn+20OtEMVWjCw(zC?w!Dr$r9{VqG?d5ttH6CKYpGU5QA)C*sK%y$m)Y#|ng74|1K z4~}`48Nrj7m?(?QHB2kX#rPI(xy`Dqe@~gitIrS+$e&@$Ki~|Vn!CZ38Gv;rgN2GR z{K0qTCkq0#@`G{~td9u?4OBZ}E&& z)XKaRtU3Wa6hJp=PP3x}aEg~LkousRaAGfKSsbDEdExB_EKU*T8Jfk$vc$)3#qpZIhVq-OO`A-w-`Gv+ytR3?`FftxeL6&LvGo##o2# zY9mrQ$)bu*b-)M zHw!3b=!XK7rya>GTaWFN6Va3)Olf3-uPV(z!IF@76}c1F$xyUI-Tsv!Q}PU>Whz^c ziC`F^_PD9);Ad0>bAhXyZ_N8s`&x|xlvO@zGv|i&x$B%I>R zgB@ADqh44bp_earB2-3{p_7_amU1#Xz1Dw9osq7vQU|+OT~NI6C)&~JPweVC92|^u zR<&8fa^e!MrUZZz(Se>VQ<|_4sExgh)gWeVxgn|G)0kEro@ZKzW18gv$v`&01htsY zE@a%aj(jJpJwPE_=X0CZCIWduW>-@hk@YA1bsZK7e=A*)}v0)tu zUk~j(^UPeZJO?W*n*Dk(lOP9~g4@!3`~+pc{{S(%TIUb$A0}eMA;`ZUg-){g#=kC4 z<*_x(IRb;2*7}ECx>~<4CBf%EcMn>VdgWb7j20oSiu26r;lOrV5R!@!LUB?-a+nFu zO7$@J9Oi)mH5jo+{xeiUa5G@JfBZSiv#Q7ivXhQ`lWtA4_W`maZ{W>;vP-tK@|1yq z)V@%CNu)Ykt|@3|_NZP}@Tn9ZKcmlEaH{kDYQvIXILY8KET>b$x`D@!_2?3kYmK7S z+N=oDSP^AQMRM^TQPl0u6K&jUQNz=o%3IR^eTZn6F{{YJjFT`tbtP733 zIg~3Gh69dMwOs+3PGIFp?5b`^a}g7zL!9RUDIz0^knZQ7({n{?VH%Xe2sgae)1_GR z+jV@;v`TgAwP41FJb~g0(}v(`LN6~W@pPEUM+y0 zI3xQIph!qTLQNB4hC@GQZw3ZF@Sp8YuD1RxXrxZ5V!+UqA0XP`@Is*x7_o3L2bdVj zXD1~n2OzXjob$;oU>p>)&RdTr!!}TV^1g#Q*A^5QZzE>AaI0Fj~ULv^8rQ0aV@bXAY>T4JlR&3$-L9s?XD5Y39AZWpgqq$RE524}IX z6rW!JmExj7T=_!^Pu0Pbsz{94}IV1T~OJvdMwiOth zg(+u6k$HntHWh>>EC9ex=T%It5>oCaazhQbiYwcFCkM2mM#VPE{B-) zIzm^wz($xKKRABQ<~p`}lTM_A(Y&7>=4c>=7ts3soz%qC)dHB&uBA9%vVw;mW7qdJ zf4W^bE2(M(X{77=2~fu-b;tl|{{Xn(IMO1SoJX6v9O`cYXkY&T;>94qUGQuBsW1WY zd14bes#NF4#K3x)ihv02UDA|h21Ih{C&IBd!ANZ$z_G5dOv4pzdU?&tnZsok)pRf@ z1kvwSjwxb=*khOX>o9>nJ5|(zbYwkN%JBa1Fn5{UVzzX1Xc7b(f?qt~eJpF(BI711 zwZN!<7Zber0mw8oOxfFnAkr+Ey{Y*ez1yAJ-$4MUO@{INX(?Z`JhI-B0~3pEOj5}o zNAb62O4?<}op#Zd=3KA~wbHmfiVeI+UA3yMSEjl00O&H^qk^F%`F5#&icKYgAKJbw zF6w`2m_c+b1wbmq>#Fj@SlK!XC!NeC^EL-e!;)}w=8f+2Vf@%Dm~*ZwGTbDO4VmbI zpu%`D0xJ=3}B}KCgJ%Ev|D!(2fzTY%|2yvQ9T9(qwpUI zPEP9SJV<-0CGL0MpRrpz+MG9>y?(e47z}2hH3kX-xXiMh1V|j6e8yALNl28#)#l4_ zI*3s)FT>iv7#=ry`<2CqIZ_uDrn_)?x9tjx2!#Vmnr3l9RZs3!LohBRj!8CFM%?FD zKWG`2TZ+A)S2Z+By_|%XEH=i;=e_2#MiOB&6;(_7S~9R=cA!ne?l4dtppn6u0M?i1 zs+PCxmjYXb0MOny_6~cTVrA;B3c;+4oGToi3FM$`^&L{aHbYd8OVO*`V4!aHF*>?_Xn~AhO;u419{+2X+9h3oY(_ZWyjUa%uF+dk@5oi zFJRA*NA&kDhgB=MyW6pOw)>VuDyxX-SsKp9iB%Uii) zSgEN5@Womyt2Ob!`0Z2VSu6=IPCh@04~|Spu9H^QPp&iQryA+ihJ=dCfsetgmUj%} z724|VA9bzabrQ&qsZ_>J%*50KX=;{N?6p&{P9Z*jquWGLxZ1DTcb98&llHx@p!vkP zZ^vyH0JO5or^l_-Eb>BI%|OK)2~xr8HIq3&O9i%!_Nxu@sb{HwPLRNHEWXomA$}oj zzh#*&6Y-lcp?M|i@+N4N-^(ay4sq(^he?}un;@1|0!fDKeeIwz2M{(ysE_X6B-viI zKBH}4hD|M$172L(n2>1c*ib#F%#!1d6mKJ9$^81cDKh21f=ltJ86$^2zX8K8ZbvyE ztUSx?Z~$H!>kw0#MzE_GX-pFqJZ2c6`u+pN<;|3{fg(LuaU`3L9QHR#oC9Ca9y@D; z;830$=F@YvGvbrNLN#9G_6167P@7wh1~_#ugLBqn+te6ZC7Za(K-|9mj@cRx96tuI zeG279JEQ@lfh|(hx&nd}poNx%rqf(lIrFyF?74f=GzE{pV>+KKOpqZ)<{%NR!v6pd z_5egH{8>#E`mCsNzy?HBIW^E$2RuxuC^l6|$2P0OSlBs6H}8!%*y~Dj6zEDhD;~ENeAm_^MtduGvX8$Dc4OQ6|a#XOqZUqZxD$xfpDPf;h>!fSprZh4uSXbbyg6gm3|f}FbLXf<7qb#vmWegZA0T6N`1%E{@d#bCs=9arJ)2V_I15k>O0K!$c0xuvT`l zi}It^9~NJh%AP_QP1A?Nqd#nmlt|QQi=T`#H zEX8RgaG=4CF-HL;ib2=f>2mX6k$_K> z^PRt4q8NU1-VFqS>t`jne|1uP`&b`c6eA$LuC^Q)8c(HpM6-p27;KB$@y-_-L_!+t zZ@bTA0GKOeS!t}?9$ls?!-{|wZ}_IPB@@WGpp9%P0!x9OGgqq@kOG^=eO|75zYzwt zkOA{owyXo|mRu+giTRDqs#|`c!lwTKlV#ZyvRoLhhB@WICJKI7Yz$#S*Bk2AT|Lfe zijCLoumLutQklbkC!A*QzbCV03kpF|zr?1nA?)B(U=<|yE3|q3$O>ABa>qM}oiN(Rkz}aE4&>TY^U4AHb3A2_b zwb1M3n!s|5c`l82vO+mabCUdH1P`BgDAbc7@g0p>o9^K1jnc6C%&GEg&Ae1|kcMh= zkfSmmE3Fckn0Mgwu|Uq$wM002BJ1QINm3Z-trbJE$p|9u?!}Vv$#m8)FwulD8neH0Q7;6(EL+!u##0{k5ev)l1~y7^6S$i2h;{Cxq#PH9F1VL ztQJ3s88P{&+zk5=T6L;JT6G&vTWSy>_DOy_3mHP$wz zrqj+S)YdxL3>@PzqdMv{+9md^;&RCxBju>evB@=k8j$eFg|?ARne|mIxBw$5bOj~CUxS14-aQKWb-@A%+L*=>ZGC#vHpR#^;=|hb$E?(ds;0OON~T;P)#YoZJiZ`Og% zS!kM>w2?GF>{#zB-Y}WXXOsgrx9kIlP?)V71HhVaY9y`HV0&;}TkEHb^61i4xvy?mQ2S{3n)i2YvZ|$K!Zfi;x3dwUlN0QgB{Eaa52>{{RNPm)43BCT5{p z=g9+%xk2)&TIC=W*eCJ`iDH=b;^VG;rpg)Vc%;e=Bh+P4jM$ksd{bKfr0fvl-TeLl zaK|XOmVR5Zqcx`*{{XPGH+$9y{wXRdGJh=8cr9}l=R4eMI44|Ji4%4PZBDrTb7XVn zbF*=Js301-kT$mCf}Z9ceb8XLf#s}40PapTazqO}^O>Z!tTj;8J$2ebPu}PN^ZumP ze9<9jq%g4Y+oZOxRMgH<8Yl%;ooh&HLU4g9WHhONB#I_+YnUV2g`v!7E~A*42*r7?_cvCVt@X@V zf+l$Vj=5ARxbDhb-|RKmOU83N?U8>gTVfY#C3a5 zH<5i&gL79x*j%WBtkpRw!OgpjVBVxALo$Jn?jXr=J(Rl9BVm_8?6z1_i7FhLqOUXP zCRfq1yN`>G)CJ1{K~bjI=vhEirmR!8dY&e}Eh#=nwG4hkgqkjvytRU2HQ*DnNjp4J z)1m4q%MyKtF9VewNh55iGcl!;iv|AxmSXAFh7P6TPVa1ww^h8fgvnvZakxbYG`E@$ zWZ&E9lLjUSd|7dYNv=>FIX0Pco{*zkYGr3dE$#6#$vKH)PSC1Ni=v^^R;HYrlM0P= zB|uHy>FPpL00=u9nLq`zac&Cf_F&LWK#CUw0|DJfA^o>ZJto0Z2O8+o&QXyGP^u(0 zg%xt~Czh?GXV5FnO~Bd-Nrhi2+*ZPCjSV&hMUbTb0JN6tl~oH_sdU3W?vB)*bL8@M zPGn4%n5tWnu>SxMloQnQSqT0(W#D~FInO5+A!^L&);}YkVZ79d4-;la3QH+((9aUv zf_0PqHE4vHgJ%Hpt(JA{SJ-gz{{SG{KLkQyl^q)(1%0h zw6S*A-5+F7(`9E-sYKLsrpNYvKVUhxB{?UNh%S>BwDDO#455u$fkogB0}VDe@lYAy z3>pAzd5#^AV-52w&)@Pzp93`slYp|UAfL%f2K}pI`Sj!q;8Yd*j4QZ-uJpF8XP z6vRs)5votgZ@|4p_?8NFxel{6icXopnU#OHh<{cS{y=ztZO=Y=5tWgCDWHeP->q*c zxPf@}fn}=7gTvCD3pX$Rr|Y6neiixIgmrgpKLmW5Q7>OO?itygnGyXlYZ7a`9n39rW|TM$-*R&@EO#R1y#x6QiwhnE?&2jcYgn#;oKHCmca?E{G!{JU z0sN4mH*B4PHDUlhrOSDnP1yXMEhNU_L|hRAoq+t?g&vVA!5Z+R@o%aph)e)uZsp{L zlT(55X@0@#034D0Q{(jxnnGz{3f`2Ol*FDDQ!Pxb{{R$0H9rG>!G5@~&c`eI$LT@; z04s7I{c>^h8(g}Mu>Sx~=TVXFR&WTTTHH{LiEuyNwW;6-DK)viSr{&@Uuufz8vb$4 zW*NNOK{$jG+}n+QOSQt^H0ym-hvqSk)4r?d2|wS_wse1%e1fg$7P&IUoT!X8HDMTc z-z-&99-}cHt8E(GCXf}Jmps9^%^AjG->?{|o%xFBT^Z*}e-~*WOBCr0norJl3<}_c z04nsQ#7PF{BKIY~*(k7vk3lZwlfk=JjaBu6Z?$tK`Snsr#{7Xb8BfzzMGxq%d?9} zlj1%{i&mv&y@a+GNd#&F@G4001M3XYeY5*q3*oCk*2p7 zypzY3KL;=0Z<<}D5c5d4`OevkJ$necO*>f%8R-XmJ~8(-Y4?dL^YtI%j?~CEpfCWv zj>H`{O24AqQHxyHxW}HjA?OSwyWDkZXUcLhAGW=~9%%ZPD<=ds^EdMce$<1>u`)Ci zoF+-<;E~8ZF-ej)5E+H&Rvby6`k}wssWSw%`ELLs{!M}PQMpjM&LB41W~lLv887W$q#KUH#9w#o;S2O6h7|Ssj@xLU`;`>IU&co* zO*WMSt#-R!!hX4=X_t7ne~hlC`0MIXoeWBlS@|ZPxm@KomNtv6g@~mDt2=-!jvrSt zya1^7Y5HH4ZvjZ^n!FQHRVtKrQnhY=AWvD-xT^%?JuqNMEBh>bx)M}UY@k5&tzr}wP<+E ztx|YTR*e8kI8;Yp$l+2OG9(i++}zLvC+tNjMaXL~eO`ASs0xrTGxBPx%(#@b4}lJ6(xmr~d$; zTUA+9$3haMYa^nrpJ$O9?bpjH*JyB`!mwB+w;Qr%b0HFRK+Nvc4_ z`sx;JDu;njqIBS1(m)WsQn{M=@aG#yalkuvPt?WU4EkeM$97f|8@(m$ds18k@(kLr zFr@=ULhZuMCLzs@*KCnO$t6O3X471m)85zm{^|r1)YTB3^*#8_E>X7S>}2|Cf7K7G zFEc8a4G}MT(-T6BBmf;#><&657bDdPVChdy+NTe2r~H_Jfx z33)BQ+(S>0{Ef-v1_b45>&=FroF!%+zsL>!j}{R#V!(Mj zw<~CToneX6>N`}=l_rfzb)g={vr@FsPa+qccWA`MX3qSJFv$&A*H6${gJtRqowCKL zq@}wAj?>4R7A!$VRf7TRz&*yHK2QhdJ(8G)a|W;l=}`_HRtF`J*#{VROP?QotnnLZ zd#cWA;BUSfum<63sYL$nDppM=<*r1GFu*B69sIbHtD7VrAe?fftFt3V$>eInW`0?h zcpaTGfS`Zm6RW;#{qn2i#8dT^EHJBMC`mYFy>rF#c{QB4G>^miRwrADbR#r|=DS}i zfcuE=H)Wu@iC!MoU#9mo*xB|`S0FTZ2}hB9lUDD`+cbHL_0^dY-i#~vR8F&yo}7yA zT}A{PG8tkh!&Ebvrj7opb&d$jCjS7H>xqCOqUy8c5fk#r!2C}4TCUK_O=)M!Vh$PN z@1yy2uE=FZ&=+np-s}oM)%%nC`GD~mcdR1?al%3W04kiaDH(vBt@#u#l+Bc9w!7t$ zf~D6dw>wyGqKRIaJkLLVl_{{Tq@aQ^_113*Gy zEEsQ`4>p5OwSOkq#Azir4Jdw7ncm}ZA5~u_T?`Lfkok?vr_Ajt8h2xPSybB2j4Y)2 z2FK~a>+|w|kxE{3`&!pkoVgHOzFGN-BtY7Ry%U(%71 zFQD>P1pp(*@Lm#`LyNr4&^E3DLICS^a)E$ZZ z;}mKC0JW2WweNS_q90lEXY*L{pgh|z1~bi%?H`qB;Izj8At?U<#GgY16LVSN{-5km z{pb=HzfG8&f^!9$(57I=Ra?M_g3fsTGFIEZC? z69a$3HN1or*0(qO8W^P$MFwZ;?_^p>0xbx)i&H2kE1^vJi=46ypgh*vDx{p}EC*xq zEKyGxh_Vm2X>a{fH2juL>ZtoL5jIP>4yth~cpX=S>d9+M4#xeQu+O98kCj%Ss3o0- zINMuN1Wv36hrE!zd^Up5jQNWtHiAFWt?krQW@1<{vh(N51YR4qidhHIfHP&XZz9bn zla~9#@%ro-wn+oynGHlAB1%jQizIbzQqT?r8S@*r$$~kHsGqW`;v;>mY2sap@aXTs z2gmmgXXnVgN5yu%14)>uKW_OJw<N{{WFllO)t)9_{AE z8Oj{6&5F6?YxBC+nD>9NzO>{=?~tO3yOl{w99gx)mPFZ5tfPAKLQ-IW3aHIri16SE zl`A}ufwg(5OKBN^__yE_)Y`gy_Lf~m`>_*KwnQL#{)Un4t3ULiW9BP;S*n-chS8eL zUOe6S=Adf$1f77&?`xV|_>La&Q>{}`D z2gPj{vGOpQ;K-BqglPZ;5RhM4VOYqs!rN_IDq{}OQS7!y)q*BqSzGy-ksp)b32heh z&zZZnaX~A_exKvKfp>lQf2W!2`I-(-Xm-Fjvtnnw5m;g$6A*y~yllunt zW~K-j84h((5&d!T(j+*CQ4!`@13zq0hz1@%{yT{0b5fKm;v_TdYi(lTE*>*$Q;hJ+ zgURb+uubj*1Kw=7H`~Gr6b#0I!t%jEf`Im4WBvl@bXp z$1(o^l-4O3@THKyak4MTZ7}jrm~Ir8CC%<1-(EspO2BxJl2)u1266G9C%m#{)%jz8 zu`YNr{894T)SiQ%?Nn`E)+wDh<&17>!I%%w>%J)dY9b%J!=`ei{{UVla3+8!~zS09+4~zNzp$1xMpISQJhR z*N8bEAYiV9knmFXX_xp-&S~f6*3p7f8Vd10CD#unwBGDvcLr9~eimJAX3V_&T>E4InFS(D zhhsxOu6Fa!!}p5Fw==X!e+}J)qhD7t{{W8f{{SDoXbDg7kB}1ka;13BjBTY(TB!qx z>ApqKY8e(PgY@TRR#WYefFJ2*tb_jm&c9^u()K3@!MPGY)0*cY=((Ys{-5vV;&WA= zSp75J;6ImgFa0msee=x$$NvCK?;tZOe1GZI{YQ)}uwFCZd$xgpZV$|S6Xe5|;AIc2 zd>iD&m2w`T{{YjCn{&z4V~(%%u6CJ=38vV8Phi)73y2J;_`p_zYc&ey{{VnbXbv4H z@yF?WlrhX`8fX6i(lj}EF(>%%(#L=gPv4jRneM@yRlvYMPB&l&%l$+2zh->DJbC{B zrF#^anKW`C`e#RA_cZwD^vm<&l3*QQrcRY&XHoN?^tp|xU*?}uKTTX&qn!u!kAUoc zzz7SAJ{4+&e-ZJY4BJT0qn{b@J{`5;_rt5l{6}Nftb<2B2gP>AvQnCOJbY*5o~iQ% z@m_=E6Q3_=M8D$K(UR?>CE`9J!q4W@;jZ|K$oK+G%1?@5z}@Rd@X3S5(#Z2N^Ww-re%hBM!ax?dl!KQ9t!!YU5E1MQh6nSaOf5Gu1v9!T2-|D* z&FKpyVVtSbC1sFlETPISpi!C>6Wdf8%iFJAxHVt$JWBNf_?aVamerQNBI>JS4RKF2 zviiXzG%1IRXB4Sr7R}UBo&Xx9{ZwUM7t^%dXjJy~4h&eGbrOk%9zGofKnNutGWeXe z8-MZxpM}B?NQC6jN5|m_{;?JXp`?*G;4R0P)lbaMWeNF+u_WdOL!7@Us2emgn@II@ znlg-Q`FM>tP$@yJ&zbniR1N1i0JGuTdUNWC0{$*)SP)D2W8*j`G|nDAL-Cg@sPdr3 zf8zP>BQXXZJ}D}(So8^!J})YBM{o!lelW2={y28k@MZmwWJi&F7PU}nOL<~n)7A-* z)?EC9;#f+=7dT>c{C-(X#6Vn0`0DwQWJAyR%GB}5H|(kSl0?4(#nk~JnekX={>`eAla+Rzf8VBH~{WPf%;##4n}TYiTx?qmmHlT#XqH+ zOq)d9pcDNs+$e=WT*&_bP4=i?BQO@f;2W95O9>Mvd|Q4Q$N1RKj`-H^F6(sVf`j1I zG=%8_FxEQXkIqS#QXE6({{SPM?iRwHn|J>JCc7jVslu;+zuvu__6@cob9*RXz1@MoS?gXVrC;R$YB8518H z@Z2e4Sy7m?;c3AKGHQeV0Q3Iut<4|6C&c^@c3D0t z&)57LY@Bk+vyU0^EvSB3P?v+C-Oc?&IS{Ym+sklH!h{Gu9dnof-}Z;%rKPDhC-Q0` z+RBh=v6qCDW~q$Hrk41A#$;{hmOnU2$;+N`VT*MFHY< zNIc7zf`A|K{aNI3pU=$vMi%9{TmFOp08esxFY`=%)0+;|-~s%q*Dy^WCOJ5@TM#NU zT!+He4RkmC1WPOXQM7Tw+)G{((w8b3YL~3Bk#`&vTWf%c#?I?_8%2C{cND!1QH5(5M8b{XNw8mP;H*KLOGg1*kcBkAP`%AJnhQ9|PAPJSq}% zQSl90Rs>r7VW{}BRKYJ_0#a&B_&fwbtJ39JNu6L`1U|-0fk`hf+-bG=jOwe&3X}lq zz6~9&lZaqMJ_3$;#|~ag`gIX3%(?iFfNGP2cLe9d_;e-G)qr&$!8GLW`j4BxPG>G+ zBx&Z)<^KQ~ok!Gji21A1CMP)4BB@k5aBm5huTgnx?o%b1n)v{irtSQ~K>$Qr>EHFk z1{u{<4pKUDl186hjNu%IkZO{qC=@?Rt5nL1kf@Yls=h}x4N>G^l^reysBjouDdm@j z09eQsmf&IFDDP@#QsNNvWPplR)`pHe=?}FCsEpEeD-UV&Jg!!A<|4840O)wIoV=Q= zT`VCb5D;pXS<2J}nc1$LOHqD2lcq|XICt3je!39M>*hEhTERbniHafWV6^KJ@rgpQ z^z3sy0vm$>Z-t5YjNgg)6)=~}*T@bL$zp0yC|LpY9U0@{vxZ18AVZn+%~&OUmSMt; zK~FFoYkjPn1q8v*2$qwr7)aRlxrB+x7^Uj&q9FuQLzTgh9!??;D1qX)a{%ZO*;P$p;J@ajF9_F@!LX)lVV@oRD*=5B{KR=|46rduT7}{AJdiOHlg% z0A4p#iRVA{6Oa;vOF42Sn%p9NLI#XZX5&6X;gn7KEb$)^Ze*a<$c;E-1qo2Uf~Y}u z87%TgBI^29U&qX5Rew>L7nL)#I%YfvohA!4H2I6<2Npvq{HmP8KEcif;7AQ&eg%&L zTn{`Ljt3}>xZ{uH{{Uy4Y3(2`Q|l!M8DU(!X0}mEyF>%VY9aps_E;}2_^RDl5|xfD z_*%n=bp9;(i#dpToIEdtEO{RQ=AVftADeg=kmBB+k6m0f%-pnu0I(iOptaNoRT%?j zH?hbF{?erqkRSqb3`+L#U;D?l&q-L@cE@M49m@|_@t7*+fuo?9~@g; zb<`7N*`t-9XaxfNUYA-74w?SEJxl~V&QS0*vUUBbAO>hx;2Ds4e$%cVrjEY?+-m1h zlLAGTn1>?Z9v&xL2aXxyBArMV@NVWGv&u^@CHUt}DzHWaodEsFBXlpKkie^wm#R7PABkjT!JP&lw~>Q2 zzT1u7u25N)p{ttH{6h@*XLFPE8Hyjt${x`TSWd%lG3{JVc>(bp52DWV5G(-WTTvT< zUakBCc)2uFw`q|5r4UM5VpA7xQ;k}m=Pm>v1@90pXfSQhUD{-#szw=+?b>VLYa`DED4#D zC1Je&yp{(OIb~cyaVgmP>G}q0iSQpi@ zSKmHe0r2NH}TxM~1iv`US7TcB&5W(=FUg^{*G?0?wr8sXf z`xHsrkEiiA<#-3FU_5*|@CX$(L(~h9m;v>SieWxxg^w`$XK*LC1V=cff!asK8nYK1 zz!()XMqu+K@WCQQo<5j(SD#1jtI!;IY`C11(c#Z1>O7m87zD)&(a)LjL<^Z?{il(u zrr2r;#Fp3U_Oo5gB{QFFiqJwqH{XC8UY6w&WOEZLR<*g=T9q~V!lp_4ZDVNngB)EH_LRz$KxIwdTKh`bA!-lm*}u;$=czbeOcn8moGu_CnF zxMHXyQ@Dgr3d6g#xg22)SyI~hs-~sUPTr>Y%{m)8i?;@+YjRvLfdNQdz{*xLi3F2_ zP3$Q;j$K)Sh=WUw8gL#!6bYIZ?qY?_`DGg<8$hK#-FLOFIgU&NY^05komV4hRaEaB6STi4EX`on4a zpt5Byw=Eb%&Op`f>RVGy2Bzz@T_zxP@}YA2>k(;-U6w=swh7{vA{&wQf&n3lbmU3D zMl5!;Rv=&q9Q@1UaE%E4z=)*VX$3z)vY3INC)Z`2N!>!zs{UV|c2WticB>-0_ZRs5$DxkpNP`5(;z%y<$+l>Y#f zoTlIM0K(sqy}3ElC_l}1(*Q)*?O$CB`BOXU4W&q0Pk*3m%9L$dl~wY+YK+$#L8;a5 zVyQI?nhKsf<7*S?o0wNJbmUOnG!CuL6boul1q@Y;cSUqMd$3d0pqmp zpNAv*FpC0xEpW^m9ayOfDX#1(!Xg>VEe9UOa7pXr5@a~aPyVb3KkY8mf9$~}4)U8hn zL+yp@rQH7j{J&SJiVocQ>!6m>;$kaO!vtm-{-20S^rb=Z~+VHORs|wiSf+; z03XHFPN5~4XUJB0Jg47C;OToZ8$L8{{UF{jb0`0B^TK; zBx|B=H5fI+i5vjLJLyYVfMue8Ld3Gv3rF}AYMv}6y51tqavgvWAR#&4Y#c}?An2Ub zmJIo25Lzn_rG0oBu{W91M_Dcfg3R)v5zS}t8*N)PI=}G%aj7&mXS#JF(EeqHQ}5F zWB&lO(V84aX$F-Vq|jzHqeu#I$nx{{<&@wwr=A@UekZ|PHs21{T4ZR5R(t&nT3dZkAU`vvWl1VlMk(1v zgwHF3w+hZSDFtNb`${%J%y8bY9a!e70MbL#>LxBc&ylkLSp^xEGr$xAAuEiP6yBM^V`80en-bxup~6_1IHU#Lf=%;$+NvCgFXb-^kvLX1L5Mqa^a>l5%{{g zux$fA58EbmG}-loU&}%zlQL$&XUV1AVtmam5Y+DRC=|y~19S3yJT4cbi^+SvH$#>- z@D!R<0L;>!s;-Jm<&C*QQEk3D@HfA4_@B&vEyIv){>c7a@t0tX_I$-VUx!d*$850k zTLe2aQ2CwSQq+mu^ty!)p7w%*;C9RO#4K=lOGC;ukv9Zw06hN3rlEr8c!GreNR@)V*BK)$(%^W=_Xk`U!N@%I{+{;JQAZ7ORk zM-MiYE_#RhSYm&?HsDGUC*t)ospzj@oSU~B`E{nLqt~w@C&ebxN`iW}lT-ws{P``l z&za>3KuzMl1`lY=DAyr490+5TNH)*Xw&S%hZRT*B#IO}yg(X=jv&LE?w8Rlu;IXuT zUF!hn1yx{_8HFE0{{WI8LgU3i#;4_aesU;3vD9s~DF7q52qgI&1&0BWS)GsSgsqXt zgp-Etes{P!70{=NFMIN%eEB_Y3@6&|-GdQ6w6XQnvv=-F?#|YzvLo7LcJ4Q-#I?uU z?0@Pv$)aFV@3S0y_iBHV>n!+>oo`^dRMSDb#r~x4r&(f{RNQGlQMReT;Gj-Uyd!%< zY}vH3=4$pL(KK2^JKbn3us30Z6@Z;dQ?cMzv>d9FXy9e9W3WcSfBj#cNf2G6IbV9B zs>U8kvV5N<#Q@XhcU)z_sy790tZ(I?(EwQbe>zW)HkjX=?b z%h>CZ@W(MrCHm^^{?o(3<|JG}DOt5Az)XHe^Ay9ep-V1jU&^vfQM`Yhugj`#Kheva zH#2^mb%B%pSTYNCeUq zfhSoPuwE)9R0_(EJaeYjsmGU6BaGcBAL8G~8yQVuo@(NRdl&=bjF0WPES3Pdc$i!T zgYf770B*tO;}Od}KhG(^M$Hfo#ghj? za98BGkLV9A{ElD4@(gz69l0N&Bl8mb1}4r}9O=+l=F-k{KDCN(A~7;{qNOwI{X`}K zA_fqTnAW(AzuN=q=5uNB?kuhSe|=w@7WVZo1N5aOf%!Q@$k4{)fbtIlOv{A^OpnJ! zQ&wC|1J6~{`lFA`n6%5kCUfC%J9IL{xlO>Lz^c z8OfoBZ7W;ap%u071u+sEK*@Tb1L6W*K`lL;&0mSj&1N|Rz()>6pXekBm5LUVLmW>b z^cfo0_E7_${WkLR8r%_&Z-0+@N-7-6Z5p$xmnnPdEP07#C%fxo`6-g5IWW>5UwYNW z_%Kpg`kOB$1k#6AyXGGhts6TJY@sT@Q#1{MOp7^xn(x$I1qJ~~k_9Z%3z`t@76!jh z{{SL56q+#XaXL5+2+MLA$np#?n}{Ajg>1B&P+!_i-U0E;#ey$z07dcDibyeUYh6CY zI8XqG3`bgk!N3@FD1Amfs^mAJg;~dmLq0#$gH{K`+T=>wOdU_)1<*`Ol0S-IUHB~W zJ|eijgDI;3Z@Dm^9RC1p^)DN#`}nnL#Hg2~`i-Y9#V&d4zW{0^9*^#v_^}K%yM%@z z9<>Tz@PA;*SuiNW#e`HWhX6#f37^#GWas(M#M%V5n}D73zl^4Wm<6TgK5?z!WOA2mpFGzW3|p@tCH$Y`4de=W zi6i9S6)vGYnBlVQbav2E%|cvtY_)pxYN@qr%l=#O@gWDaa!dJ^fmtwTA~t;2PlbbV z&#G^nXuqke2V|M^EegLAA|hYRJ~r-V&PnigUmG(c{mmjvoh`{@m=OA+><3;9&oQ42 zxyl^j+S8*hHwg!xk4v!J4}lLbFUu$9H1V03grU#>095zNVt_a_UHZGdEXa_CRTBRI zQNB&?(f4%ORbQxEz)SGEn#AMvN93SNb87liKUDVZBI#%cl76gEU8$~oF}mH{{{SjM z*rSmRM!W|i6pBmD$?LV6f1%f^#e9A(mipS6vIb8(wcod}z_sdPSB7iyWAqL1s;Q%v zpztl+G0n+>lpW96HW>#LP{*F1Wk$+&>vllI(XoaevnC{suUzxhK0=2$S!z=wkQ$>m zXMb_MN1ytx`CEY*8AK8+`EJN(AkPvd{I_u>21=;M&);@VCf4?_h%ce0tQ&s8Ib9fT ze)_VR*j>NmWb@K!V2d%yTO3rWC4e>HCdw!*fv`)39`zjB0MixFP6YQ87*2-T3#XYU z$|rmBj2xr^0(dM`nvxA%?!m~{HGFB8#K(2>dW3$HR-9%@#vH)=U{zNRk(@Y zaypcmKXXF+{{VNZ#phxsRG!Z$ChToP)Y*2oajSdsYBG*ndX%R#df14EYWAuO?o{tt zyHc1lxnx;aV~NLa%C{4-sX(45U&tRuL|R}2tJva9m@u00f9+)9T0a#j8xj-$JSX0QfCDHI-IbQelMEMlH8t zm1M-@p)oMy2P1H1mDfN#kzfA+88=I*GIRun5jZUpg;;A{9 zYPGJEay>~aemexw4*|)NA(C7<$0kl^@8DH(RaU8{dEc(!5LEduC6);oF93}|a=+cDaI0I)2a;Aw80-3Vn^&YMDWayq_fghL{lYIeb*~Hyw+K z2m?Q2LsJK;kVRquIj^ZVoS~CmH)YEh{m&+=3oBDJ@11p0TU@sbirnzS%)3iZf>~D( zntaBeWvZNr_>tpXziS1DSK*C0UB@n|xH>dYi{$WRV%gbCQPeYfY}FISo7B5 z)ESv;OV^(f77U!Oqp{$V>;OL6Cu!j;Puq)J_qQsH(||9B+Jkj-9R@>owA#TCYlzr) z6r2x-3aYAf$NNdx4gAu{@_8~*cB>Hc zS%UDLApbEm;gt}`VsmnilFQOIi2r#kjrz1wzPy%2Oc~{N#Niywg2&LcZc2%VeF!pk943UF_i#}nb!Gdz{%RepF zsnsXAaCLs5>P`F=lOku#AyMbFd8a=y(GFGJM*zpp^a54^LHh|i+BXTAh}#|uxreu`L^~J7G)vhkJS&6q$+z-Nposi#v|uVFKw4b+F5NVT+76sWLDTvgB1kyjv1 zufu|7&%plxag>COwVJ5Y?{jSO%)OgcU0)~Nr~}rPY_%UQ`2$?1KClYg^ONA#(ynCB znQjI7sy&AQll3Rs{4UrusJG{rNkfij20UNtggwoz#v7F}xU4OVlw#ZESwRh!qUszK@=Z+p~@cxHiZ50Ud^k22%C z;}5KMyJc)d(50^UaHRDqqfW+pyH=hC?TX^|!J!Jyot68#nK^@fMQWe4CH+@80frnZ zHng~q1_@`HTFzRp?bx+SJYs*8?qvA%)jKwrHy9nV0X%YE7R+&9^+s-Ul)CpO= ztHdu4G64L5({&P4Tqyjv8hdYCAL<3*}k9l>w3U1fzYufFi zSsF_nGyJ1_DhofjIJ{@d{z=FP_O$sg%|28(EMsQxKlKCT4gzC#&JthGzEpgJ_olfa z^S_ifvGuDyEd59M1K-A)dRoWfU!EoV6~Egl;cBq9&jNLo8%wdox-CrwR1pU-z5f7X z9?VjtzeziC=BB^NIyxnkm}A;ZOXSOd)%Bl*e4I5qZG5)(j9Ha;=7ts72@d_v$7%~l zGuCbAw{ZT{Io_soJnNoh&_&``v{CGwr7S9<8tcF+zQ8+iSKl>?M0bBN)54=d{{YT$ z{O5D9i=e?`pnHvr5grZV%0p@77e&Td~!tUfOV>qyQtSm-hrY z(@w86Qq}1I3{ilc*Yi+wN_>3?EHnp;ih37PMXpEZ^A;W+tz?3c@-zgjQOrs^LGdbs z6LICNoo`t=L>*USEqYlsxd%Bo{94;V&V6_k#6X-F+RV``xv{w)Cw&IAai~;Z@+ji8 z(n@eS`*)nQO64TmJeSj|b%nF*k{xzupjFz_reBZJ2|91DkU;Yn^v%dkcoU#N0|!M{ zXHLG94{&37T7XvB7tUp*(BOQW+`WAXd4Fn!w%701OPdyB7i9y;+R_nAK9-PeeEfY7 z@fn@3CkHvHZX(7Qtiz$Yk3y;7JfO$A4Ln}ZG3$1c)t2omnCOv_Ugpr7l+ z(hf`6k>i!G3IJh~K}=#LmCZ>FUTav4A+@e{iQ%28FY(v_>|>?CDq#VwAb>D$GYMDu zWToOc(oWfV;aKqXtCyb{a%7cepyJq#K0b6GQh8(x8fnd+kcl+pGIMej6MP6jawN~- z^UyrNOU6w)jCv|}kJ2u)<~++c=(5Oi(h0AB%B)kzu@q%OKD7&KittXJ50-gdMSONoBd_MY#45BmJaf zUO)k0-ab#XqJ!ymW@Cdn@O)|fpH|h_8dB8Z&iNn6(2ic)xQEEDpS!6%%ReICQO676 ze3!sB9H6>#D;3ed5Pv&6YU#-`>0~lM?q6LcEZVYj;Rl;+wD9&jmC4m_eBv#qUU96_6nEOh8Ug*zp?Is|t(| z2Z5Jnkd)xGQd4_c;EIW)`ygJbLs(3|uu|e!^E(7OnOrWyag||2%yOX5@Z@k#+|=*t zH9AeGA5kSjm`sd9WVfXKTw7TK0b+G&)=uIF$w%>2Cd6BUQK2MEwkdeX^*IRSCHv;AySIN6opGfnCF>z zs6}T}QqT3onSt`xt#31Bdyi34j?R?$>bEjBOFwmawhxtCsW=z{XGi|1yKMMM=?w}; z>ISJ*RO4#iNcoQ9yPrr9$PfKVhFX7!u-3oz14mvp<;T7Sc28*O~DtN1Ye zQ8N)+S@E#39t3Dbi{x$PfnoX9{D@8F=v4QZ@VMzmkT zDwJ4$;<%P;Y@*{`?;sNC!b-4wD{fUdfG)O$ZFV!3i}tYxS2pJ-os)w+e}hstStXp$ z9C2UD`i@W_?*aKtAi_0E+vYD_v#2XzAqfo3)W#Xo?l`3OK#&_azWo$7OIGHq9BBCX=jb(DV9$Th(CCZ|p6#kcd{6zt!+VZKr z42b#2p--E|$fu@ez2~2hNmy-zDegKier40T`d#SVf9e;z15=HDdusU>*JK$@SGlT& z6g!&_k(xEe?l~e@_|6l`XG=r1FwX2doZ=-E6%aJRxW|Y?rL?jw=nU)YCb;wU>x6kM zl5&>iShq1x>mel4f%VIZ7t)bSHQP^ZO?-lqw`H<+wn;WA6_oixP;D|%gBrVB(9hi@ zP-1K!tp1eav;CY{X-`&AfOb@_4@&C?2tRMxs+i5eYIN!8#wlo1F~q0H)*xIQ z6I&mY$SWnf3Dy&~4x@asom>Z5>kIWRqNg||Boffc&>)4VJVdCh6-ehMaO& zoLNo;eSBxbe^jbjr;m&Us|r;rsGGrEET*} zf-p;nE3K7fUs7}N3&-9XYB2EJv&RZV%-p;=)wS#*@ zBb*fHlAM4VtWcRKA9($*A^@F~1ut)H8DFX(tdg46ZYMG#wMLj(u^02caLPj%_Q|#IEHstaSmX3>OG+6|zjFGlj8XS<}(nsn2BB z3fiCmff@ee?F56%Dl$q`4;8V1d~$zA7Xqgw0g)Dd--7&jmJgAF)MdlEv3EcoG3GAG z=ZnK3;~#?Kz;W98GKK?8Fn)Ky=M_8+XHnruN3Tkl2aLU9ZNZCiRYQe+sIaCu4~YT) z08;lUI+`EYyr*Iw$9PU$u=Tav&*=PMn|Z5%al;ZUDVx9q_9)i-4_i+j2HNTz0W>0N z!|tCXY?O^sZ8h5^s|u5>!)b{sEUI2!CDyABZa9!3Y^J7|H9)Mu%n?!<{LxY>V7cZe znzqY^L6{n5D8A~<&6=wb0Ca`b*C{jY4d73PpsNM~W z&i??BA0_%&`bWoVv<;4FiQ`o!q~!#{CQ7QWVM%04UNP(qe4N#c^1eU=Frd1vqE@Nc zrCo~J+jXufkdg`D)hE>ZaC1M7YrXB;aAZ9{99zwDsVxv2YDE6JE5=qqBPMtnNO9)M z)@9zITsavnh}hn#%-dGR?~uP?Wwri7?TN6lF(ioA;#|hg3P0Skc}O<_pEAIqz&U!1 z7;}yqLfjZJ2(-eS@_LQZbPCd^B=CgRV$h%q%-6@YNil0na<`y+ zLx+>vhJr~h?Zd|(O=_B@1r<8K!zMjOVMOX%j6kr(g9Ve((%Dm%l~^?A%CY`Hb3ZeT z@+B&RFBe`^p)Xtj_O)hKC9YR&=*lWS`Gm+c#tvJR%K%1V6f=^40v0W2|u=w`Sy) zk!ZVDBi3Nh-3B%DWnc?tHk%|x@xne?S?ocTRC#p&0A4MOmm~ooWGbom^O{f>PbYN? zOTuL#LamQF{{0llB5`C`d@Q@r`a{O0828<3H*pUGey3*0}fxxj(!$ zZI}o!sa?F8NVsD$&JM;!9R=Z1~`V)HzQhUak;hODe}F zYISa+bHca`+Ua$c;jE23bGMm}-A{C0Py50k0gOM3eBplOM|T66R^~H=iO# z#AGAD zRWGz+RUv@Buo6+$`rRO`=MltJW$!u0Or%+biW=~gP~5SZ%4+`r^mlD_rpDm%(JUd| zeL&u6@0M_{4F-u-wW1ag57P_Mmzh#=e{OUdwB)H*@ZZ{KFm5K>5aRUgqM=MxPH~_N zB$4|W)J2@iId&B~NUq%Jr$MP|A{RxCf=#ko8S!(mE07!`pAQrz>Q4Z1MRB(;!=)c6 zwt{_b%-{f;o^e$(41_J|uO?X>__W~A*Ck3H7nc*2z?aVivdc##-w^31M;s1FUz=^i zdw7Usvy4KPh>11wh!}D#1yxQ`wB13FtR1u2Ne@mB&8ot8gm+GUrWcBkro;}zahlWA z+G|#3mscymY=%e7GDV4#^-Ge`eJ=V?DI$e@$R*Fnt`4Jo^VLCCph8}ebQ@N$`;_&o zI)9PLm$*7TA%&8rSfdcFRV+6NQ34gFd*@I9HC-YSPB>qX#~_RjrAF z>?BNs7@kBN%~Z-eLDe-Vy9V6REbbpx3=b4rqklc!&_@kJH{{U1Aoe!MIYOV_8 zH%ALVq0B)dhP4a)H?oSypnzn3X&L%zlufI;Ouq^T5SuHk{aO*KFp`C4Tv7I+u3D3t z(g4vj8Sk_rckRDS#K~B*VkRq17%Gbst=I)gB^v4TY1XdcIIe4ySXNT(p2b;|%zU+B zYRB^b03mKdkyrbL7{du+QdFk3fV;5Z^iQ=fSuDEyGDf-&yEwGEpvJl=`~LtwXSQ2F z9ybUS^-$SfeyB`ms$R`~)x1;Z^eF*1ssyGzf^{SmPjve2wM?M_4kq%upF6=B*Y=ho zwuE&$e0t>l84c9JxY%X|p2IWv-{{R7`!{+O?zZ}?O-N{XcYmNA8 zL;AC{uf4>h{B=}30PN?NRV8eGNe-aZLO%8Cpj_6}m?A?!UYnX^%cnYqW|sr*?w}9& zz~>B8sLJ!jN=GbqlXKgWbb#JOMrxD`4L;tIaHf7-)Mw=O{{W77DIJ4bGb1}%B;lSNAhqlj0|7lb@=9>JV*zX62%M z0u5OYC5r)p&#{0uVoK5>{{UILU6YKN)Fv?K&tXwxxQ7$#vpK0}SYU8y6o_&MlM?u9 zpg1e*6|Jl4YCt@N(}QXb?-I3#_xl(yVr8L#4#wg?<_*GnmGmAbR<}Pk0QGxOuoOR&QAo3%t1O4Sd zkzpraX@j`VeC~`oO+<>!3P_A4p*ixUNhE9@mT-MhXCj$heL(gl9%t-i_ z7<06E8Dr0m)V+p|BU(=s@MT=E&!C(#2DXk`YAh~NV46TgcP>Oan(4z*1M$}|yIKnF zYR&zJj-Uc__9|J32sCK=CeA*SbLZ_jQHi;{PxcC^*Ex}%PgpZ8O93hgIn82j5y_7> zGZbV)JdNGXk>(8GUOtDX7yuy#<|bQ{KXd|rY3~3?a9@DAT#mOSo))trfK(tMhce!| z)p!RsLoG#x5{T*jxzaHyC1yid0;o0CWCKPWHZy|8M1v_j{{Z+UJXJ~drLh32uen%b z)40$^#8GLi zOFwRU1?o6tGEMK7{{Y6855?-V^ej77_2Tt#fro6rgA%ep7q9rIGOGqoogg%_S#djz z@Hnc3l)YH)3LS4fZ2W-R;?ah%slgi6ha!A;QY-EacPxbYZ(o^*3aW*fm<>pL?iQ%b z;r5v0CgOE2b7IX0+LOt!7OeE~XqEMPk|{V5@>U_CZ(!w(KKkS{SaK6)XJB!0U}eR+ zhk;&!S^B7LQ~{|cHdn5YO&+cnY3BN${ZI{XTen;-e}5RQz^fI5v(ViN@4(Y ztJaO9(hvI9ZgyWB*$&54W(vwbb;i7(M>f~-+BJ{J6#^;w*VyYorqrtmi`#BN-rB%( zLzG}ll=9Y8`BIv5IIwX%l`tRq0I>)x6=y)=MY3AOK7n$gi9Mho4mlOn>F9a|N836o zox{pQ2L+iEQVdg=G&e=me82QHy$Nn2D0@swjxaGgL3oi5Hz zay_pyr(wyawmS+obrO~v5;@4k2tME4QKUPQ*1qz13i+PVZgKwO5ecI#HVrcHbc~ma zsX4hQkiHKWdmPBtX5xAh<4D#I%CN}<4%ug+4qg(Doldq0Q?O$Ayv=bM+UAjW9v+ya zA{;x%JgUGu3G4=Y3Wz}_l)Km23+HbxB~@sKp%R=ythXZ%6HW{$3+OVX66NEqWm4qB z*9?|J)T0z4e!_o8-!%t65hQglosBs>09^UV7+@Q?s}TTY1}Bfx1YtMsEHP$VF4dd2 zkzAbdT@(ru0n?f1hC>b?i-0nKaLxnM;`&9DXQ1BMdg!Mprd$yGrX!Q(-y;wnXZvmP zKc6obhtX=ijN~VIYU`uXTWJR2W$kgMv0yTYkRR1;fK1-uNKl)56}0&tF36fsB2Y^{ z*40Z)u3_Q_YK)x5o902PjFM3yw0~#3cr{MI`JGG!MC+-!V@`Oj;Mim!DX@ZI^EM^2 zpbHcU>r;`dQf7rK^C}xH+FBdzq{j%{Cv=~$+wg@g0F!oPC6|#LKZq$H0+VLRV>7D< zi=SsQ4_kmsoD(}K=PFl39D%PUlJX(NsRF6xvB1rg0@{tj#}dW2ftS5h!w77C9jSJ|jEZ+N$ba6!2X6 zOtgs@&h3j(1gT94_Ma{fzK&j61Xvc#;3D{Qt*b%O>G+MPWQ+D)K^Xk|?DeK!kQB#- zWL86g^Ronm#7SO364nG~{b1d9dYR3E)MqMdOKM3ODIDt%LK}f`y(Ks&)LUDH!a${~ z^Cn_?@G3{ql388PHK;!PdQ6Xi4sxO%C(Hi;9v&796DH>)hoMr7L+AmU7+k~thW5#F zTgW4vIkPp?mYX<{l@888-T1d$jBTFYBmhq}iJN_J7WV}84sblqgk92~^CB3qGEt&Jez&csC8$0T`4u*$fwXy8;;3!gX#^W?Ixu#Hvl6krXl?+l)C z3JKuU@ghF?DtBlPAOulC=ZSLGhRPZ!`khQo8x@47{a7Q{UJ7t5=q!Z?4PM^?B35e& z(%>iMLgx)kS4Ejq7=C(5#;^C6tyIS13$Zo z?HRE-C?eLcVMXRGz$VrH+3Mp1$kBSz!%F~*#3v^5aGB*HtL+O|1Y)Zd=}OeOCNy?1 z9y~tGzAP2V4ycXH0NS$>8;zl!(Avt`!1|bNw(N?)4Gl8=Onc<`tcz-eP3MTDkY}7# zJkjKG-+tD+0On7Xa3N@~JWNE7lAS(Nk)&(nQthe)J5={I5(61J&S53fI~JQ|;YeWx zjPZ1+GU}e)h zatHuA)Wg19lZHSnN}X2uWzD6^yth@wZ=9YOa~^mjpt%oy09F8x1^kOGFZ1Q-CVtOH zOEryIHrga00Q^zp*aWYDNG79xwO?ugtn&)ptV8+Ql#ZDIo z-U*fI-^-WT8}^A&gU^zDi{uEe2O0gWuU-gL&+0bTZ=@BJm|@Z}>YwZc`0KMd#V6$C zm(D>qX?6^C3pGoo3a1bcuv7m4fJ$)OaXZ01UqWW4OEoGCw_redMd^RgN)HXK8(?9f z6M|b3E})V^(rMy*ew|B{B45%8ci-aVok_ulNd};*o@Ph(D#jT63#J2cCs!(1Psleu zX9*C%V1=GyNx;P2+trHYmL)9!S!>?INQB);@%KxJnrRVn!Ce#pCnwf5l~cGtCngpr z$!34^Ne7b2>Pf;&_9X@oCjr#bVjclIIFR@roefta$%+{4P}ZyztTQCVB*j$`}}<~2!LW=#C2v3Bep56F&3<tnWw_2NmW_0Xp+4I#a`MM|;N5OSWrGKn z&XL9oSxeS3M^)?Zhnvg@~TH}gHg~F(3Ik(oauLOm_qx#lQy}`iON_SsxzE0j$twywH0(n z**W?~7^2e(3%rk}Yo!uCX*Y&LVj=)0+zJ7Kkp@qK9OaYpS8B25+Tm2Z8j*2>*kF8} z#5J+(o6OCipk++2*F+!{I#p|YR-j@78oxxMo);ehYhZMX!_%y zyaGKbc{w8Id6`X3H>`v}^2r5FV{l-$B8C|_@sA{uROMdLDAIcpo}LFOjOtqGsogXP z1J{w_1R21Fx{izrOPNrhCJ}&&z%H(H6sm8|+wD0-A25+i?Q5AidicoCiLJx3ZS{%J zpw`?V3Bv0CO^lB{pHAZp`kxKkfLQldA+P z4lSSJxG(-uXC7+clV7qtS5Q07aeEEvlkGL^c`yCIOP&H&mOr<|MR;K@GvwFY_v`TCq@ z5BTC*U^2NFU_93OgwB3n=k)if4a zNHrveesn1h{FI|L`5xnC?E)%KG_5j*Xt5?(G*0S(*fkDLf(c(eW~DNQY3)jV$Q8tB z)d#BN*UTFV87t0X;IcLMVutVxyDUVm0zqe%pKI&5Nn(V6Th*0w68kznz>GhV3K2#* zr1=w%B-F^xd;&xh$;Q*lcA7}5s3u0iEAg62+d+ieFnLj1;$m|GPsW(Pw&$MDIRxwQK2HJ6!4@c#sU;mtjDmuCYuip3$~{mp ze#qREq}9ZspVZMv52FO_lwQ`Z}V#R)Z1P5#zY7h$7#U`5E38R_d%#fzBvGNrNEXuhh9`mmAdi3~hoKKPDtSQv{> zw3g}dpTAeA@CI+;l$HRoFexFHn0V~^Qt(-2*p)bIsOBP(2=W2Uc$qIwfO~pK5^RU= z*EJ%gc%!RWU~C+jS8OE0vB8mVe{d?E*7@o!*AsKcr7;JuIm~!8n$}$BW-yQy<6h>C zfY&E3#Tw?yi%-VS_Q+FqhS3O8}aGWB1x$Ol_l!*9D zov3K6TZ>r9YI|Jr{PO$^<0~XUp1Qb{=BCH=d5c*;Hm0TU_(c_e%s-I@s#~2F(u8dF zxyB_Hmk;*Va1$s1`%_|j&xz;hVB5gnct{JpmuZRk_LeeQy{x6$PLrwD#1|ju_k*wF zwznz}?)BC2&ZUA#o@9F1C&2(W>8yQ4P#bmaNYHSqMK3a+u$lHj#Q{e`eOff8qV}@q zV+>KLRF?*Z;enH6@uDb%Snl994B5Q?P0O6S53I(5l%t61#c z#CQQSI3aAxQb#*XA*57s0Uvz7T{^(X1ykkAHVhkog_(OTFq)q6(nHsnTO`*RhRvFm-Q zF98oob9+l8b<&b&4U)4+Nwoy$n&oa9j0JA)TqDan^~FTxPxkn9BW%GxS1DFyk|H)V zmLTRVA1dx5YExV_Au^BGYUjZL$aaAbsfq118(5zau7(r$nwJpHW;t~u_JKTNrT$ic z6Zmv13I=;Mo;U*Lz?{f?C@=~7NV_&&9asKe8Ii~^!extUFDZmzkNn={Qkgl_D zH3bh@JwJzB_{!7B)xggJk;;@5WqvW{c@RmFo>P->9wj7_d-iMvqqxcVT=;Qhf4B6@ zD0YtH?c(jJJm&{F!{_Qwy1%V$O>Pnr+~mnnS2%f>$?64h2hw%EsLWTG{xa*hP)Ri! z$1!J7SP>WsrF%h+b5w-6nT9jpgCl^&6A8KI6?AOC1*U-?Qx$sN+6>JLRZ=m2Muy$3b_)$FWgxrwPhbl9KRG`Lx`mC93Ivuz``hB=g$=9 z6{HIQJ%j6>jCDs0> zxm$rbjKG+iXyY*liI*b6?hZj)I!T}dhNTfV8EE7=6zi>69GQj%XRbW*!hC!1c*hPL zI#L)a-}sivq6fg0l>{i)3k1{4ChW^2#L2lJsWZy<;0VCrdAXmF7E_m)08=raE3SJ; zFg%QYK~gAW_?W*R(cfx)9@xSh;%v%gg;KhfB`W|G+D_(7ePF;+gC4js?aBky$>a5> zX;fS73XX9VEeJCYTHc^!DW8k8QQ!hyi9&9h?bGJAZ14&c@$qaKPNSGZq^Q?WVfX(4 zYZ9BNFIf6oimM|uHgu@mgAh#3F>;ra6qI)p72@RdvZg>eBVBSeW{Z>qRyH6&Txaj` zh+{*JQfToN7-h;b##@TnLARQLJ{71s2{;U=$=LMJXmImW6SA$~G7_Db(f6p!0=(FzqcDgI;X} zuX7%}x%X0KEhZT z=bwnyf{ZAxvFp*o75)n@ATlt6vN}Re0KW+5G zq-gap_0FN-#IZ1&6u#VK69InRt>!%{)g{Ef6wth$(phBrmg8CimrpzhojvIQ1y+g8 z=E)WPBFcfnAkbD^wRe#yvT2?2Io%><$aN?dxnPMl>!6bgFmnd5sfuq> zoOzviUB}C-AkiqpCN9SsIU<84gGdV0Ah15Uaq$euEEK{1AF`5652{_H%pJ!gggSuP zD@@Pm-eF?fhRz@>I;S@zlsx>eGPff$W>ACS%?lYISKWoMnL5cZz)Z+^qY;9 z;lqTe{9`J304A@_U5+*kX}2xIv3lIU?Py4sRuU&*wFWW5M_N%T}vtQw2_)k8s{mt2i(P+#M~G7`9Pwe?~+0c4~&(=dRoem&_xEE zH79lm@VwOOI1wpWoh2Y)f(biZiSSFAJ+5Lf)tBMi*%2Wme{)dz@kT6n`vplk7~J$o z$uND6J$524fU~xrK69%%J~$>$!RB-?T62rQjF>XDj%ykMFdiz(v-q}sr9&*f*^knW zq*@6Hn$UK0mrme1If^7iFXx8#I*6WA)D+!;Zl_I&XmQ{|mcME022P3A1kI_3ahAQ5 z`5xx80?)66jQ;>6kaYC{Q%KjA&`1)pzcW%xB;-yUu~I7T3r(v@?2s9k>T?18)~+4W z_Votu4RAHUKEeM0kw8uZz!`*s)L^f}D?#*=k2n+6;JewH4PcFS6oSrwCgke+C9DIG z+f%BbIU@y~Z9wL`92iMa4+9!Gx26660Mix#UldejLrqTZ&J9bRbCg<_P{K(+9X`4j z%Op*lOqR!knkb(O2PbJpTbYuRPG@lh`F2#%bmNd}llH9hTe3(rC7@)r;t^%$-Csz#F^CZSGg(H*CT_x ziK<1;*R;V&F>&eNwVlUUe^!Ix>C@UK6)}lYCnp|W(op`TA!^*9)YWxGw9y(IB4(#A zZIk`AMnnS4E>mbb1QlTb+PGz;_JgXCVql(;lJ|`jX21dv+bX6J{wCG!WtFWn4sCW~ z+0YC+fqo6zWap(7Vb;X3eAAxiC& z6+NHPQp3dUFP({|p&;{gcDGZoGj3gv(=+w-)a3sFminx(Bbs94=jub)6(?J-2AIi> zqNF6ZsLNXc*AsY&W_&RU$pTfyOY0POWCfvxxR&5pq=Zniw;@m~h7l+_gGE7rw=ngp zHP(5-fh(!Wr^+97Xj4S6kSmR-NT^ibGMUa*7HZ++<*CQqSstb%yCjzgVLw?!p){(` z7A2FX^KX;51p>CHa12Bo%~8&xRP*EjGwX^0$;DtG3K2Lb;ekzr#ts&VOP3HadLnYe zxH&gsbGVcstO1rbKSCW`hFL13wJ07`3h(-!N2pfON_YuaCa)q4oUWVLR(ws&CG_P* zk26C50I5s`c7k=oZ1e)V8?tiy+DTUe20DfSJ;bj)B&oiyZ-?uV3SB_*c20&7$@X3! zV~gk&-qgMDESI0JHa3Lm0}AqD%JNbR_=zeOz04ZAdeUgitsIkbN_M&3;OzeZwP{@) zUt#t&CS^S@xIV_%mP+IW_DRkGeQquSif|x*?T;?mE*@qdnC+;;Y97(RdHO-8t6%YI z9{LD{YebWRkO?(Z!v+@yhzh_EzTu#}g~ki|HuCfJn%ukPbMyZIUytr3o$XC6&jG4R z7uMhYV@T`J(? zoLmOs4oYNkuxtJRio`GHH*AGTKG4Q;8@z=laFh> zTilaExyVMPvEOwmMqavIM7dGUB#IMuD0@kfXUscmI2KVpIKMYi4QygbFWj))1eJ+m zoaS;OGwTyf@pm*b7{G_eKtQJc2q^ga+QXQO?4R)|5`gXu7IUW5O26mZ)=T zLx`2OxhJ2nS|z@ZxeV5t7p;Z#eG{Hg+Ol722!qX#NoxUsIA4@b0Op*Zjs>S6A4jm8Sv+{D);?kNzm~J8)oAIan~dYo&PO*;h=IWL^dm zb~TJ+n3^!5QH5@5O?RXXwdLc~44(#hP6Y}944C4~G`VCm<|&ZA%tVY%sMSK81&obV z>s3&7aC<@PEV`cTh(f)0;zc8r5lRl`zyisvsGGT23tZ*HhDn)riD(^r2Bs7=-Cra zF}v+3UJZl>T%0Uqpr)9wB=$MH8~`pCQJ1g1@>M)TE#J}SsI!f#sYeQtMNECo8SKc zYMis{4{oqfR%&~FcaY+utD@Y z1t(bc<;3@@iQH@FFpznL%B%ufBvdk7^?-Q1cNXHlkKNW<&5R@46RAf(D2_lESk&AQ~Eu!%5$)r zJP4T+Hxg0EfkMrSRVkOKJdrwWNxg}~OEt?glD^{tbq||}VkWfTYU-SF^TMwEQP$nC z#3W!{zNLEB9|*IS=KIy{G{9VE^1Hf?ZIko=0FrHjt$xZN38 zOnz;4vJD^mdqv&`%cY%5A_2c}J2jFMKT&8TWkyp{0wXTBT{*N}!BiYshpClNma8{U zyUj%8py)=sV{^??jv7)XasqbH&5f0bq3z5Pa8Ic!Q}h*bw`>TO2#s4NtHIZ8Dtc5y zFpg0YVNcau8!fvNs2ePzY5j|2Zy$Px`x0uBsra*O?`EehLB_hf66*6_K*mq0-Lhx) znks6FSAaj(yojjSrE{T8XoTHOmIixsy4#6GWo9=W2(` zV#0{C{UoaDWPvXcJ6VJYSH<27k|B|OvyPl=QO0ReGbxXY0O!o@R%8B^2b1!D<%0p z=SzhXJeAI^grokWbT>A69B%wqZAnAY1I$BG%b6$`haI8{EO1pAVLv8r3>^3|O;7t3 zC~_ie{2cBk;<&)-keEM@#vOtg#3Uqz7i!1YO)_P92Sr3ZAtx1PE~gbPxX7ib`Z>ui zT0g55X7865Fz4fzvJoCVN29wkQT_awscO|J9l)=reQKJ;8ceZ9QnraTreNAI`WPy5 zx%j#nQVS<5Kxe~~PjRH$>}ActaunmrYmqBHQ>^^Umeqm9*xvz~BV$tZjy$8|@=Rmu zVU1I@sEHtRH2ihgvT^!U2M+r*KNM z%NeSS^TT~&pKm`pQ8KfiGPs@EC&8sEWdIZi5FJJ;1yG_a`FpDRQ&af(##cuZ$b(B0 z`)f!(qUDHCAXAWi5y@R?{y2ARqLx<+1peB(HC4Sq>=Im>B@{U$&9wCIT~dRoVh=lL zslfz8hM^1qmyi$M?^{;Mh16K{TN2s|%^``ref1wCfP<4Ez}JbKteLEHtGD`x1{)ay ze%H0DKNoLL@J3uwT~tM_r76pmDPWu+KkNFJBkQ^xCSC(NZJllxr}1zy+1#O5ND`MM zrays;v$3rSR})moo>M|`)O=_{2Qpe9ow$PP(GYx@ad}YipT5EH5i|Mf{3aKNKSp z5bOe^)rGoA`rvjO5O;<>hs*Od2Dhb(d~BIADJ-iYli3sGg>oc)d+Vnhvs9l~Td~ z0OHi)FO{Lw{6*5!LWuR$XZF=0pcyG~heiF$;%IgZk0<@cqyb|VI=?ZLfD>^)B%<_B z#Ex(e9K387)~bOsu_Hqtfpq@>K_Jq3F4`RS^(90-%$D}$ z#^O=UB$8_?J}D+qDY8jV*`2r#Xgw^C5G1WAaC3Cxx)-g4kJ&+Vj&G?h-~_ZbU)*E~ z+8}`hrHLPzDt&%?x2Ppx-i6nb8u!vS8vyC@0V>X@Pr2mVP8y zbqC&J^9*1TAN}1g&^>DuwS|D{&CzfIaUKac#t}MwqhT_yTnrp6Ht=6yl+ynIRY*)u zatzqK+XZ_p0`j46nro`i?PS@^(H6UK66)l$ElWfhvDbxG6NuyhlR#|0WBx&I$eFEZ zE^rE@9``~ya^A`@hZzFY=dPnEf_$gXoxxVVIUet}d56KzEMtC+VF{r5Ps_){2q%@I zfD2{Sk_{w3mDKj-K|PiPbzhfPjh2(lGK)aS5Cn3c_B_tN|xeVIfqP zGZmsn+^L+Vp|o^eEwd~zZPk1`187oYOG(R5(O6v28HTBI#&(}4C1r&h-HreNr<0oC z07eYn39!H?td4L{EQ!ik&hS=joYNF{bzuq(XP>;JgI-w62NYncWu0{BAmuF%5L1g2SX}9wMC%O^P3E zF<48K0qTzlW%ZNX@iu^a7P&107NqfsYAzvgi&KMA==NwI4RL^x&MnD4MgIWtNL|{$ zRI*3}^*d_W2m$fG7@nsaRnNv;$|d!ZmGJ}_ANKu&Tu1hhBP@!0hXxC8b6Hyx zgFd1!5x0wg;3UYExMlX0JuKvRB^c>yjDr=fbdC;UcA5#{{T+^0MEo*sdD)klO467Eqvw%W9DSbvDhgNIEi)D)*sVO zHjfl~1uykMBZVM8LFH*$pT^Ag_{t~sMJS8&S9za2G}dl&xlTDgJ}LE12cO`~D9;gV zR2-6QZq}~h;H0HJei~%krTlDDJ%^?V%vwP`OA{_XZ-WnOBTmD zaSK@7iF&v}I$vpZDSVV4sLNS=vW%#OzF~pg{i+7y6ar{dObtaP0HrrRxi}EDx%oF- zD==V5DCFYqEZmaJpjcBxB>`9pHoRIKRi9by6cSDf7-#LY+JSwBh*sQ{>AKPO2)H&+2+LFsfce zBxRqbji4-6J3n1KMW2}D? z6R|Zaojsne%0pS5Qi4bE;OaKG*Y!U?*h_wPOBam-9y4OGNrO^(Dxu3zVg_D548$Lp zc`ny+6M&3lW_clZ~*iKwL6%46NsR=lSag=o{yOE#jHt}P* z4ioVZzO!PJuaoVl*5Sn08JQj+SiiN|Cy;MhJ>vjQ7#oLHuk9w8if>tU8sZgsY_-tD znx4d^GH0*za_RA5Mrej^Y7=A#pEPz6I2iQ~fBmXb3KEzV0oWzHxy%BoGNmC2K{ig>lGnT0BX+PhT8 z(JbvXDI#}n^)sYwDSyjbGg13k66sF5b5HqleG{^hmAFR$YcY1UZ3;`P$0h2BT899D@ zjqGeKvCi}KvsxCW>Ws6;M(x|*?e2S6_vMHv2kVP;gc4ctq`g$`O$g2P$~So1TV@vql9 zB`~)>dtq7qW3QwEfE|ROG@~|~z2i#`d2@=ABT8DNy0pyIF3IZ^7-|DO&&$>!JnaKH zg&b%@2u-C%II==Xr67EK3Gq;J9!5Ijc=HyI`0nX*2lEi~2m!&+pQkH?r(FmEI!qmj z0P=EV{58`V`1#oB7%s{JlX`%eL86B8p>%%fBCHR}uZ~VSl9vi~D%RZ~ z9%fm7R6W}FD5Xdp3HcCEe@83b8u!qo4l(yM)(K!k8Zgy5eiq z_TGqzIm@^LYRolur!wWiJA%fsFyZWDo=PFq1TC-LZ0YdA@ z{KgK=rtr3#0o_DG}ILU&UiYqmg6Q}-1js{9c?%ilM3cCl|`TdoInv?;s3b$?Y~Ta%jpEkG50t&6ZkXprR-kTmY>Op>txtCgU5pSkS3H{~gQ`YcegndzDg9O$9Z#PVoW|pr%bpk4D>H_l;t#@zjMax0YI~RoB{YtWYUNM+{&YQk0A^gM zoeZX~t^toQg^7TIvaI25hPqct36EOxzSD&Hf%{L$CEZ>!9;D#QjztWYn3I$Z^BUo4 zspUA2nUyl6zx)Oo*B>WvUmCNuYR5Ck0$dD|VMvAu!?-ybKZbRXG&V<;_<(&FHG%Y$ zSe7K2(phZ)4A@reH91wisrAhXzQwbNGTk33Lt2fO9ziT3|Ijn{Wztq zUCrixEQ7vBbqBF>O}zVM4-2(mn~96CYre@ZxAe}EFQr*qztv`znGh00vg{V$dP$9YJym$K_Cmc zNRk{@pXw2Dvl{oi02phRT(=;*)0MR9*q>97O5&C4q+@HFnb2%7$gQ~U6T;{^1D-r! zK2tV4yxisVJy)Pi&s)BiVM!*j^}IJ%I!5)Y?j+lp;{C+G`1zt;lKI4uO%h_Wg#FGq zXl`*QA+1NoZML`Q4b_h=i~Zc4CvIwSBO~il4*bs09r zs(ByLcm;lDq&9Ypd_8okzRbNNlmoMqdW?UCKhXZ3n?gH+!Z*_0#A~8){y0n>1E2Y*y#?YyR67miOB@S z&;2EvOuSm)Es zae$v3KO|tHoB>jP+l;xE$mdSUb)yhD+dlTel>Hms$zk@LW7SF8Mr_7Qsm>KHy{_X= zZ3$>7h0MhS@m8oEA$t!nY}cq-66y~RI#?n?X+)XAO8`Xh%a~2hz|x~69b}28d&@fI zwKO*Et5DosT206%fSuFSI_k}|6NmJwc@?DYr7T~cD`Im4KogVlK%KMe@>9Dd@<_E? zkBXlNiy=j8k%CgnJd@a^tLa}xnwH#uBz&Q-rOG*!e!;zDWYVEH^IGtE&}wLSYsYwT zpc`Aem60>6kO<}AWNHIXec-XAfKG38-TX@noMul^iyana3{`JUTmVlmI&Goff;yyj zE#oYk083{ENhzMja0Iax-Gc>0o$_X61SWcaC&f}Fs zlg-Z_ZAP7yf16NVY zvU{Z$b7(4j<+%p2MnD@GN|h-mf%4iYKG1AGo9=nA+6B}e?bMXs1ZBe zu7|pmIeB$^SZJ|bCTy=;t=hVgUM_roORknoxx(XdzO@OMtgxattff_Wad_>P%j&)W zemL*gLVmQ^eIEnPLhZsyyr*4vxoVl@p;rF@)GcnxU@qKWyLGm-0Y(_pBpe2>P*gxD z)Zwpv-$tFiB#ct$V?I3Uu0jQh!O$+$EDDOTlRA%?1$ZM)u)-#LOlfmY(koJ+B?u9| zdNb6eW44TAuYvf4V8nPk9D@eee{+pKGTgeNNP%@umOT1f`4w55Fefo*1k*T+sMYoh zULBQkqaC2i8-fd3K&ASPT@oY!6yU^}NCEbT*b?{w3Pl)YYx-k<8sgUoa=>M+LnQ|k zrbe$GiUph{sN0u7x~Nb&ZriU|TDLbaVA*3c0rkV(|!RrllQIg6zE;PT1H2n|7! zsQp3}OUeEsyiUgV0|f1Q z<3jOK7@vB^b@QRqEB@a=^-CUf8$4?rR!!*~5an=)5Em3R#s`F%7c%u~iL>E9L^kb$ zKoY7J<+<9dhyYRn;{HaxYuhy{`Yo+!u70yFQ~v;DxsbV&XJaM%dJU>z!y`4gCTFvc z$#jT#OHxA$a$?-M00mbNv3qWgmryKBP(F4QKHdzMb0~9@)%14i=cQ%NkH0JU-VH!= zQRGY6eFLi>%I`{`>Nb*Vqj`Rwp^!e0%xrO;&ZWd4-!?lzZpp#Khs3WgdC*7AHRXWE zH7Cp`eF`yVc>p(QLrg?n)EaubaBa-k&M37Cf3+sP*mYIUwOLGJ#rPVSN+1R)fDF^g zQS(T;N%l*aP241CCXmcaAOS2D=uXZ-KjAs}U&HO$ZD%UnT}gT+UcD_Jq4}2B=hY39 z593A7+5C%O@OChB>W^e&A_D-B*Hu4HvP5Y{(A44sSNNc7EO%z70MS#ugqhdcJ5P!_ zSBEQl>mQD{)-(3-?=Tfmf=~j1On)MRb5UEQHwb2rssYHOB%Ds7 zCO(AVQ=VbqJmKjrfDwvK6eOG{bx#R~YAXMX}Uys&H0HSE6Uft8abXd~qa06?rnRcYu z%cxcgBQoAgamzq;bf@7<>eK5=Z|qj@7)k-t$<|AKL+kNw6<%F_*H^a5pb#0us$s1} z01#BLzImx4Iq;Z8hD&!Nc571IlB}3mhAUHt8TQd^y5xodZD<7vInoYA1&~a)OhU}L zK4o-{dK1eBS*-q@nz9A$tQIc!atHgC1g8ewgH?5=9IF_qPVvskxZDNyXnc||9h1Q| z8+mvdnk^KkcPStxB4Et7WGYCc+mKQ5praa?&oUG1UVrLlinGvWW7eG7_VQ6t;}KAY z_B1?}TnG^{pxRy@t_)9ue0C?DU` zAczz~A^_*@XF|Ar8m+Z*{{Rx}$?4UmstvC-eJZJS$WaPhCQrG0j2y|IqtAz6mAuwC z0I}xn^3I3sYO9Zl+B_B*%4P*}uH3cKNC1?w>Fxp$Cx!xZc{H|Z4<%uhWuB1r{{U3$ zNwOeQOuW|7B%0LcBZ8$HU6WW00+j;$aN9)N&Bsb``Yoq{O(rMjH>}qm3NmxtKrpr5 zRd`CXHBMkMFJoSN@jgOs51eMICY6w$yQn*RX&P<@?2 zwBV+_sf@C3;2}t5`2PSRrU9h-hh@TpBOPyHCl^lUg5q+#G)~tkinw|6$qJ9D-PLCl zOf`mh9H^{Tr~3^TRQe<%?lCi5=<5+j=C9h6bu`BMiX^8hI81eQr}e01(`P z^khM}3Jgt0$z*O%+5Z3~kOwOUSuJWXE1U=f1+_3+IdqC}g3ED}GxPicU-YPfpt?Ad zMaA3@=84OR@gQNONjFm-N<6@1<04cyhCcz>B{jVUfBk$sq!muJC&nU<6eKZ~%$}*#9Sl=;zD_C^~ zK|v$jed(izodEL;u)nt4VOaw%L_%q5$xAR2I`dZnn?G%5dDF%1#twNkrXS0TpIxdB=~$F9iUZ4~HV^16OWFd>f}gNz_F^KG`xyPXNh4#>wA3 zNiQX#DrEhtAS_GKmtc^#6-ZlhuI96px#g4KMrzNi*w!S^o%x*7-@9AOaSG?a8t(3& z<2Qz@YOL{T981>5u&`?cv@-)g2A1+i0t0jW0i-LrVf*oooSu(1K%B^e9B!1Xu%=A}jl2|fllDwk6?A#W61e3x5t1sQP$g~R zzbe^RMMQkhj2Bz`u~umS@M^g8+<#c`sJ!(_TlPSeJ)0@g0Z=KbLSk$+xb^@9%F!Ss z-g#=jN0a-9?qdGjj%5nCsQ&wZi#LM`!j+R!%WU)6k3h}IQm@{C|K6o}zxCBUL z^Z_QC=OWF%kj^*?JCmA>SJuJDO76h0T&eQXX4l$yvYu!pE(+h@+Ro-fYg%Uocyo=uYZuC7b=JkTJx;FBRvS_w5ZygZSeE@9zi*?vlXNd#ioif3Ndd^VxOf$6)nJI z@RYaiaqd`VxjlBuId0Gney5lTs-*2U9Gx)q&sLt&W^6&>;UqS8A-)e z4#SA{OyMSOO2FJ-VJ0j4y#1o&uiQ<1gYJ`-@b;U_WN1C^$pX1k`1=0y}?Q&_o zI9a>-6A~s}Jm3P+<_5%M$N)G7S&Gs?Gpmv?`Cdd{?3-w;%MYIp@}<^=&ShIn*RjO& zD<#||li5)oX_+}`Ne0*McG%?*J??HA8rfzB#is;=Y0YH(;-?I>aSSUAwV#D!^d(Yp zam$dWE;_;-MeLAq4Beq?#JPJ%MqN{(<~_H3m6SLc`(_y`^R`yVs#j1= zB)2N6@{355F4t2l<~mdgD`?ka3Q0;VY@VvHB#J+`^;CGWQ2PugL6}Ms2ZD-+ZJ-25 z6A~4P-?G?e?IN73?^`V3#gVnwov!6eT71#Jhyf&eM%ChUVYU%Mqr#-6ub1zSaBto^opl2=6umW{>)Cv{s@ zB62|`r55wKlK$`U#Tr=sQE@zL52laXlE#|#r7-=&_bM6p;AaYZu*o?U@}VmlL8F%I zqD5fmfCz!x4zeI>iLPlgYqR_iAc0!gXi9Ui43;)*3XWqlP`Zcg>~{-jNnmi-CtB{-RP)K@+Ml849Uwb10snyAf4HiN5o#5DlsAD;~0erhf$VgWV51P z;^XB^eD%@HxCIn@NJ)T@1+^|Jl&1-D#d1QmWgN`C?Ee5!^x#WcPgV%cTzt12L!8Nf z3IT;Gt~gvIiZI^rAYhKQds>1df|u$$u{1O}1BHuone^otjkO+VRM;W%Ut_wA1mFRT zNnS;^E9_BfMZ(o_0{!!FZ{U$xxsvWDVLM_f<(Dx=*@Q98bNhWmQGFE%L`T-9`CZ4% zm4@fZwj%0-*)P8+-)XXu5TpBOFsb15tNdeTB$j6p5GW3E_A2*rk~`&g3m}sbeN1V$ z0A{gsj(KL8U^z9OJ-!K;%$S*W1|diFd4h;Bz#GXjSC0N}Z_=Ina2UAKRH@mQp$9K9 zAP1Lmfn>a0s6Z%OmL!;o-oV35um^OB;$1yHNX}-}B|S>OXIkP@zaXsVlLPIKY~KxI z{{Vf8rA}`yxD)SGsEXo}`4)n0F005wJ>nQ=E16m*O6dQCM&kDja&>l0+CSJzume9#%c}MmAr!*$U4qBCl3(r?F>#K9^$aFS#1r`oTvx zMI$I=^tMszk4q({=KEYc1V!rBl<@JIZK(je8&Fj9NP)tHot*f_Ym||D)F$uxtM86{ zugb9S0m<>>hcXnkU%`1hl4+r!(lTA~#AhSYSn=C0tBRJlEj>>1SAp}LTy~XX5B5YyGh)<=2bh5-j&(}Z&C7!rm*iA9V$_PT zAVyEd6wGDZgEBD1E~iJoi z(TeskyVlPBq1dG30aumQw`r(-KjL`nJ59#~;%dg*G#Q#lq*1@^dHpCGim$yv%)`%BXHyU5Ig$zJfvyS~fJ%CX7z5M)w?pLRHig8@B(*3kpNyyp?-WI08=0ia%E zd$Ev>BbD)9-ntOhfM*1a%4Wh_>Mx#m4n9UApc2_+SuD+$mz7-*r9c8%G~X&7rCP2N zxZhq~hS$zT>cH1h4MFTlY`Ufprsl9BXKe`-fY)}@dsDL9bZ{i^-k-tEP@hOz*sm06S8p_ZI?c4^>S=E>y@!jij)FN-U19v)Ew=+ zDwM0kdd+gLVLcSnQ7kCFR+@MbBq})zcO#eg(}l~~4UV**EAQ7Cl*Mo?b)l1I_+WP7 z@k%E?Pg#bPx?r3ea%&Ls2_80qq`(XHA+VM6u96T0LHqK|(Ch%QFBFp0kVB96B%JKW z_K58Or$^Sj@^|fOW>wBcWHVh&Ff8G~5m5TwISe@kR}}puF;;UNx`+Ehfw_R6Mj60_ z;%_{x{)Zqx%%H|Vrg|cvv@1v{5Y@irkZi%f|wZl0ayRfqA6%wq$ za1(ntN;x0^okkP;%>yxCtg0#?tx7z6%5`Lg9T`q{k`b#ftB|eXYWg*jejb+PFG*75 zf^B{%!6rC+hWtvP6dJgmHc$c;(nb#b{&P!D^W?YcEjiy+%Us*r^vT(5F%@R@Me;Oj z%+J<46usumt~WzBNYV10kq7qv4lU(Q%T|58fATGt;w$^5#_E)7H|*K#F0G7NQiM$; z{{WD3l}PptCoA?o@G`1Dr}VLtigs3H^Tp6RVDKO#@rMS#n*D#TKT&>LCe;V7RN@fV zxRlu_B7Px$^|j$xtT|s0PULys}?ET*z>{{S42l;q-tamy=tV;KPa z&UevjyW5lTGD$hq-lAbHvnO?k@KnGxNGRvRc1uE>3<2bpI$7rhQ5%j0^27FzhSukt3c#a~vGDG-$nbImiH8(9i72c-RPC|^2 z;=e6M?&Qw)<1JF-pz26Ofu{cecl=dJ&y7g5SN{OW10R!u%j5ern^FVpB$jIG;5wJ$ zdnh_wJSy9pd8hY4mI<~wwft(u+$Hid|rv?H_dM_gHv-u z4^7+;YZl_Z2x3gchV!Y0`X4m1a*<_uarq)6T-_@vh;b_kN%Q^W)j#JKncCoTqDX@qwKvdwTA)FG@v@M`LDuDa2&`L8Ad+%!e3OUz znN?Lok!hc5sP=@!zZ52|r>LuNI=sd6>n`D%jowdm;gp&b;B0|b6YMXW)X1;f zVM&-xqKUF=Aa=I^uiIsa3G*mT+a=*h79Y}li)al-a7t4A#u@Aq+JjoE*-$GUAR-Va z8&f%xXe=^?tF$W<%2t+3g-nxaPnIRc^)`k=ZN{~`Kf=XfL#@@w38=sv0|YGDX&e{322^}QZuvukl(2_asL3yald1-i){D=0eeIIn=k=IL(!v%ndAq;8;eCv35Mw=2NxTxevVie#>yV^Qut;R|N6&{~U z7RtC|eM%2Ee*l&dbG0?)sdUs43JzCun_IQJ*ci2}?UftJGxVZn36Wn`M>MqjMktia ztZ>GiyCBJTj{$z;VtjahCyT9j4rZeXZ>hKyV0ll5T23bCkOWVk)U{L+Fm-Mtl2SAQ z@eQmkl7VmHcQY!W4;L|q2goRqb%LiBc`wM=D;~oY9ls!y@}Pp|v%=WgtPnY??bhwL zGujrP9;?|!KF6oF0G%tIbbX|YlQvXJ^%wzQg63>6+<++~jlR9pnK@jYCd)mI3fdh^ z**dFr#Dtj=w+{#F-6aImX4VQTqc&7Yw_EZAnUWi@qzVnoB|ufVZg_A0WAXn0kzgZR zPB78CTlDYyhL6;3cGGl_rU`kHDc!@Ini9eDKOotM{sjA~-`>z9tU7=;yCoQB4*K&S zE8GfH1VP6iC)$5-8##D?Cb*N;&md^|LV*nyMU!ZJx}@PF$c#_r&#yht`^$gjr}Q7& zm5V-EuPK88MObhAl^+%)L^LpZtq?DGSZ_7~Ji*wtD z2hI$#qICSuub5QO6)bVWFP6#}71l2`7wR6X)f9%mwCnkb9<(d?T94(tzYzfepXJeJ za~7!mkNE~YoWJq=m*nU+0XfYB&ht}SG8Py$PDjK^_`@Q zZap}V)P*a{WL^b;{A~XKJnVG(c-*koi>=1d_fj2F2{-iidS};5uYb@EXZ6|4t>mqp z3Hsqoj{@9&p6j;@NLo$vW%^@~HwM0s#s2^X*v`Iqa&kK_h3yAF{eF?~jkjQfeuQWE zlcnOe4ZK%ktK}Id0Sdl^zE5c6ggE2O{DI;eI0i=_B_(H)fB;kT9gv^pkui5z`-p2 ze;*gVLre?{I5XVqoZ+PZ0E~~w*H=u!UuBA* z)>P$FSkvP^a+r*esWFvficgQ44~mY;0W8!Lc2v$s(Su8w6|KZ4V1WW zXK-%hDKE(^w(Ootew6%%A=xka5(L%oiFOD-sd!Pd_|5vti6EAc&YX4-Ff)%H$yLDl z^Eqk{^fh6=PY$?o+s7nOY5Q12=Vzy7D;mXrkB%2VTMEd`_?%lQ>tadOlaoudlw_Yu zlp_BC+nd|Lxd6p^ND($JeoMW!b`R!6CGs@3U-oV&M%5)K8JL!KyH~&Pb4Q9EnepB1 z0C?|}UT6Nv;Xc*!y{3kdVqLDfrwd#rNBfKd)i@pHd(B?H5?6K#kNL&T#9v)TPu}9U zw=8Mozs2BA8Zna_Y8(ip$<3)XT+ht^04d~5mChA@elKJbnIHo$^17;)gZ}_rsw>eX z${CN3knC9c3DnSkNAgA+h%@-lB`DZk?95+DH(+vVHx3lNqd&Y{eEes~!dZg{NF8U9*F=9*Qjajz!P{ZMV3EENdl;rffU zsoS~%#Case&42xHK|?1tg!OV&uf=#S>VR9V+Eo_F8tTBj&c`RoifCldYHsQ`832au z?cjK?h%;({lyKUB+8-mE?}uhQU&&WGz)ifvA1aD`m$RHZF5bmgH8!(95klxC8Mg$h z9jX=<7C0e}q$Ps+8^GD}D1{=nVT0yAN3rW{^G|>ZCE0A*_T%zM{X;At^W)`7;F^=* zYu|2X-~!wlk@IxXlP#Qrq4sH1p4{6ZPnw$T@2-?=4Mpw1Zx5{2kC9^+#r z8z$8s*{OTH0>_u~OZnEYm#;yCjG6L#zRANcKQ&ja%ps&iRhO=SPCc;hO}?z8SgR&3 z-p-RGBsdOhIv8zvu*i3{O*Ijrto6fUdMNBkVP=;WM+q(h zDdnFHH=Z~qO!X8yzw}h5LnL1-pOV!h_y)V=iNP7AL*!HKd%lJru+!)^&Oru6fSi7s zF#50?F!l9+r`mNau;@pc{{T$>J@kKRW<0M|@!yQXqeOtZSG%L+71Rf>DHHo{sotTw zfbA&Q)=+p-ljrS8OMu7+E!=!j`)gZF#YNQC^y#CBwpcLC== z#I{0X?C>Q&8xR2nPOwc&+CLxm=ZiJea1KrL(Q#x}P3A$Zv@l#iGvLR$a8Jzh#gN)r zE_``oTFlTP&-0g3m1NXn-1zNt#iVHSFz)DH1PHp9@y(lXAj1Bn{AoeQ>>6HY;zrRd z@jQ9|01>p0fstfC;x%(u7MnbG!!thyh<+>hGuu?TOTL2t0FK~N2*Dm(KB)zO=h{WC z)rG4PM2ydj)UsHWilIOfJ|ykH2=>V329f#|t3U5M9j*T9bM!UuG?FTDB2X<~vV3-h z{{Y&KYxo|S!XHAPr~DJ+ieP|-0Ds_mM=+A0QHwuKwL`>3Sn&S@ze!ds5=Fm*KTDtaVK<2q{{Txfj^Ae7kBR*=pRb;6{Dbt({{UUS(D0-5v;P3q zvhuIe>iY?4ubBtwCe)VJd(&WX`enTr^$@ItKT7sxo-AjB`d;zNN7(Xz(wq{=N!*P8 z08G{lAR^C*{V1Zm9{@iY`cCzJSqA6F{+OKaAO8RVKlIt7%Q*a%Z|SAMfi#yO$H4Zy zKFL_%?}TmxCG|dhU%@wR;z1@y!1xEqI~EvESCamjZD=y(N7sz~Gs?5{sy`|}PIi-r z+MH$Q{1@Z|vp?t0_zvw{zx<4RBWwQvhaN-Bd;?^8&;CS1^yg&UH>>P~KTLP5FQteU z5&BlZSrgx!mA|IU6A+!;iGQa%lg}Ig_#dVF*5HqhIOp`gav2zw?1-z~u#s^UumY7ps*5w8G~c-x1Qz0M+Z;f=9-1R~wTNdW`tP z_;SL39O=IdNE48NXeTwd1{@lH9F?q0r;PF+gzC>CSyAvWhiaql`T}B);cz#H6(2wN z91W-d@M0PGp0a!qVsap>;gO3lD@l=O;JU7A2M?I|rnX=r>LLU9bmzn{Mm{s(^NIwF zo8Wu`P-oy=g#HYLcH;tA^FIsb2Z0>%f5IMu0Q<>!?}u6^_OK!I9|YMog@SjHd}AlY zd6)ZtVg3*54gk#?iG`4tinE}2a&Q3v=ScIwh;#EF8F=UNBIElN*a5~&um`KyxB)=d z7@m&tX96M;&Z_?apblk`4~*jCXmPkY1j zt0&-mZifC&pnO)ch;Y?R2|R3K+EtJKKhOr3WI^|jr(4BouNQ#El;kZDt^f76Xrn?g88u1Cd9-_NE3z zVgerqsZ){WzvZ6`xR0`ytOl=&>|`PO4q%NA(B5D&H^TT<>@&>g>n;nV^pz&{}~Z}X3=d7P|7 zasL2=To;rLs0>M88?S0;OC3f4KT@#a-Gi6*Q|0djg0g;pVPv=$oZa>3(UyM5y!$`? zh2|@(@y9M+Pp-PJ#AhNE{Bqzw%5(ES9H;%gR%gfQn4ihBm}4^FLmX4f%%lBqLS6** z7JmaTF#(bP050)bs?;64S)ViQ2z8K<`H6NwkYVf33YTE!nBjyTV`71S`EoHNc-Gs2 z#Pkxu`e=`rU3nsAfr4NRV~BB!p>eG=5U74Zv{(R#3;=weY9>S_fXg>~L(6h)&U_8E z947!z2}&X$#Tz9vkdfs70C?O0@a99~wlz10 zVUcE!iEDn8OCjg~02bEc?487XpW*siKhuDCkApxQxU2hf@mUlc#6HTehU-Ct+@Q!~ zL#!PC0AKJiX}ydQc8&x7GsOP@8UFyQRq<(MV7z$nhZ>=lgfRaACCvHw*mJ&VI`eA& zn4jvjGL|WMn2QbxYBDne@{JM(S2Pklw;H`v@Cnnc>?UdA?-Rsdj9&|g*j=$0c#nt& zOHVO<3||B_JQ(P*B%M0MIbkARPp3(9;ei!9viSQI5HSUcoAIxUZ9g~G z2Q=tkuie0en-PO%pV^TLqOzUKY6L_Zxjn?@D@PMcK03M_4?g0fYZEnqo@z4;z;e)7 z`XOsKIFP|BRx{>z64X3;o5R@lb)wZCQr1Di-*|BeOPVF1kCSpM*sUSSsWNTPWkfky zW6C9ahlfY?KTnXya44`W)Z|tt!1%2a0~LcZ@lc_>j70H_{$j*sM&7zFC#JW$``1`#b-Z{_qqTC;XTjt|N7 z=rb3rR6bu=8x055l@sj-Br*97`rF3fz@^#qNAX||2eOyZ7V9A%j>}1?7P*HGV0OoGgvgT2g+Ndr8PbO0P4i+L<*kK zz+aTl)L70P;$)w#P2v7IyH?OMA}|^KQZ;iV`G|3fgBVxl%{>w=q6dumR;8cRIN~0C zJvNfCT-7GEhn~?9AY=k-o$g-Xo4{KmF$1KSf5=5s!!Q7k+v7d3hJa za@>O`G3{dWI_C!d1Bp_6hmRt5vEj)70PrEEOP(ZO?fZA~NfP`Ys_wvu9yqh({8E2J zLT94tUl#J>?N}%H0xXoe>Pf~190WA)9Jc`6eV({Jg9Ong=UbI8j&MAgs{a6N^?obW zELZr?$iHjApZ#72kt)dK)%Y?n`XUL$JjSVnvinf-4M-_tmMa4$ zI4=>YSmgQ7^Z^3}fsj@M!;Q+RB5KBbWED{EU`pWi7=e?3v*01^Uo@zEw_L`#AgN6J zDBbp8bK@R85~ruP{c{KtIjjf6*I~FaF~JdQQaBJG;;-77LH%(2ajU|b-XZy8R!BiPZXH)Yqj%#{_i0EUu%?UeyfUH8{EKU`uB0Rr5s5rLK#;+# zR31H>eqdwFJRI-)4LATK|0+JXKtaq-(N!5<83c?uuBJY$}} z7z|f=uL0^7d<<3q-g16uZHd_zmwDa&H1>>Fq+lw$+syehQLckFe9p{1F|=P*8qj^wsCjCx6&~ zz*a^9%)n^)3TMajL6?vC9ROj4IYsCE8s5%1An|_)&;I~=ywAY-2PIH^r}(Af04s2C zli}46k8u(C1nbu1K}qvzr;}?7Lt!t_-THf|P5`E%+)woUL52lUV87sePx*F0ar$$Q zvB^=N1N6%TUtZRHm*LvER$!H3lr9N%_!G_)uRYa@2u^S{aN^Eb*Wqfr3ZooDShg@(u zpNntn!+68s{3`MMoF&CS4#Pt@8BdZv9V1X8N-=1B2lD&;xI6Ue0%RpwaSw_@to8M9 z@?VanJ-_4Nv!9EkarOB9(eaEJ3qFU0{{RiwVCc`PN0;oE3(Q#{FyY(US#g{o;MF31 zfwcJw$up(60LxSdvX?2Bo?0NSuGQJW zvH}zvL2Ee={{YSZ0B4H2QW>VN%@hR^4;ucB6%iz{im=w?5C-1>i9mM0w%`TPNnSu2 zeV}TWfdbk&7JNnndR;0*x`2(S#w=i}74 zfjHuB`X8w~4+(G&j$SQ4x>bGcLLuS2j?dS;MeQ`tg>D);n~t3 zeAp2N8fKRhv!;=`!%W)mF8F@9tL4bSHGDs6tCccHavLv?yuu+@&>bHb&AAh-I1l`G zcH(f3te=}5KFL*4&a{Bb@%#?8rom~ts4tTO20xxzLvU%qu*cM)D+g20hGoytkSH7G zaf1>_HA0ueM>EI}my+uEubxDF2_8=p0s;e^!1}|NiOY*P=3i!oTAoq?v$Qos(8a?wdj%j#paLwG+g(e;vtS!?lES{9-~6?u0qh@l;opcZp}i)2*yg z0d;tp7@#DtfdQWxn>7X)YUILDM!E1~fiQVBl7h(c6u+p!fNVxj3CM^MV?ldKS@5O$cU-1*42gZpO50Q)#JwZsJ0+Vz`-E;BP;0ay@M1|E6J zAAw|ql7D>M*7+LD`*`scE+@5Ql{mP5+d$GS3<8MJM5I6hu$_R(zueSf%Hf@Y4Xliv zvVv~V56{THO$(k0>S-3%EZSd%B!bsU#XUm8HdgH&PT2Q_7)O@;QhJ@k+IAiP02#hi zsmV3u!%TIs+Ufe_9Mj-*o zIQervyeve(vO=^6}P!p26U(gIL9e2ea&j3&C<8KS4Uo+S(70j!l1ya7*IMEJZ^%Yk>V@Vh8QP+=jL@->-u7dn~0p;BmrJB9DRr5 z{isGn_&7_D1dVwl%PTC)jOX#R0NJ1D;`#%M`r6J%K?oWQ7xrlo6IdPtDg}Vwt)8YR z%sznhP)?31Z*e~k7rPne2d>lJbr6v-MD-Ss?Qv~0r~R)!Mz~Q#{=dnozD6%$1xNBo_~>1bj>O+^Ovz-eS2?E;)Z0Dz(1x z_MamYk;&sa8AOZK_=|7C)f#c8F*lZ<(u&)nHe5WoviTc@;_Nj&^J(}(-{)J;8a4?zt zqk)FCj$!8q{5-?UlfB@%ZPZx?aMtFqz;v+2w zlKW$lrPD7F%Cp0_3LFqcm2qh|1WA?OZ8fWbRTc$eW?zxaWS#^07$6kDV~6s_tj^w9 zEOi<%3>6m~4jqGAQ^)gWpDIZt4}(Kaw%bN2ZWw2;craBl;0EYo=1!t;yVfL0uKvw8b;0G`}Xj|u?h zPH28r>qsgtg2{O4T&4XnU)7j0c>pyQ3tgdg*vmk2pp!waYo)=ri2>@OdqRqq2R8(< zrI6vClsC7NlEOW%wIM!TvP#0O-ltzWn*EA6Gv|6wXr!3Q=SRx{UaO9LJxlpst2|$1 zOhB{e+62oxOI2r({-8;4QG?f(34bw6h@z99nOpjclg#TzrNkSLnBVlGhl(Ue>V%__ z7ATz7ex+*AfTa?@9y9eNHG!I8%7}h(u`H*nUJaanevj_!lj*Yj=qArwjeHUMg@Jev zqy|Uxy>VpCx^Xdw<+?w8YvN zF4OzP+O3k6*+2QbTHqDI)24anw}Xf)s^>y|Em%CQ$rVbFeE@=gAqKDT;l z^BY@QpJtb2fHx~s(jOKZa=z`#7=J-EnXu~U=2ig`_06XW~*A6dmzd4I|HGLPFp zSQ7k#smy6y>gj*XGG;*>IX?sDnHTliuC-C~jH<9wsY_JPnQp?Y)0z^m8TyyBD~ycP zArH>tw-Eawz_R^y5;rIn+&0d}p(%7&S>N*=28z`}u{IKZWvwh31ixy3%>ZSb7p+DQ zAE?`3#LENRztjrrJR55T`K|p%3vKgmEoFf+G7eIX3hkSr6iY_0N~` zBg_cH`*DvmS0p#_GxAKOqsU0SmjPHe*KgyDWca`MGbPS$5auR%l@8A=en*)Zz!q8l zqo5!~4g&55SIdF6Q9m)2@*orY@zPFAoWOuetyDeZN|e6Z6P{}8R!F^9sL0H*<0Z>- zp~(G_>XsNRwD^p&pd~QDmxDNPYGHR0UPMc6tIDMk{!ASfTag0}BIpbY@hlI6 zkQ|mW8Ofs^OcCaI^MzmA%=uv~U@$~6k?{=aGW@)){Ezs@*4-0t3=Y zU|m1XGo}fU(@BSE=vY|h;rl2xd6nkk9!g$7&^;g@dCzi7kl+cJTUH#0%&duI1RX+a z8oPeah$NQP&MN-^TA}uXxkJOiMOdi#enM-ZMnBp)0Kz$oOb?4aIl;8|m@8;lCU+!A z@kYhX5&$2eMR)a&5&KYs=6#(OFZ`lomGMe*{aXTi;Mp&!+GdWC;hi(9IAmq^u96@JT`IO*T zTqPVRKgY{?7DV2df^o}B>DBBFR=0;D6_{mnyl5;Q;s!P{v`_nSRTV8OOMbkI;nH-e z>^{;*#kF7W>wp*S(knbYQOAKN6W|~92D*>IAfXQ`*C0tiKtLe_oRL01K#e2RbUXJB z{4-l=pqhNLB@>JAC2$w7)pX&&)(eucdVt&c1d{d`9ZX?<)i`h+W0M#3UaVGOO84aEnN$6{?ve5L-{gXxKj8LFi8qU^NxDB3NFFeG}I1!O>%D>P505o7LeJD@a_=Z5P z0L&S+6k>Xwwy43<2E<=SvZ4{;^nZv5lQ3cl@1F&SF@l3U4-v&!`!LH%o(q~)N)4YO zlg@S-6e^-W2d62>d$GQ zK6$>X>zpedGf}u?(&S9O=!4{%w*LTGQN`3}xF=E2uAsYX)=BrN>el>{xn~i`i%UN( zWq;fX9#`)+o{M{GQ3>zsbVV<=W#l_oYfLjW&gREaLpw>OlSazXF$U}myd9MRmZ^6a zk3wiE@>s!*3^L+pN8_EM+mZk?0X8zE05~`kI@}VqG#_?rT?lC$`NL(x-D%9?1gkWl zn9xlbb`IB?-SrRRyp`)910X9=OuG?D(A>7`y;_Ad@ec;^RLygh{yuk@lmjlFoTlrx zon&ba9%FyEZ_pZmJVtj7d2peCS;pW@LAy3_TQ|O{9D4##rrr3Zpbx=#_k60P!&uLO z25h>zijKrP8@u?GE|#8?u8o0<3SXqt7Rabm0Fb{Z8q@Sn`%xat2K287$1RsT3Ig@d zk#JjCRW>@8+O|Dc(50yGlY#1CQypAdyjGL$8ak<9ZuSAeyD$M;DATPcTe(Sb1I&6{;Nyl5N9Jb3gA}L83~2P51QYeZ8YdU;tw=`sHxdJ zBK9%bwmw%E8o&wJsjD+dhz<`O3iq5Q9T)(>^I^2#fl1Ey^pv$WYy7PzvTQI9k8U2zvCQOm*k{;9pQ6tst$@0iFL zZd(z~HT?eoTZ|R}M>x;wV%?Ai$lL`VKYEy>mLoqG`hkPwrzq4o{YZSy1)?OpfAtq? z>^Fow9Dgdj7EW@p&R>=8+_4NKGMK(ci9@;L)LHpM+p<&3^O1ivmpB6`eK4=*_JAHD zm(6d_wj}jon#CC>=MPp*hZiKH^#O#iPIb5wqvUn$DjFsnr^|j-f8IT4rV~fYt?WJ; z^fkKO=#ja1k@lnH@~4Oo=1KV^t^i4qc_k9pDZZ_$`*ZTB6`mBddY8M?I~ZTPffL&3 z=4T(=#C$)I==w;>qsv?JEj8AJ-on7w2X=n3kua~~kTry7_vU^btsI&5pB<0KH9#Cd z@rP|bKIu?2^A4`LMHxR}i_H3`jzsPRd6Z)8Dme~iWm>s-pCWKFSMYMUiY!X72iubg z&ZdK$VnO8YU8DB05%NfYl1&aH;6lUTW?xfQbc%U$#e5@36^lv*XNj!eUWBU92fNm9HN0GVNwW>q~Tc@ z5BB<1mP3Ik3GgwbteUgUI_Iera4^A^k78l=O%w1nHK8H}!yXh_08wQ5HPRWM9IQzv~3U0Iw-Y-NA zK?4g1;Cx3Q!4nb4GvU%vku*_(Ec_R^%lk`(9|Hv*OiX+ag=W@&bpjdx0E4BmeF<`I zJ|6_;ujhfup!Gq(4dwxU3h>(&MhE*gXQ?v*=PLb=_YH6Xw1dZd zEGK?26lI=ExR#a+WSj*{uUzN!i$omQr>g`dSc!$PEB#sl6{PFF4B3K+aA1rqpT-p4HwT%_wus!t9@#KbUVQ+E(9axqjtU4kKMB z(ihO0#5nRuZ?2k&VC2ROzc*rNtrX7QN%?it?Md{c#%=HFgfpzB(nzXGU)4OTBvna+ z@c#f-CFnJpi?=_jSRhd^R1WcN$Rt9MvA5q=e^EYD$LX7yzM1n2&oZUkRhp~$ zro~Q96L;b9UB_Q(|}lTLV55@9Q70e(NRMTtj_6m6W}4olY_ z=F7Cdq*mT9^7rbi%UlN4C=3o?%C0kCv0S$`Dph8tY_FU-q>K~s{{Wa{N{yE_VcsWg zRe3Nk#C5BF77OWVhCV=vRypcWjK3~L4@`_#IJ5FtHWkYC~O$=E@QlJ|G3iYLP)mx}wG-yOZwgNwSAuK?xb)nSzH z7CT&d8uy=O%3_4xT*&`++N;Oq~HMHggJp(1M_o>kDISFqU`k;NSVkvxXBnae8U z=Ep&r91c<&f+)61aV2M;ze8&~Cmhgf7_@Q<8ha&Rj-*v3a)X`RDb?bIo7~(9FSlNf z2^EKxI_mv@!?{SF9(X58NbwtjPC8Q3VE*FDe;H*+`BpF~Au=vVt}pgK$=S;q!N{~Z z>#}pz%z&D&S%k3@JUHss)Z9?-Q|(KaD#+(OrQ*p2%myAs0_O$P?5iZ-qviqAflP`8_;#&T$JHwEk>!8kx-wH&MxDRND!IIvOs;0X!^d=D5f*UOL&)6Nn-+K;!=Ax zPHCNC;=+m_&mY$0?^zGF5BeH?_Ef=oX@9AOg{ulmj!D`>5}qn=GNAo{sG2D-Nk|I7 zwP_O-%i0R$?x9@w%5w;$1yky9D=xrSO#7b>N>8>!=)UAUWkS!$6!ImkHIy zO8)>xA!AvAgA}2M*J7Lgh%J4uK4ZwbWeoCDOOrLrGdByq zm1-gdt19At7%U7wk1!JcILTuq?12XWNaM|(>sO}W7AuoO^%rsmqt|RHP(}KqyS3m? zqadojW4*N}l~(jAn^xC)X0vSYcffYMw}0{NjTv+oNu&joK&60upFoKvlcs#IE22UG zQpEA*s)~3PeS>htCG^KfAz05k0j>vEnvz_!=Nsb6q0my}t z;mocNW=)Vp=OBWF3{{Ye~MCMSO366bp`T_p{VWL^$4q&grZv4vwIhe8G z!;y&R#o;Y7&u%a-s#!>w%JKnoH8m|Rp3!fb{AF4G-@m@L6F&!eb+Dv3zSSf%ww`5< zGSXtPy>`z4rO)UCEyIr+gP8<8Yze?h^Q<~lr$rFKMbybG>Ue*cwd+SQtA2s;; zSW3%7AdSz(D`CA!o)c*j(A7lIdN?`Pp2=w18{mEvnmVBe+Nc-jO z_0dVdr;SSaaY+Jfhdv$p{v3!J}V}0azGpU|h}< z!$8FKm)w!se&3%-aW^MMLBycdRka*tCQJ3$>wcbH#Ib$bSy*Mn&%@g6ft*57=LW}X zK7VqXSa>LYb6;Lm`3j#kUn*T6d1!rkwfSfQLDR_d8opWb4V9{B>(7h6aZ`avynL%`&m16`5RSn>IkbOo|=!-$6 zkyq)B^$kjq@R|5|wNDky3naYO(^6g~$?_S1&@EB+lOB|5N`DU0LdCPxw(H~P$$WAR+O2NFqeB`9p$IvRxk+{ktw@l4eXxIdy(bCvb{539wN-P1 zBt9Vo|0i9L9~?(c?L*`O83I~#%Pe-9?6MdV#6O| z>*ApOy>}018^@As$;pON?Xu`cUQ)#ztX%n18E6`-aqQ)l#tCC>U+tC9%N6{c$2b#t z*sI?f2GuHfq}(BN_!bxiE!Svc+H3eQ}HpU z!251z!Jp#EGCkkgO=~A-u+l-R9x?TYFflM5$;zQ+xiM7_Hn>S3&~CeAdfm+;@g8+| z9(&MS0;rruPQsQggD~+NpFZtsJ6ztXfdjJDUq$5Z0;$;%f(Z_YIX9dc?QHn;(sAw{ z=O{rc!ZLTuj$Dg{5Yf()!6Y!gx!uc;n8N+q1Gvx2wQ{MPvpF@m(>?hfk>DS;$xN-0-p>&7{(I` zYn;Quyat0yi;tS8nC>-3#`70fFC?EH;Qd9~vV8%hzJXQusR`;YJ1;NH`Q(DrPa!kH zyq1l1NhYd}X1smjzleaFSf&2}1%V7!u;k+}#hWaLT;+B zfo8W&{e(!Up5AK6G$?$eW`iWAg~eVK>r~wNMcW_hnRH|YZ_i>9O8(g@*ii8zt0EKa zP!A(@2kTF{a4-SC#x^^XlMQ%@@RR0`_e_%sxhVOL8vg*kA3^(~D}Nwp2(;Eb&GdPS zsy7=FJcixw23Pi|`&av|%W3+&{6WH8JEi01HYl9S)0F)E{{UtU9>d9sY7K`|i9zI< z#ZMk>`Z#`Fe3=wbeA8FUq1y-1)JXG5@j#(+-AcRX*?cu>ki|8v9$+t4w=#DE{5st$ zh#aF5(ffOVRw_%nvm>?@RsvlIr)`7tN&1blY_#TUnx7N%ACqh_a|KJwq`z@Irh%y(ne)BexCK-6 z;IH*YLW>BGRMI;BUAw()n;Q?8G_ zbxHu=jW^rc{;1WuSp;*O!6)k$_DTI`=|PQy^&e<3I%`Q?$NGnGU_Pe-Y5t;a=%JvP zmDRQ0?WjkplL<%SpFF~i({BltH*@n+`c42tChwD8V^FL}3JsO=pA;D+b-y|JHnh~G zP!6B|d%J8Erny76{&Vt44Olu9@Mq2K6!d|Z7Cw9Ou)={`1%@B7C)$ZsvHe51 zs_1Q^BL4uIY-dT7+lF}$%I|CF7S`c9K1s2oCD_wELGmM<`f`0wzf8J z)DMtLi$G_Qo=^I(f7KkKR%oy0A119W!fy42CqubZ{g9Jt`Bd}OQXFT+pC@3wT_jyP z@0jj%^(w{}L%uDtUfbiE%gl%m=O3vxY$$Sd4&$t6%AZgMA31Z&-h7pV;w#AI)29cL zZMN>TtW*7WwrqTi9gqP-RpT56Z2*LPf-HZ#z;X;u$Nuz}<29?UM5xpvX_oYv8*({T zVWGdyOQd}%8o*~BZCWvK897)_jMYkvVcY@0dc92i+&x{XiPGb^2P`|}%&${whz&Wb zRYo|aLPf2VWXN5KSQXuC+}_@jCofI3sbt)1-HHDIXW`9G7c_%fku(#Fn40jacu=0A z&wT7rqhMSaLCzq<&yKH5@g;lh~taV&+3qO{IyS4x2<LK;xw)eT$pJi@KNR?*8mWK zmAbHR2WEUJGRXPNxwnW*B=jeN5afqP>g-%>YaT!4PUQn|Seclp*r0U%lDfM^X4t?* zIb}mQ0fF^6Wgwu8xsD{aUa-W)hO{#DEg+NZr(F?^6m;^-adqZqO=_^~Q+3P1r~?J9 zfss%?(oJgne@K#K?4#X*OH#}k$&#U_6yl&K1y~$3-fZcAqfE}qr4D-~`+c^Uw0zDi zc2dyKnAsS=`_e+2ZGfbmvh0>2s>=3Qp0G%VnV0<2Z{vqgwr9|bXA|=lpR^}QmRihX zv0WPS1i>ojs7e&FXw>e=F=5_ zALE}n@Xp}_4nAG|xOW8L&TvHFBq5x&62NSr&AbdMeD9nlF?hZmR9LhrwDIPC!=d`p zJSl(Tnx6L=x#&6n0J^<^b3DOpMe7op&@Ejno^RXC+lriR2zp_>b?LW67j1$6x?RPSs{2nA81G&%LLG3!C#@)kKg* zJTu|3W9zWT@uL#GhShRnf(>c2no>S9`d>K(9xUi+v~hqD#OtL5@@W|Bdc?_NKTzzA zf@O|4!jkN%e_{^GoEvHqJU_@zA5n)C%oq-i7%#a+YBRi7f?T=k^fm~n&Sc~WVak$U zd`SNQ_ZIMQ5C@%TQgZI!?yD$10HtS>6LI2RbpA~E`zvv0HQ>BPfTbd0o%iB&R8hmU z&nj`#Ev=SIZCMwH(_@*gDI8 zYpwYKwOYp-JlA|okK; z&yGtt%bqUS?{l&~%N6%eytBts0j4z}0>9*NC8yY+D-|$@>RWidp@T2HQHfkGK7KZb z)DAU=;O*egkrvPRF9@a;ULU|P5*SlLf>8VL^nC#FHe9)9{*`x(_RiDnrf~qy=0z}o zC(oJLMfjLYlQv@7zp)J!3oXA}kyCj%o$}{``a(`VC*)>%!d%qy(?q(m>PYw<)8Vec zGA|0c%uk4tYN&9do{k{Rjg^1BU>;RxN`A8MpfWNrb&tN9kWtNdlcPYjUo2G61u>gA$TxD0SqbScFh zGmj0HHL7KKi=Jm)9=-yWP&{MXB+QEifJi^3M$AwzBvuZEN&zk_#D##tb5Z9Dt?f{k zFuJ``YMyfbbF`rbvhD8bp|DVb1bbjh#%MQxZb(4o5cR*++rCP9q=>j{zD@EyjHypD zOjve7lqmTulDiVKc2md!?i}(m&u))NMOAm15&67=jf2EL**Mo)tO>{>&mB{X3KCFu z`)F=kfyPyZoj`<(uxtb-FI=3#`#;XCnE|&cOAJz8z^DO{YrsT(jCo#99iS9`F%$Ll z13}%+)7%fDgx4b0PuV4_A$vq9pB(aPZAX-%Emlm1yz>QXV6Cdl)ZUlW11L?dS4jPB zJ$D9nAASX5uBvR;_oj$J*>lq-6Fwf2W)8TrNysjUOaPPu1uB4+bEU_PZWJBSg3U(Y zC1n}<$v^IN8$=5r>~%d%1#lE0lC4I3&kx!@wkNbX65p{5xBGB;_UMNoAPO^XX%(rw z$09@mDsfTy)m91>Gc$=MA7ETvzhG{Pv95*8+y|S7GA!gBaIMUHCE5w4S%04o)j-&x zx0m@D_SMsa*mDA@dfZo3$#*R->WHbilLj*t{{X0dhOTha#B8r<&86EDq~{J5sMcm<*wN5YK^a_UJE3| zDakdRbroA};Vyy`Rzj%}YSPM7ITY#Qx?bZiTg2+?OZ~jNv>CQAp+<#B)7ZA=;M0ov zn$UBH6>GqX49XdAw|v9qElF0K8lFX`+1#P}Xi1+Kvb1=lR5Tu(%*@_J)lw);jz3(Q zkX#O(Cz1Tw1_^X!^eB8n88iJCijzKbDbFfQLkY&Za|3TP@?1DE-P$GNwcR-3lQy>~ z%)X=jax=Z`y|bVq1iD#pXe9+_oY6bT%-lhr8DzJBOxUtMGK!*jcBIBkBm*YdesqRFw-HH?Fid?;>b*xGZ2aRTFNg9N4=GQXo&@1LyJtXqh^+-*~w`8{ioA~}n z&>&b2a4(a+>@>kN4+w3q)g-l`Y0Xr1Nj?D?^DySx2Dfc-GNIQyUg-)KKEDD0l+A%J z-ZQl`59%HTj*be!8o^7-KO!JA1;6n7pZ$98YR;w>G2#t`AWLbuDXaXTPI)!W#R;}p z+701$RU?1_+?waJSjj0ahSBsD0X?E3d9NG|M%;}Z2JE!e_vAZo+re7rkY~?#RBLMy z-qz9AJCf9pATyNPDKFk;Pb+S^p~Wf;i?*|l91-y!5tW}VBhpM!(T#bI%m>besfwCM zd60PL*2P?#TJ3jjCnrc;X;XRiV+W0nbI<+q-E!@12KI4Zn7|4|3^0CeYgiDR+VcX! z*k)(P=>Gsrem{v)tKSzlT+Dk)OOF{J)G&YTTGE9^B2;4>M#SOXCM#HzYXwpxf~I%lST1m#vw=+33{m%21X;2s$8BAJb;oCATlndzs9O(Y7Ynx zrDlL7s1j#{=b69yc#u7eBQq+4q#n%C{f!_8wt~6Dn(@}L9Aro7zy=;pxsCED+m$AnVjHVOh0QBrhC!o8(_NgNXZvp>C4-nPzL!a{l#!r*-Ux}!P#o$QKD^ZCO%$Oh}jH!$UK#y{{SqPlb$M&ho2K#GmvqJ{bCLN=T34b_X=^WfqLf1cAI#+?UUrmCOt~6#I{KQ*n@Y4#<#no^CEy*(~&Z7f%NqGs~vY^}00-?sX z(_eGz&P{qlO2qQt#C6#u(bm>-O5Z7nD9QO+_Eb0s&7_(%2y^8!K0u8ERPgOjB`pE1 z{HP8CP{`H&uZBeSNY~_mzkv6vyv>N5zTAongG~5&UDzfb7dhmUTZ5?cKiJ;P)X762 zC@f$cWD6d2A!eKxP&7Q87--_R2ziZ4Mt^q1^B3vUMn|$tadwGn#tcE;K3&C3E>rN9 zeO^ID^>F$8y!HkpZ0gxj07vGhQ}|SsqfXDyIN|RqB$0ye`^=5S1wLA{CsS6XLe+*uvU841Xca6d54;ef!qhop`7u---H>;r~p%o!?MXh zgA`298Jg?Kuh&yScj86}gTBVFsy2m9z<<d}4tO$0xxmv?ZL=3N7v#nOiusj#< ziG0(o=oFu)@`A@&_onTt%L-rCbG!1nhH#@D&gZ zc<91|3NHaNhtN22k;Zn_OR#AR+LIwn(iiq9vHpgtZ;eENEvNTEkH-zM6HUskab>|kDIu9by;ZHN5VYMx8_K*Fkwn1A_x}J?>XquLzQceE>1PKJiMViR zq$W%&69;7})375o0}by*tZR)_q=9_~4)=lc>_KgxhHdOpFyTpxiaH*_aP{t_@;LYjm|cG`u*NAgf)Pflqo#o+3sqjp}n{3m`*YViQBI0 zJPF??Q3Qxfm6GOU`^_u>F*Hp4O5}ZW~g}l4-qm!Bk9CE zw;9=eDSYw=3$`cSEk9WBG6~5Ry;)&0`b#ZZ)zWLb-t>dDXlcQ5qQtL~i zAoiLrt30^pw>cMv&=D#Ft3FSwaXgt%AQ@ANxY{v@u1eisi0z6@#_u)kpM3N#YT7+0rM_|D(cT-l;&oHN@AcQLOXDHc?b#* z?8;=M8RFNUYdSv=6R;joBCTBOc(x`hJLf!?~;#%s?owryq&_Ile((6XSzh z@tg^B&yRHV;(-t7@zPa{pZQ_*tECb?- zum=Qes#+peGCW=V%~=Hh0O||Q1L(PO$1`UTS1&ZotO22vHiP0!t2(wkH6-8JMV{=Yk*;8W`kAsZSy) zDzNt?lFW4uBgDBh;=i%ZZHoj$%hYn#prO1=>M#AzGc|2QRZWD+NQW!W-$JF3Vw1FhaxJ_^Vt_`C)eUwWQrCzb^ zR)Lzmpdtj4-MH02eZNh)<|+XR!*99XSy29s`!=CCfN? zc7akN(Pp(ZpLc1AbJz<7E}RUO%%`=OXfrdm7bFCL)@7EF{{W0Z$2rQf9=LU71Bw_; zao`IqIYGQSg;~Zx5Aw+a4Tg?$f4Xx+NV}BKRH?#@{{SvNAkK$yNqq|!>acs&fEt7$@Z)Y0#3V4b$$j=y`kQQg|5fJ6!(ZCg)my2}$$~t*@QzdD;@#3qR^u_)lF|L*> z#U|^h4qNsmtDbqAgYgk_;3TFfvViFU!4_NkXG4`8db9o%5XZwcDs%aZEKqXJms zEUEL5Rt)eTEVNNF{{Y%dvkNB{I+|{H2s591c1B$d!)IO;s+KUMM1I?D#pOdr;7<)( zr6;*a5hk0FCL8T5wu850B@Ho!V>o5Ol5|$3L2EMfE2PP$a+;0CgW?lWKx2)ggaxGJ zyM)RzAY=aM^^~RoT41wUPx3k*ED&L1*d2Xz0kDMHFG5{~HLg54{dA{>6eQF!D7Xrf zf)VVK~KVU{@aCDjb z!;*71AuB4_WEzP*Zyac?sbNmj@o0r8pgDB3CW@vTj)6;pw0jO#KN>LSf^zU^tTzf; ztp@>dJx+Rkf&MaBw$i8*g?%Nrx=b2ULVjzQ4qsJ2eN2UOv$R0N%YSy2^;aPGrYeHf z3#2gQWs*-=E7^5Z&OGU#93%931W`-DtR!GxE?q*FOMu| z0v(;+F5^r2XX`#t&ttV<07I=oyL&3SazUq_jg&Kq8GvFqwV(z+n}1TJ&9=kP8Ox=5A`ey7hI=OX?#qKG)0{QDGSCP`0k>0#Z}Uy6!$$ikbk?K4FRSAJu4) z7FcBOSf?*4W*Q=spg5&9${^#QFgbqI*USUxp9~F1(yl?|>|ExfW#5(-_qfc^oZ~pj zV~X3vf!t_N2@6NkV6bvc9~iv-el5=@I||1>0wPGMO9L8#LUre?CE}q2t!+y{2Z1vz z^}$&j^2`0^ee?V9&jtn@Ppe|-T8v6^fEwamNDL%Tl4MM@lb!gEQ)wfgMluI?3LAlk zt-nj>+I;xI)@(Hya6Y>Ems7vB1hX= zdYcI!mFsc^nHUJ+(hDV3R>+EL_)X{Q6zdO+oAO_Zdc&Up=14pNnVIngh7XBx^J^6H z&L@xibciBfX*b70@ZxMH2~izs*9E&klXiEA)>i1GHZFQv`{ ziS5DQ!7*opKOB9l{U25aOi6`c&lAJ+)+xPB%JD+OJQd@o0-d<_3xXDu)($0PPdgko z)~`D8Cd4`HbF5GqL0%7%#8gDE1f`<>?kvj(C)6tNFuL&e*c^}Es&FLWIQadn4Zs!R z+>+`|RmJx!S{LlO8Wl2d13@mf4oOY>k>CK_yi?AN#ik_ekRON(9AMkPg*nyhZkHJ9 z91|kenUNgk2S%<#T1{1pLusq50&=c^%=u)eQhQa|;maU&<<9&i#Fck@Eovs(AqvSp zS@1M!s@R+TYfB+LzUVMd+sG316;vPJuqsr!`C~H$-+l$qx7bx;Om5SdF(IDZ&%X_7 zb;r^C7soy{zp1OPjDWI0sf0M`dBlXz5vI$&hZ1E#+Zf(zU?12k+iT~CEOIL*Y@8|v zT&|?@aW^=V>8(j;6s5`Q`j87DR(4lVq;{PpEC7l?b-%kUoN7fdf-Q~K;)RT@UsKPT%aW3#sIt?I+BDr;UHVv#c+JIzc1coDVrRNNfF7x@Vdl&t0LD7>yvu8A0V6enFQy~jwWlS*_8 z0GRU4Y^f4Hh5rCKKhtHgwbw{D>0R|Tg0oN?UU+N9VE`ljT#=H&qT2re_|##I!ie%> z-0SC2waBj`?ToMdGEG=HeIdh}O9bVjT&scb6Rl@6K|Pff&`2H%PU*(*0 zdP&ya=%uT%EOCVC9z6U#Ue=9878E3fG1iI{3qP|%>u&`0H;r^%JIf~^9P|8l_c|zY zRroSY01v$rmpeW@j_J>t06Sa3>ixTFwl=-y4pEZn56^COJN!s{JOiMdZmA){eEQ@x z$Y4GK_ALg5Ex=9DnpWP*0bXmE;H}t#xtge+$ZuD<$*E+lSFtsGPA--ltu1?nruo-a zlk#z!lU7xx=@2G3TmgeO%6+=pfM}c?C7%sdPIMY50&|wacyjSN#_tPtz(^L%a0Bd;^yBH@$M%l*(u+dbIRvc++*kgiH zfgwM;u1^4COv+hgo_-wo7G#Qv#5+bquR%Jxu_aAftJOJ7E{cf8J&XW+{f8~dy^UF8 zn_4~Bk`6;9E6-z837xd4Se9lDnY0*SE=-!gX`AJlwW`E8wIx@%Srcf7D7+5!G&O*}?5%-oU4li5l@s6=y|T9;JOk=Y3K8&P3Y z+KD8T=UFcbL&Q|F!*l$%E_(?kd`FHuRm99l3s%Yoay(8fNG#ol22;<#TaO3+Ki7Kb4`LP^IVFl$?z<=*0cf#xkg7dYf{Y#G9Mq54o5349xdp$1DTbALLVhMT#W;E-bv*edZufKCJNd$*tsILrHQGL+(?}uMTRqi%#^M zU>#Lx*+mVe!pWTL_1Z^>9DV`6)E*#c8SyxZlS4$txhvsQy1s!f;V}kCWCt`YODdL<_Ug+#zwzTBp$(>6Vi{I?%W;kLen z2je1gpRwT65SmkN0OKBEt^0^uiA5SkNis_K7bM_Axd6A(h38DKMc3* z#EF>7fmSFxO9^q|K-0l^0TC>W+k!mJBCvTN6K-0$!1}q7vfiLk%wKI@$U`mQ(idXv zx1U&tQ!u8zt|8=Sgx~>yA4C)#QFF+04$vGIP<;WtVV>dx;<`Gq#}t1i87zUij4KPb5qbEwSXmwEacP0;FBW>zyn=s93@Txq}ANRtDyF7 z0-`2JvzwU>GVHdqr-|$Q!>4m4WZ%%$hS|MQfnbKJ?S~CFx4fczt;2FnRuU4v7F~K} z!$zlo)$J0vkR}6#rO(yQU9J^zQ+lYC&rcQ^W6Uv~T`iv(Cx%Z2?3QMu5k#gB0wAKT zl;SD`*EUA|ZD3?mdne)RHc*K?1CX_K&V?EP5#|o7%qdGrE?xKak!CE2J?RcD344Ru zNCRrhnz`>n364l{1y3s*j(^vNheo~ST_M^iLxq7-00g2$ijiGl2J2V|2W6-ACa&2X z0p{>Dg>Kc2LVlwX3po__n`i@YRVYMYTJtY4u_@MJiO-%W#>%-eZ2_A%udGAY=XUvFe0ao1N;8>Ol{R)g%d0dBmg(GwG1!#U zE|l}-4<#Sur}l-2Zb@K94SiTQA##uL4g+NFE3G_&q)2IVl5duI)9=xIv?4j47d0CL zlrSmvA$Sw=83FkM7EuAl9FwS&2?}EsjEkk5uq~9?>&GZnQ7y{qZncN>3#m9d*qp`e z4SQ4~jf`5-h1Bu~<6O#|hMg)S4R)mx5`9EYpJhoPAKt}ocMq@%kfI7pL zwv5h}ni6KvzpIG}A1uXLK35Bi#%#C$0AsE71Gp*0cnO&F^L|q%UI#fWlU5u3N}Lw# zqOjxJLRdz+wd~7M;y*Jhy#h6eBEN0q6M@K)^J&%~ZCige_E8f-+3WB<(r~ku5kKxy z&c_-j&m>VQjih$rtpq--IQa-Ep09X`x1{!f2j6TfZ8TDTT?gEKk+PoIz4>_rp1DkqM2Y?QmCoy9^ujl%+) zK9oR>YfaoI`f5%|%(6wERAFEWG@9BEsN8@lxQC0EBqS^R36uh`)|s1Voop;6I0U7$ z(!d7yOU{aR$yH5G37$ztKPIW=$&R0(`)C|_M|S`u)yEQ>hK7b}!j17vVq=`-RJg=K zbMe{4^V2GatxJ1?c7ucIIKB^~4Aq4Rql(o}Z{vmaIi@H1bR4`eC)8NNXJK{`@ind3 z7KHgPC_=}Ho4H_fp1=P9mUJ=ShD*dgS@0s&eGBRUKB0FMo7t~n9VhmAiYsttEi-O$ z6u!F5-JHDHI|i1Y5dF{`usVN(eE{4SQh93;wONJzlQahL=*>E@=aE{sWN=Og86g^yK>h$ zgYsnSqIhT5{INcy4OG})kS==YeJ)N3Io79_Y%~dtMszIkOe7iCF)CS3Vn%hfG-bTx zXOiC&a!cY$CA}{8(}stDYj@xU_7ySxon1sChr(tqU>f{FFXq!o@+Yx|8EcV*mTG<7 zy?ZKC;xmtZ;#bMNJ$tU1NP4?369j#$-mvY;4+3GaaG2%l0Bf#@@ZzOL4c8thP+C*u1lI6pb_X1ur>CfWQpqruC(L5N zoAx|%7)ngqnw`x(VzD+**F1Ug@GYKn3Y$2Q1ynwzO1VD^?gIX-0hf}$Tu)amn2|le zoST-=^EaSSVge-O)j6Z;XMS0`5*Y%=402kY!@!^3arEW&Qy^a zf0C~=;*J{8<13)H*EA(JH0OwFFw2{hPM$lKCMmH&Ue<~5k|;TOvFoif`c;7gk+M?1 z0x$$+$=3>V*PI-=orl>_4m$8$fPerFRjGh#AFn4(@{bIU5(COl?W2Lq-I@>a{FR5T zU-h36HwV!ZPap`%_69hKf-gBR(FB2uEflZm(zhzdLqnKz4-@p3l+=m#(2l2y!iE>0 zSr&bEn6w(hK0N;b98r#D9=qaIGC;v|4k(hpw2D%v9T8gR5z}q}A8HeV;VB6&Nom8n zEe4DAQHR%e93l^KU9B6!ZzVoNj7kl0m%8FC&XS4)K$Bmr9;PHoCxors91T9&D!Ct3Mc zscJr@8CX;5nb1sek01x66xvCk7Nc6JVluQIPpJgpZ7nu7SvNOS+mcNHp4KZOw_wOI zTrF9TbAu%MotDg}7mGVVGUFJ)D!LY|s%{o!ed0<*>PAb*SQDV!fbOc<3>KC#%4r5A zs~{XmJV=BxC99m@N&340le&s=MXPxjnvWc61U2MjrTMC2L1t+*BArhKgl?8Kyb9AhVV336Jb@01zgW7ttHby(U7g6?Xusox$LhsSVD~A-J&}p0@ZaV zVTJ%mX55j(SgS2k6@(aiyCkGupQ6iLD+vx)V3zg>6+NP_FpA2qrCOGVYmQ1dHjnCi zJryNNtu3KB!dBXN{SA3VES$Zk-~$z>0&$atS=kXFQ}RSP!M#!Aj0Lolyg z2;*C^!j-Ne!>wSDW#+Nq&aL^?hS=8$9NtB+y0f%FC>6z9kEGOz; zehpau0RA&|3!Lpso~CHEQ?jN{*~(oL#cg2S{i~N9;@j>wl^&^fvIOyTRCiiMN#GjI zk{f>~P7m?#*7Kc`PI-0w-;rF#Eh5GmnQ(V@`H%%H3Scv&0QzF3hR|!5hSApZ!@RpC zMDD>)gH-GFG5s}vZ)O{P&>95%Ua5y9h;a3JUbzthoMv1iO44R+!MRm;P$nyo@=0R- zP)Lb^-W4^N%L^0~H8CL7Qy~T!0_OoG0KBXEN>xPK&%qbVj%=c?EpsX7_N9M|MLB8< zE@1IYan)Pu+6zsjW%`XKDAW}=$N^3WYQ-b@ z8>EpeaeHJwMO6f`T!DfUm2F)d+rZ-N3;>-S#g(RmFe4BYYq35I&>gK}+1dO;e3zGl z8fgPHOOz0EIyw0u>g!TNYp}}ZD6f%iYJ?h)b2q!HGb*pmX4r zgUFfj4zDG|*kQPhSRCbi6Vih`g#a&eX;0YWD?jCYvFFJ4%-0<48O4Ve$Pu$*mFY1a zInXtLxtqWfDcAi8Am;rA^Wcq*2N(Q(g3s@1l5az`ju%WgPm9Agxf~FZsD^pdncYaX zmWW|bEcJMZudk3LLNnI|TGX3_(q(|FqyFAL4S5yt5eyb#h^KReln2niR9dKc1*pPP z`5!Ma^wJRL=GA#O>PZETopln+C*2~}S3RWFfVi^J`QqwT^PFSMWv^p|XC@rbyH%7-I>67xNN zrgO=u0&2_&KSp9_i-6oHQRJO;gFi_)h9RjVAeLf^7u0G4L5 zAn_PJKxzVGb<*op;-vGO(ED;GuG#}7Tj>7dT7b${I&)|Z07q)}rBLyA^y=#3;w7k9 zcZN%gy100Zq(2vdpNfZDL|Em;Vg2)&P4*<$wB4Rc0zhE_QyTk)T~Q}fXcrXq_`gUD z)^&a^mRjCi99bV@2{Q9Imt?Ak?F99l9D~4 zoN9%F<3@4k#>hK10x=O6(!(@iO(U-xC=?1CyIeP0dUB>uuf*aMe2mDA;WkFtHn&b9 z-P(~qtFdl+UA7EQDs@odqkze@DyPu{06bCF4g%LKxXyahPE~}8xjrhZPYQPpEJO(= z2&JSAscY%!10f}$F3OJrSnzVgS(q0wdlJ)7@DMDOSbKXC1>j1+kW^`iU|wkre%T}NVP3B}E;@m!wx3y@#Q zgrJc{L&M0JkRAXzQ(1sc3#`Yr>%nJ}r^Xt2SS>}4C*&-}9^MVViQ~3`{{U_&pBzoZ zqXNWhtSHM|SQNfdA@xLN4T+L*nW>?MKWtDa;}8k*cTrPbF6v4oih(cfb`4QVMr|b$ z%Ijwof|n*9Z-#SN)0XuY>9SUDt)I?GEVrNDPx`tZ+>^l2)qL$0H|9I8&%C!=tz25Y zdYT+f8rmn}z{ehIu_dT5RZKq;owl-d5j%*o`r3sD6&T5C&lD=IW#zQu8TkzW#-n7C zUse=NYbC#6f&)>^f3|#*ca}r_UW$D#PM_}06k6Dp;B{gJvfa+6P7_W=<;=@r8Dnk* zuhh__1rPfJ&eG}K{j!UXU3Sf``g&P_PSKUtIe0f7Z4i&3d2G7{cu*{wWPMu;pq>H+ z5#neT{sa%47^7wmgrLBZOWNJcrZX0fb!<&T*mC)@lUzIrrIR##WOfx8#kdKzY1Zc) zcvpb)a0_)@!&EbQD&0Of;$D6l+*mHgrEV-s_Mofpj&Ng8GF5htafbs!LNgW{<(1*c zRx+X0`)qLrPwkxwDrgfaaX5PI9Ja8h0TsXrZyGL>Bm%+y6xzFRku^1{nC}V{)bYqe zPEQ3f&w$I>Qi&K202IrTdvj+K9OjRwFlq&teZ`tP+GO9lYY3QS;@m=!nL*IjR`D^J z3KAcxoq;MR!rF#WEUn`_!{oIwPUhnl3|6r??zj&r6^6qtJb?#`*EmvSll7W-p++wN z0`lqVHgG)h@gA-aSV)-Ex}Zxv%3S8P+l94i&nLXbwkZt^E49~y4`SVaY30n8+O{Dd zRsxjka-^vQCE`@_NlX0XSUNCjLV?RNN{vk!gvZZsoBd)wC;j& z41?LFTLT{_pwA@!-|d%cE3-o86@y<@&0u=P)|LIy>IFT@85e3;VCQ68hpcBQvqONY zV##K(qmeCedDE1Mg*aERw?1jq*?@~9`TNmurWwkA8(Ize2? zYe})Lr|m^6EvlkU34K=3=@#s{sxKwoS8A4XAXr}c%gNV5N&wx;;~WI%!4=?APFLc1 zPqecC0IQBPOIB)WkJwdSn9`+35Qu}H^p(3OJTgVh4Ig4JG9_HN8o>}DN~()8 z;W-L`mG6n*!|?%KY7|<&p+5tsIp8f4BxQ4--D(nVS_utkefW=OucgYzYwrR`qyR81 zqH&|UKbvT$ANVj@yqdOsDXkJQJbNC;59uY;8pavbK3*(Z?X?|~=LEf6s##|W{3p!h z>Lw_;$y|+y=fFjUjsewWLPMV@;B28i$Hge3rwE@G07+OdONn^1HFmGs zo4+vQ$T6CX&+dXXVJ2yCbpHSgIa6OxG03u{xz*x5ZZJo3KFmF?zaDd|v=V&0d@h}m zQbWMLKd1HcF38->&dsTjlCS}lI)E@F1f|vbfqVL5EQ!tHD#_rQZTzw58^7uMCn7au zl+}3#sWZE^27W0#`&y9ZAhMmLW8s(=M+%$FwU+wJ_oV!7HOYA3OQE z-tfxSV`SGTsoVwLQLP|l4#W8d62lB+Kh*WIl1;!N+tFztO+;BF$m!=$pA~tY13?1| zh~YDa09(jLFUjHw05+QN({JIxPbZF}P+-Rh^>fI~LEq&9K#awL&`Dxu#rNB5m^l$C z`2rlt*hcF3Q7+E~l@a}9c23sX_j>AI8X2dPt3Lk#6PGfzB+18`U9Oy0?9Ad17{f2l zgI*8z?TVai5?>VK1j0r+cw~TXt69?|fUg;bPO?@3 zLgwummzG!_1x(IIr;0;0Il`cJ0E9c*@1TDV0qlypCR2jJxr`oN!jA08?c@C7%X9D+ zGJUW3iuzVk!@{^$N+qpfgY}xMm(D4AzFBGXhc9)tMJ*<-w!(uPxJa_b$$qV%4hI5E z+lsoIlfzPqG47nWQ5v7JU_C^y$XneBMykLQ3kfAHwd&;@2jgx9n=?xqn%$t9T;M2*0QCg z@rO^9Y3fycHQZDOr>QwIq=9WrRo21+oCUY*u_i>s7_ySf zqfj*?oy!Gn`jB38Z{uzXn+?3NwSXu5`SzvkiQ)&|-#v|&cghCPcstJr{yXOM4E z<8?w-=A8ck)cbIFBYk`VACbsAFIm$O#TDA(KHhl~e#%QhEKv&lb$zUIGU8~WPwVeL zqx08UWRjJBL8EeRAQuuwjGJ+8IOH-1anH(x;QaM!YdQOQ2BX)7j_>1@CCAOYHH+aa zpl>(Q@32Rr*0E-e-#^EJ^@~=oJ`bhmZ*jsx+lIOU=2aw202jtbpDX4Fkfm>`m zFx`5Ow_W`V_GzEncFOoJK42ypLi0k%mhR@_)+udUh&-I-5TL?yX*&#P8mao_pXrn8 zYTMj(W==wiGv{SObGwHk?8UjEq)e2ekuG|Gb{NifC}6S0(TA$HGNqDwah%Vp_mZU0 zWC!paI4Zur(`kgfR-yj@Z$4FugHG{b4;k{61AjBYe&d7bLyMR>k~xaND1gC?_6Iyx z!-lo%(%cwuRZzvX2U7aYxcJw`HP5N9%&a+$`lThSPOFJ;aVan`iTyH>lKljNWt`OX zNmgAj@y2$uiv$dayyY_35nm$6c`kt3{usW8T%P$ZbP>We^bz~s|FdPJ~DJfzNvumfJvT3ggC;gt#Y5xIhCr5-#%m$ zap6oiy9Qt*!c1kRq7E24YGoB0klqI)CpL9td76%7rK{#0uc2b;&Q|>!6S1Kn3`mlV zZ=i%Gphevin~f*SCnjr_u?!gHPt>zu@N<5H%**|ReOVE$_;bL8xi3CDvSr^K#EWh_ zqGbO7idgT=>dUW5iHlY8DZ_E`-IKOdE@b+lJ{6g~1+YCu%z-d@qEc#Htn;Ykb zRa7!m<)CAh`}m_;m$|2w&dlzXlzsu`PJm&dyi9%EtCYvAVv30}KiWVe=R(wF{zgRd z<%9VQ`QzVdn6-vHb9fdE%lk6@r#y(5koc?EU^6M-W0Y3YE)@d2sdCYQYmYqE0~4Fb z{{W{k8DO0gRBc94c;lgzWPSE|>r)NbgWgbK#8 z0muS)w21hF6TtFdUIa;^(J9(|*c(8s=IY0t6{yLBK)FX+!G+oc4VM1=9~pk}T!=FQ znXSuDTSm=f$5HD8em|~H`dyJE>FCy;K9mPOcDaWx6%$1=?6mYs3C&36>Juy7(qO`a z8!fdH;;J&TJwDXxq;Sw6WVBAVchF8e?U)Fc*#jWjU$t!$nUH`xX!?%ca;3g}d6FKE zc`C`H%)NlYNI1x(mDfCl#Fd*RO=)Vta;Eg)r7!mFT!1S)7&*qwP780@VN^S12p?x5 z_AbStbEUJW& zdkD#Gen&is4r*D@kCrbuFl_EI50T^O7M**#p|v)!8;3PTH2@u_hw&-_lp3p~c@y5o zq?Vxmeir(C1UQf9zb^amj}^y|rbCrq*D* zo%=^&&ZfL5GxGLG{wJ;e-4^2;CN&J4GF2}TU+E^Ky;bDRj+s&{!c9)bb^YsHQ-l>A zQ}q_rs4J`93#fVS-^_0sPgn9YuS&|thR%f?hRAIVQj%<{=u zAn5)aC+4}+DFO&cl9hK#O_&i$PEv)fXi!=4^Z+ebDGRmxh>O(c-NY-BM7yehq^^>S zQ;$eEHL^=7wY0Z9nD`4Nf)M+H{9++fT9OOkKyD8cC$@fy=SefP9XZNzcHsfvnKW+O zWJ+y-Exwj@kk#FOK+{tmV}?t}f_s#7@Tpq=04|_1ZpJ!5(CRh-G7uYaKD!OUfYi14 z$A+9IZfX~mPpsHz!+7Nu(7?NimYoT0|LUZxl{+!61#0q#Dwgnpp_vqH%!@(oF;?###GLbpgUKtlrTvE#vF{uG!VQ= zUTHC{p=NCQBRCOTiP6#4F=|OQ9d*_v=Ir)~X1#0>0haZfhwx*XwaXR-ETg4Q*vLG) zKee{LsA_?@P~EIV2y;HBAu)fh+kx!{D6)8;9Qm6SK2Fqf<~$yj)l;}6I-bQzK0bk> zQ*BO!o;@rqSQ(VW4KB>Uv>0*66*V|?>u873_~?^dldylU&8K9O!qsvCmfdw&YTRZ6 zixyXZNxRS85~nm4(gj;u3Q-1@8X*2iBz0qn?s5|T5(%hNv8q#MRh4+QQ6d2}$gGm~ zH_7cHMz`1aHg(?}-zv&PPJf-B?i<^#fju$)pX4Q$QjJ`yM#bFRYa`?OkGKtHj#)X0 zx^^S$kMQiXh(GY}JRIp(5Ws4TjxHG-gNMZHueF9`<%nibAZ;|apPGE;e_=3e56icg z+6e%wD)F*lO+wlT#P!Lljxsp$=kYI0&Q~#Jkksb900<2}y$LiH5@%kt!9W0@HeY7L z{>G=*t|Fmg#MQ*7g=NIt-X)3FD@zRWV$2|qA<|?{MrS&N6tnReU?BZs$%7rVouASi z{L3Dub2&&n?pgBbZcD?*ZA!tYafhL!oIm(CB{sAS`*GqamB}dU45mfqyyt?rs74EJ zFm)yLM=YK60`18J#$+Q$bDa82F7=0I2pv&WSWGQ-c$qiFa08>rMoI(}`nG3}?-y zz$t3-@5$^w{{ZU1;64whg1r+@kK1XUNU=s8{k}u>(Gl|%kIANr-F+N?v{ZOVV3$WM zXJzZ~{{S4^NM2~bv7#h2Clmhw2r_4%>m-4mc@^t$HYuPSNA|6DTxa=##Cqtn*Zh$V z#|J@z+Ckzn!El9R_8HPLzHY<670Yv1M-yPFi|LqL4QJn=hRP-iU{J_;fH{pEg|f*K z`6aj#Ws~)WIdUdv4$lxQfcE_AJVM7ZhZ6RTr4P+hGr?3l9>^PTbvF< z!?AgwLk$oIgtD)W4+K+&T5cq(JX4f)s2T&#x$0{J`f?sf$;tl!m=~D+#42uKy8+?R zTAt$jGj212%8jNbM*2I{j9(mc$xVUwRwi3XOmgHN>BFOemM3V8Bf2p$IVe--By8*=_a ztStfli8pxsB!em?8G-Xk`82Z8_Qg&i&uFz-xz9-=9Cao2P?pl!(>ILT(^hkrs9EEm zuKrv90E0Zh054RdiW$4^K8FGjPWchtK&iE5ik)G&ql(SFGOX2#1eK8Rt9pa;N%8ia z)t5Bj$!s!V7qyV^A4H~1D#^Y*ju}kMK*HU?P6|TGW%#@0t@6f1!xjocMCNdC3ny6P zEqw=*krT_46~r9ql2)uHYLq^H#j5*5TCUTtTQ4?_Bv=paY*Kj)zsfaG9$amCPfidC zgVqYmAy)MexTX_pLEFkU3dt@*1N}VKZPS}>b4w@w59+OwK*D!3?nFDml{mpfQO9SNf z%klaeCELomUs^_)c{uZ@r~xcDbekugE(O;|*{1e%@v)#MovbiQ1Rad%1j8ct~(~~v#B*y82NyB7ncaN1D2bsuVrDlm? zi}IOjYIcF_i6OWnz6a96%hcmj^{CRUgA#z8tJso7#&b-nmzZr-zr10-B0ZFWJA#hE zt#7>v;AYxACz8woSYS&A%oyY93==n9YBN{1V!}#g{?|G~e^@IDZCi?x!%}7KZqs|b zZhaKAR%p3^`lTUhczW225(8Vot9c6pW9zx1yG$ARo=jcOXPMwOyjv^Q(>a)~p;@ee zO_V2+5hR!&X0RNcDR=!u98sjM5bfoURh2qbwF(0AjNi>mrM?xrN+hEs2?PDs1kRND zyemf7Tw=O^vpdWzE@z;q1v=r`meN}P+S5RGxWnpqp*duv_;FPg% z9gg*NR7abb0()h&Rg64bEZxwP92AZP9ro7F(2=;z83i9Bobo`<+z&7y8Q}JS8o>Gl zVg*X(%0U2pnKkdWFmfU`&q?TXEU_gk=y_%7LkX-slw0FRwZAl_G{T zCP}y=lDSsXJpTYSGdnCKlUe7>b12{lB=Em-X^N5nr38*vKa~Di+AvS(RnNt`zG}cE z@K~%G@R@*0@!#Y>y|pz;Nze2~=BbLmWhw%2NpNs6_2=l@_A})KZf9|*@Yk2&z}4fZ z<{T6sO`@fxVg#SXJ1uo!<$CKJvlX`1ol9q|8j@8J_{Y2+ z?Ee6G%hurc!*WxjBK?i^Yy+cX@dYYgW-Zt5qKkY~Zw+NsIhRzuU>+F|w{ECDS3 z+S}WcF0(?~61`PvQ`s zwp^$Lg~{P9VA@OtLST=u6CqGg68#bmjDcn6BAbUa@&FeRxs6ZQg=ndqF)5o|873Qj zeqJRB6{yKs5vyXy1mN@W?m>c^$djLY0%Uml>BHq53A;SZD0Kh_o#lT=ilX2GT~FZoBbXGGYV?VENXG zQqbx9Jl&tk0r-<2vO?z!wR|YsfMk!O5gWZB2tbt5LXM=Bg|$LDI`#zlxoeb;%(I(j&)7rQa) z>{CdcvdKY-@}pXxv4`yVRgBPi>Wp4QPVsu(lXx>Cxx)z7`mN^Brkqrf!c9=21b5*s zp{FR|f~!dt6v6#dOXy@A#{h}Z?ckDa7K-xopBTuehFK?9`CA49e{ou66EgnYT}#=e zIaroUZLeCWEU)qN8q_ro_i7?Nh-;9)>QHi9FADj9G*$X%M2D`BO{N!c;?5Y$O~?NL zaknYve>{mQ--{Zomxw-+x@>^+{l#I1tCkVsWlM6>8-ANB+-%?&SdLdG)W?>!p|`$G zk0lzq1T+aG$xH3#s^AKqeLunF^+_T_v>YpXZ=O?nUgb`hXE7<{MpFL(m86_ZmQe(+ zcTw#o^C(VM%mF|(Rl^)*M~ z*7uy~_C)-)D}A+6Y5-A5xa}v_Tm|}|s859i=CXaU@|b5ODHl~NqJmc-DQ6HdqJmR( zM?#-m!e4oc*Buh)6mTt+shz;dXTcG`J1qBm4FW`mJBnZ?tPTh$$c{M)Mv8{h?ySSX zw>7Wm)Ipjes(hJ{nTpwuUFHFS@_ve)jw0X}=DFBe59LRF5Pn2Lej$s!ZEY@xlb$#0^% z#aRv|ZmG4bsheP@HP-F5yA*?@duKemW|oYUWkh+{s|T7vhEt>WjvSDHL!XA1YwFHMRdrxF%y<8aI8b?E^PXA7xOq0j~aRu#F3xk`8|FlAhYUW`}Meq zh5#J!YUm#yjzH$(gCS+C`V~>kd`4N7mIRBP^d>F<;u9(zk|S!%96loYWqX_-U|QXk zcFu}Mbtrca4Q~F`HWk_-Y)3u41m!o{3X%P)A|T6^kuLKv_u?jUkvUtqCWwgBIXf%% zs#}2C3lFWNl7hVs#O3me1CqY$oF^O|O;||b!sIfgo?FApD9%YGlKgSd+zE#acne4@ z-R+(fiZ!=7k6Nsmsq&M1LA<=hZU^B+l$qDGK`^ZO689K$eWq67q6P@GVNtp1(w<3nX7e&l|{tCCC)v$FhgdG`Q(Vy834)jiG<^Ts0=C+nv9p8&ucaL(~{{YCBAOMWY=i={Ud&rxgJ=@j5a^KDNx`%@pJ)V0>Y{CK9J}z9h z0PH*Ls#-0`BQ46sv19Bo4#BFw+da_tg)NB$S7(39&tm=Q$QDv_j*)k zQhJz&@KaC5Q_msQIDuf$u3Wgd@v@*@fkzIhStCHh)E?<@wGRpBKQmO8=CG|f&RH4E zsd5F;G1>&q2l)ydvyfOoC*$i)PU~q18tVdK4^Wwtswb$-dciJbS?pRtZgxZL2ajPq z8VYIi0-5Iapj7TWQT0RAj2UOcVj+-!s~iIdwdQW!`FzWn)lZwoiqvVIJ%MmoV1Y~nwBBH>Kb$Dxtb`9xhF1FRwnF5i{ zk7z*CWkL$7bh(3JA1^U3TDH>~zc1UXY6_DUq06-{HDN@igSL!P#EgSE%{3Yb*5AUu zW(|4J3>ioJ5@z7^tA4m#)Qx}B`>Hx8C%5F9c6Mq%1 zC!YuIDp@G!f*X2*ehr2AKF|k#f7dNW;iI4`U|Uf#?nErFs*age+e1Hl+2@a{gdAEn zPGl5ZY*i3zew5zV*m5EYu&ggn;nw7^R@Gx5XI5EQHn#MmS0%(E0`(v5IgoG)u9Fx2X8aw+{zUKYm1%Y(Mz893RL2JNrSyO5A5VGnYJh zegfTo6OqOoX0Oz&IWN+&C!Q#D{M(*FZAl^=pLW046J)MeQ$STh_TI%(lg}6kX=cfU zBG#lqi|ed-n+23*K-YdgO6R*cnT3yEIMx7hD_$e}mvg|v)5niW3k`p@Srku|Q@0io zw-->BnwcKgkCATOEyl}<&2Gnby@JEG+I_ustoAx{Q;vu4?AEc$X_ri=F5!)F(6lJz zTX5E-=>TRKt-#oBLyYgJGAv?N4DS&aIp@||*)2^Dh~ zzCo>^2>$>SC7UVd*wAWdG{1c3o-V0uY`fS=WN&Zh56)%RTn1QAEDA`KtjJXGG8(RMWcp6XmANd?Yl@~AV*L;oxoxs%gpYBj8htOSPKG}}JV0bh! zv4tddph(*`_Ks!BAIA=q&CktP<5lyvU!$b)hHgIRQdD8WeUkwu3%EIZR?uh8fW{rp zToL|5;sM{wtTF**;9x*}y?g4NU0;y#*H(eHjO4!@ZIGvtvEP^cfX2Q+-bJ65B&9Ww z{#d4l)@}@CD){C902}T|8lRskt5?p9G*^!^S|Hgq=(!k88^i&`?AE!0{{WRwP6rV? z@(+~R&>#Y{QSbILI)ee^b#H2GI05rZ{%Jpdtlr$IKPNfRtgf`RFZmZC77x;jFOllD zMz7qIf%5$6oV3g>40(D!I5-gw7!tom4s+E(0b_r%sK2A^N_cml$>yOFecM%X16F*- z*5Y7~^WbjHD^3XT%roVzEY6Ycz{`A_CIbHeB?A_{Mf@h%E}1qr1nU!?utKqZ%kX!! z4isCQn_Wo#d9tl_F(Wm2!DfVs2)Vv9YLUqfMM*Smo%!_n^*tFb6bPQe8l6&w_4N2S zl2kX_aj>ZUwtzF3@*Zk$T)Q=Wq`0GZDKG;@rnLS?R%H20NdCY*uoE`}aohWm^WtI! z=evSP78)2*>%icrPC>o}Y;RT-#|FK~23nvjptakKwPQ2oXA*qsxX&ak7w)PBhxG87 z8yq+2*Ys|jwupF>mGq+lQU|w&2dWK?LLZ7s?P@1=T<0?=5kCy}w<{Dxq2z6#Onqg` zoU|t%Ijx4nLsTR-<&tDTIdaGDL6bC2KmiR+$?`msy(AV>&;ouO@lgi_!XZao>77Zn zBi)2a)*nqiD_$;;Ch9*iu8TS5Z7wVIL4e&%@=HGHNDo``2wNxeW#m}^U><5xf%hS&+;u3Z{mNR8=H%%ml^*w?>KQhK&G_P;aCm_LDzXBW|u}t%c z9EHj)uRP8+PC%`r^-e;1ONWeOJ3iE|YRyy4~E2kKh#(y z^o|^u2R*r6$5H1Tm{t2hjv1UdVT=H1vCQU|Fh3KZ#a~n_rO9v?os0tFWMkl8Sl~_V zGaqdfC#To?1*Z-YUIf5v*JKi)D}O2HGr~}ROa@@u!ID4pl2jigqJJ5qt6H|xTa-eE zN>jDK<%sL8V17c8SDPJ@$68ZO!zb|*TYgO^dcTjKZgtMYIwF)v!UT^|%+cg^@iKro z395w9;GMGa@}t5{xmWSy9PtjLQSqMqI{-}le2JQ-ypp8~Lf^Kq1!2WD&~7o1Xa3Y{ zb|A%fmS@5!N`Hc_Zy>eB#6NQUDQ3ixm8<(j&Z>)0{D@YaaC50jBc+>FrQj?du#06W)Ymb^ z#mB8`TlkkMEz}Zt7=dGBiD#BdRH@7;2|mV<`t40{PO+Qbr?~WvFf+xi<}lF}M5$gx zYu%;Xrp->tP;*g?biV*vm8ikf0Kq^$zbBEN%B^fHE)cS2$wQS#a$EThb-MGZ-mkRP z-#Da;BCvK+Cs42z%f=%|I|`O_8YI}Rb1_k=?I@giZ8BQr6aN5onSI!rW)YL2|R@i6j@%N;yXrpUTn3?|oBYoD_K^m3)OD(bB zGybE6?M{LutA<@B(K!Nm{z+cNyiH2aJnNoW;?Ls_pJ?8r69E;oewDX@i4Jjf7$E23 z@w5e!fXs%N_DwEK0`VGmRe}<45})JPmpp;LmAc)lTuf)?SWWVA92sZNt4zy}1&(Cc z&}EPU5*;P~07672Sk98b$o~Mh6=*KbOQ*NR=^hy%FU!FA{pvnuP6N-zZT|r3E#f~L zvCrm4+>150N&=8+hna$+cqj+&2dv@*p%THP;+S!yO0hD>!0|={Ak*YO2E1@4TzFOS zaGcs%$Jdzn{#DDE0eHPw9zTebM1K}otbWuvHhe#*1Eshk4GY5}(xF)J{s(OjKkx1G zFN5Y>pK`gAJ}eGemze}|{{WAzOlSoJSwD^4*^ZW<6V&YkfOh0Xdh7eiV@o_ZF8bnP z5Ah!y?IHW^@gEhV2Hpz(f8)0+Dk2}D^>+Nf*o(rR>G=mPeim;6`yO1f7t$SVGwS`A z=*TOyxW(|Ko%kZ_2Qy8uy{{V*ovBoX?Q$8~ANtRkl zZ66%GKwRn^(O=t=`IQXq}WIG&e8NM7Rk^oan#(Ya7fKrR|4~t*GgW7Lb{6_P@ zku>;^!ZW~+1V`ikBKa0AC-coFD zQp@cn+l|KTIfBgovR5?AlCorqu2ut*eu10IL>d{CoCST)oE3#Feqr_w10BbKUq7?< zL`%%jLxREw00FXMupGlCHEwIzGnp$Z@s$zh?1apf?NH8KIUcv-h2J~sFUwo2&Zq^w zUtWCgS1r&3`4Cpqa&i0~M6nA@Dw3F{A7Ru|Vw-^oIv2Zf4_E?Kx+6*^cHwp!hf&i?{L3#n`MoPs(-Qk5j(0 zPsDsHwlnIP>JXZHxGy-`9xHUG`mO&lVfRnBXci z9gMr1asuzj7xCA(kK^Q@3u8df`7CRGAvp39Ry$APsQgEO{lDY-sbS=)fLnjWnMdSd z!^*Vv_dBII;h8rRtUniU!s;hv>!84l>n!mGu>69JqEDKL{LaS00t*y;ei@1h6l2$B zJcsI8748@kpspL1f7|q5IO#8pxvqCoS4!LpHM_;sv0xy8{C?2@ZBHDrQ|wp=IfUos zVMQwdVc`94ep4t$WacEZOX6aWouNRf2a&N)}dkUepLB53V0n8Z+C4_#F;lxjX*=UWx^P4F)BR0V#wOrL$cPKVQ%H;`9S{wxu^`KZ=iWLsupJb%^IY1LB})W zWqlbMSfyjiy>|U}PJnCuB;$hknPX+1YW1itpr|TeHC4{4Ye=vGT!y>$I@+A9Q%B|d zm&a8QCzAY=<+|N&bCicK9rIl~cpFe%xcOxBR@i1ODm}G5t9By;U>Z0sK?(2?W~uRy z8SwdOl$LXcnfRBYVBb_n#(Z&j<~UH}$i5^WM&q0?73d|AfMLXenv;9Sg1Cz`Q>H~V zGXDT>yH7b8H2(mS#-(cH-rNblRD;O!;Abz#(hDYt{w&rR=Z98ALr%eY5g#I=3=R~p z!`thh>EBT{W6E*Rt*aA}Eg4EdcmXc>s%O5u)@6&YZ#mm4@|97_@` z2pDPmBXOrQnDQbA)MhL*Ecrx@p`UC&uP}xH2Ltm@7G-~XNI2C~r`qJXe^mFISZ!!y zAzJ?cubjj=ZpT*ee*;%&Csd#U0vv@0u2`^0+#)&C;=Ygq z=x1Pwa1sEN79a21i%KIFtVj)&K7&{Faqtd?up7glj5~`B5SWbUq3Xbq&y(>LV7Ot@ zpP14ntb;N64m7L!b0$uvH(i*T|6gM3}oUeX1Nlee!sLm5K{X?{@G$db4vul zwZehq3LZdOY*Ut(5#qfXTJPr>0sjDw%Aq4M`xE&804lknd~$Y=sbHMMtaus-a+*89 zZ~^hz9sSDzAWz2wvxZMTQSqb;+rR|8N5!RT_>q2D_{^$VfRBv$$PN@DuQTyw{{ToR zG9F{%i!Asb6IoYxs;C56OyH zD?g{OE05gx@&5o5h;zl#^Ec|Z{$KG3w18c+Sd;%*i4ZxKoSTaF6_$0tX_ z`J~9wJZ1Q7oqX`1FBkDdDF-Hd0+OggHXmdNLQIYzD%u&DJ+K~`X5j~&C z3nD~Z{7%z(K6#0Wmwvh)5T1CbH?$$!MZ`et4Pzlkt7{R#NbhBN5Px0XZWe!e(iKv@3( zjC1Y#4qhL_K(dVFxOne}-6nY?{>b#-BpecP%tn8M>|KscXn|_91rD?a*ZV2q_3$T5 zg7)1#+d7m#w&Gx~<7;pAAw%U~6mXipzXQADP8vF1Oyan$g#xLXBBk2#$(Jz#p=*~a z92m1WqE#>JtE7V3wh0lMq^R}7tu_sHben2^wN=q7sZlCR;%FM4q~pxgmaM@-5rA!F zC8!12Z;z^37&PNp10lNZCPVj+9Sv?ZWu|B1HG349xhBq7mvCX6_cw>$=PPzQe!N=t zdE%aD%PZOn%Y**B%Qs_z4`U)Y4bK2thxiCK1NdW~jMD5{e`XoU28OfcgHiZ@7^Cb5 zAYKQ?E)Vo^V+Zm5uXts&ADB+kBga^un4e=u)-uxLiFTmR;it%TyJ}2%xxQmhwgVv( zZyf2iHDl;qp9ABY6$TglO{>t+|7{~trkX%vmh7k@x zh)4c2$T^sY+VoE&{{U5BnV?#-L}FO;I+hAMx$*P%1EGo!p*0`J2r^@eK8|0DRM!t~ zGG1st6)K(v;SyAnq9u&LJQ});PpQ-p39XGOTBUuTeMI0@#y|#ZBOywRis(kB7gyFi zF=Y8Ha^vP@<^h#>3zgW(hu|ypKk)M8PKga*EAl|>p<9+>YBDTpuNE1aIR?93iV`7^ z!1=Y*#Uh&K@*;bhXU~rj)2*8ZCShpty(@z3%+}+L8y@BUY5-QdqbBda=gKVv%76I# zrny?K+|T*X(>as*b2j6XlGlBR*7cKxvwk9%WHMca&&Dwzu>`yFbyy-kUyq-;FmOr` zG7R^%z`!5GxPgeUevORC2P`xPz@t57*~i7?=?+Q`CDB(A9-pyTF+c9F#`#dBi6jf2 zR>5Z$enysX0s+SnO-v+`N9%}Q@X7KI!1k93hJxl^@H4Lm4dH8{>hgEKv^z+ z%l((#sTz}&aKOV44GLy;jk@yZxS(ZcF zSzy|2V>}DcE8-#aFSUonl_2qwOYLB(a*2vzHDyw@Bh^F@gVmEsdHWPCowF`ZO^Zc* zm@!`iCTf>5L@zMsJFj~U37u=5`Wp6G{Ae{6%j1>ifJ`BuB>1foBebZ?9agt=pZ>T2 zMw<@70oC^Ep{gta3qqeEHO-Y5aWSk%Z5?8H5?b(}3=r{1S12?4D*6nupFp$w^I)EjuLxDi@?OV)pKz&#s_JD=e;aD;i zb7*ZCARquFYX%F0yug&Wu;Uh(4;AZHEE8@_6}KS#RFM!5MH7te_K3(ePVF;hGHPC| zPc0Kjf|&wk0#g3~j~N0K1;9+pFaWckui#2e$nfLHWM|NeQ;r#dWuC?)IQmOGm+|%H zB;k`5hbFI9AjNk5_?%8S0r{{T)REY{;7SOMZo)d=9Q2guQ_$#NB|iPNJKGixLq5$k1Y&n*wmO#>@h zoS6xpGhBqQ63PDngVn5$ju1oT8U+>_Kp&6nXq|JcN0H}Fu;s&+Nt%_0Nu(THiX$E0}MB4lSUpuBqmr_Yp*GLy>NfmcwMn^{hAKJm|m2o?bHLPd>inPGv4*uUfH z3>b*<^Y%5G{{Z^<8VpI=WEk`QH^Uvd{sjIumZU@n98;#00P&Rvi_qY386g7{>47Z% zz#jut0g>W(5j|?focR}zg`I6PK=mh0DFU&T7JPn=B>^8mGsbEmP5{b$2-TxlyiExn z8TiV^rG2Zw`0Em80-?`^@uUt7Mi}S+02Q8&ZNhLKXXA_LKfnXb=+fk;fD612j7ZuE zDpq`#;~s(uq+&j2-|LW%%pxaX&D=on{b;CzmK*0z8^~|~ zpjMq?j?91Bh^k8*d2+=_Ubid*bAL0}16(cvK=@kJ<0szL9#f~yS>?f8nXNg&q4)`m ze!9i20$~%dfg{R`%f*b8;~bY z@()~4LCg`asX64~Yt5S*O9Z2sL0H*VL%~1RL4eB$>pYoDby9OBQT9}As6NmHh=Sj6 ztU)D^SAN8tEMszBKTL@iAh2=`4Qx|@9}&hEt&CDf?Wh5I*$F0iAt6SqQ~}GVSRb{- zq>t46LWiPu2u%o>>UDFrMK!^Z7HeXY4FeyT;r{H>IV>T=5<(hXCf?hKUE^IBAk9wMJ{o}{X7jyfAYEi04u0Ok7^w` zasZd?8PABmq<0bWrXkKS=0}eargK0<5=DvrBErcL0f9~M<4PiJMnz1z z*Tf&`$w#S4b~*;nfy#ZD?jPan@t)v zxJ1`U%s=$oRBIN2G<=`pu+GWUt$$H%z7;0cuH#opQSb@eAA?T?pVQ0x3n>u+eyP%O zjm4Y>bQDhqwZ|U55rN0zJiIx1&IOUjGt)h*QId$0tN3QhrITYE@vGpw#eY0Gc#n!b z=G66maQqW&U^(OU;{Fq{Q^@e57T56Yr`o^A{FCrjJCk277I^qN#D!+1fS>99wY|y) zuvns#mONj^aA2ej-n*s0iO%x{{XS81Lc1Ts2JR)kFb;BbTt<3xb6|xwHKr;}`Jn&hw4d!IZf^AVrP=DUc{ke;-r@jmdwYD~3eMq=ya3O5<8p+8fxnKLJBa%Q_;qNI0tFc_$HDKJIRN@{Ty-Ol0j7G5b%tB_F z8!=Rqs%25Yts)jE5aM7@iV5fc0D@-~YbcUriJ4lqoR`;DRX;vo+3!>BJMN;}2H{P|dG^3mtV%83-_aHM|} zBNO(J5S}pvu3!6OlHytN{7aFKoBPGb!kDv^Qbtonr{TTfZ zN=V#O4hS8sGI%I?WT(;c!c#}&FV`$yP5g3UtXgnp!u-1BS0*^P39fPf0H`@P8q_$$ zvVKC1RH1?ua{>e)SU{h=6ZPEP_*Pt8x0;Kv)yk-EDyH3RsF@-uEJ)51Hm=IAW!(>{)ek0#UB$`{{VkiKR@Ddj!i@d zmt*0wD?FH@B_GB#{{TcwmzjUY^4#^HF~|NbIQ0OhJ-@b_S3AtVxAt(aEy1WrDo!V> z)h&1&=!uoE5Q)c<^wcSaY{+DG`nURBqri(0xSmXC2N_oYKp5scn7Kpxji6$BY!9)J z{{T&IUcUwnXy?W3lBBd9;`UOI4p+y8TUFAJS-t|-lJ)Z;G_Gi&)9KU69l0V7$&YW+s}Eo@J%42f00sb49PE&9`= z9wYTbe>vl1@kKI8`njsMT(!DO6x)AT=f%vn- zvfov?z~C`4;f#nUIw-=i_MW}cs%2t8A1tz#FTy-5Bzh${o$C^m$-6IJ2NHi+WDGztJQcW) z-VR23n3Ku00QkS#fgmA3V83odL-7I-msOBw*&hWII8Z6+FYU&k9c|AeBd8?QtObtZ z1HAaHrbGLXc%4dLl^!bOt?20fH8w82pn!#c5&3KQ!&qdQ@L2>&Ay^Bp_~)tWpj-BF zd~Nfby@TWAs#Tacd8KIw8JkG6c)aX(tW9A(4@ z)%f{RQ93=AkJxAAjnr)@e3hTodzM?&+8mby z110%kxn@|bmI81;B4-rjzmFUYApjb&&1=VElxogA^b#iAzd`HG`nibyh&y~Rc0HPH& zekV-&F@h8PgIe&w@&5p1>sA=ZWXA`YWuuY0rE#NFwD2Eb2$2H_%s&zqL}8u=KSPWp zTh@6ldB+3f#)^(f)~t4!f%!xANGIgL6Jf@#)h3`$R^6lWG){o*l?d z$Z4q8o?(z7!(YI8xdPk(q;chN@L2vsj{!IDl)L~D|y^IFfC?7I>N_5?I0hp54=0^(~f9Btu@2=Re|u-Fa?er6cMa6rDWcB&>j@=c=9%&zsghw=wJ`A67(B+PqWxPcyg z{hZawj^Y7wb)%4Lt4iBb;!D*st3ewwu(c>rVTJ*eJD;!yVYHLj^_BUxmgP^NeO_bt zXsmfB>kqlnI7*%%7=0MXk)M|Ba+YCaL;~&R5(3N~aHzN7SP)MZ_zcF+0tz3^Y)Zct z@yCprD@$$HG21WPf>3fz(#{f){=Dfa|c@?g-2jpL4 zh%0YX1UQzfRP)c~U0}^MY91*b(9>$(f5U`;^8ghMF6JWN``7EWW8bL2$yWuVZ{;8>Q4%zykMXg{G2ta!;eencF6WF|Nj5Pl!G ze|Zp2d~*Sig27n8)2LZsNlM2vf}vps6h1{RO>IG#s|b~b&!gkUi5bAalsWOzR0#}E zId?Btkiau7R!x#0(SA-0&!SpP4Zo2uM9MfMKY-f&Q(P-HwWpDnT!}EyMHw@yamxKr z?O35amg%?|;QloXj8evaZNKBRb{I@}SzqxDmL=zm_tBvEt?FeAtFy=ab7B{i%@-MO zejWQd)OJ+d6#(?eNKBbOB$kG|qJOX~>bI#`{sYBpyIuw@4n>+dXAaAM9PMFK$$94Q zCERLf=GqC(EM|JKS)yFENZCT(AYyCFw;Ld!(pvE_M&*?-kP;EJ_ELSQ2u)-RkeFX& z#g%Vo+Or#y!e_o_B!5_Jva^W4H6a8TWUHaSxMzi1Uw^3SEb{h{Ps*`JlFNNZ>N1b7 z7p}$^Sqt0R38;`}*AbL|B;BWp1#Sb^eAjU)H~i)_ar2GEGr3;dmg>G;@_(s#Z)wS= z*RHJS{(|ZFmilQ$f*#&1`vKYZcoM$v~A@JDpJ|}lVp16n&OX@LquRR~-^2Wb1 zf!gk_&{iJJe%41L@uNZW4Q|^-Etk=hs{JO4y^3RS^q!i1PQ7O&ju#in*{$0|*@En> zv#G6JRLXouU9_f&%Uxw0TCfE79W{$jbGX?CCCoGX4qwT>KB6Ih!|Lh&LAVn(mc0i* z{QElp0Ow<*rA=q*PsYzCAvJEJKRDjblm5{GPwLmo6n>~TUI>5chsgE2QR%mg(tfd3 z^p;~=hKI*~dmqVe7$pP2OE0n+Rx-7Cy=${#zN_Z3}T7ZN(RSx8!;!hhd9@Rr;9VWb}hf9KVon?MZiU zTtZ(o*&{7w*G*0#`Ci&XYj(Thzs<(t!ABM~%xYZYalI+zD7)kxBII1fhS%hK&42eet?o+4Te+bhsdwtVE{(fqA-Rb4g281dC2ya|UkHm6V)zekrus}6Zr<>yfnF= z3}e{IV9)U&fll?<=JKChvj*frMi__o!0PoG>&2JrZuchb6W09Gb1V7b#pFLe!C+35 zh6?`xmqSAcqu3fsPmoA`)c)#x_TQ-6X0b|+vjq>z_C4w{u9o=Eo_vhU>lZMCUGnYw zPl4UyxO_>wSTBU08Mfm%^#@S8BMvugd2CxH(OQx zHohYL$Px=7u*$r5$?=W^ivI-P;e`nobL zeOYm@aP+M3n_jnFx~kAtK8(DVXORj3$M8g%qxew~_{Y9=^=FXzrrx|(I4Yb4qWOlq zUn6C;#(q4|Xag3Q22a@Jc|37t4xNG=$cr1+M7$x0?JS(X)GhnTR(Y9!^<+m1U*9nt z5!EYFVoMIh?7l*YB(H&ic_!IAWta(0xfsK-qU*#}7i+8ez1}UQ+OY#lu=0u|V9dGJQ zy43Mrvxy`1VQnxo*Rds6>TD{)LTOCAf9e;=D#J_?02ch4i-19)g3nJn?SI zf6X@#7sb9;T#*?!YnL}qe4B~YT+jZk&F|N|cqxn*9amy@0RI3}0MxeUjs%{xP=#Qd z^g4Y<5ODfkN{8c!NeB}~;hldU=|CB_ja$Kr>ikSK%jze3zG$=S- zFK?SqjvaS!m8wWf@%V;AKz9PCLO=y7pTGrz{{H~`A&YM=*)l#af$}t@1WkX|pRcTj zCddAN*TwyPn5j4s;gVr~9yU^L0K`iJn7Ih@;mp^D&RqWhutHv7Ma!R=lOT{Y52MVS zm_xw4Z00XgKtCK!lEc5BI{Th^T8unKt?lE?g8_{qG69hc`Hftv!0}fjq5vl}umsYI z35A4i0^&O9NX$=w0qG5(e_vSgO|H4AH=Sg#U(7YqJBr%I`0td%zCu^-K!SW1L z068(q2U|P9aTg*4Jx>P=pngTC&d!H_Z2&HTdisWJk0QcfjC84{3JRh~aaZ1R`=C*u z{(|pmHMB;b#kE0nm?vQXctjS_j&D5Rk+RjvkP2iX^7^FO=O{3zwhHm0(obv})0c;+ZJlVtK+gGSMCjOGz z{HpaXStcwn;@ND33z-mQE}^V;NKK`!WGBhSud;R^YEpR|50}+!n?(Sp@#lMRmrZkK zqgDEYQLcSy)M~l^06qC~T`yHA z67syJd9}Qa}$5t`i)q3v&SH z)xM-~_g&9hrol6Vwg;2wOv~#PD~$8;3IsTlPJ7Fe!MsDF;aP+D0VCtjuL69P<+?dl zg3oU=Kv3EWVn4q*-7DLUJcDrfZq*8A10&UHSvri^Uu3$@KvBv$z_J!p0h2Gt`MRM) zhsHvCA`Eu$I1wZ){7WRN&s-(c7nvkYbtl$(iKBGrCy2&oPW>!<%j0QI6ZSdNgov%P zC1>UPP}ajiu^mCX{YsHhPWidG>iNy}8clHj0FkzRd)=h>TP88*R#lZbN+k{q4GB~E zAZkuimVyH<5R)U4Xa~@y6_Q$gp~0Bt{{UEscnB1Ukb!;bjpDEppqY!@vs!+#TzMq( z)5JvItHI_`I=?1DXOa%#Fix8i;NFhDPKEpf>@d@#AuR+QU!8NlP)nGj!69VR>L28- zUePN7F~JIIpfkZ7gEC`dT0Y2{U>s5h{#Oqswq9axoo46hXCOADh+CVS7%7UN5M4`Y zgMxr>klyxz^B>44b=e>3=>T^nh=o`$5Gw~~lUhOmk>ns>opP>pCA0{3q`=e<3IMzs zFsy$fBHZ6R`8){|g$QLC3|JmMANqqk1`2A|Yp`niGhk!_P*wwosq9}5q8>gbC-!s5 z^n&o{YHEqNKR?9?gu1`DSrT=nO)YQk2bQ-7&x-RsS#AkS5ao)4usR#{;%CEqyZI3% z601A_Jkx@qsO;vtnxtyC1&n31Nam^Axr z61UyBXZI*+c*r4>KkOMNqZDxo(rRn#a>^SE*kz4~(4~DcMzILfuZatk>nP01$csj$<5_t8jX)5dP&Gh2Cf7(9rhN%%myy z`g>MQ&B8&Zs!B4|gLx(B2Y+0{$Ik9v>K?3*mu)pMGGV82C>l5LqX6@$TRwhCtpM&# zK+J2tNu~A$Eqf8+{DJ{7Q)*a;Ips+Gv{bBaG!i6;whA94`L2qO#H!=vUn}_RnLHlM zSXTa{=^?=+8p8&Du}WP()!B>x08labnx!LCKU1NVlc=R{6a7__vn`r`$Uj(MSLAb% z_|MiISL6Pn;C`^r*yp7G02zN)B-k)j$MO%E9Z(B$K$3UrGxbvo26R>6ey#kA2|9D9 zPfVY#n$w?+n#TJ(AJ$w{^8K|Wg)j9_TW+|)C6T5doIrd}1XUcrJVhBiHb!zr%Xe-? zr9<8Zt)w~p>of2+R?r9e9}HUY)`4ZcClAORKa-S33Ek{!1#)S1Y;#pp5N6{eT3lEJ zoeF5>ey)1YhYZ7oF;oGNH{*0NtvXcH)mOD~1vC$n z=&(QIB_olmTCfEu$MC6X&L=aVg9$z+VA3wER^rK=f0vWiW7Udl;B_*`yxlMrYDTmz zSo_kr3p(Vh6m@o!g%12qmYFmIxdvbT^P7IY(qzG(8rI|i#^*G|8n&4w#yFP^s0BvE zobX%>?r7wdQpmbvz?*^V6=kz1@}$WoyjSZv+#Gs+6o5Ga6K%Rfso-iA5KpOKRlr1r zOUogsfLc9Stt8Lt41jv~s-k>t67pS(=vjlfD9&h)GM#2)IwitD(j1%)###v+t0&}8 z>ccPWH>|3k5n!BO&y3562R%XxdAg`YW5|4puj09?w8gAtP`Hj-0ZOjzTql%j8;2%) z!nV$ykigcKOM8f@Wc!^0e`4RfCW)=P&k6{{TsreQNF)P?U|_{Jyif z+b{AIJ{lz)PFw@qqyWDGF#!%xBOegvo$W5g#e!C_!VY^u0AsjiK2GH7;AE%xw7Y&I^1Jl% zQ6eP4HmWgM(U%v|%OlNY)m{Xp`VjoNHNKX*=5u%m3H*F$cTx+aaGO*8Dd0qpZ8Vm7 zABe(!i!L1bD6q5iY7BYVgQNSE__{Uzf0#L0iL$uxg6s1j`S8}7G0Ih@EUJ;5hr_)s z0qJV8);*3`0f`rh2OdC}q6D2l;tcf|4NS)ZH1Y8u>M$ihk(FlkEWVSG9OWm0Gf{x0 z&T`~Sj8DcTDszO%xjw%9kri0LI2N1+GJJ+gu~Z@WmnvK?LrAmKKc(LvoA%#+lH}CN zKiW+kc+9Y4Xz}x7Zr5e9*b7u4Kp|s*Q7e)AN#xW>9nD@JLe$pCe5cnjNj};Hyfld* zo6q}P^cVno=0h#mPjBQRq*qN}=&$NrTe>sNwT}>#BH$Q=+;CMYRxRoJqN)~bX^3$P zU|ku@xNs&em40MqMWlrx+lJ#FKM;;Ep{R$)Y^GKc5~vyvQfa}E5G0RDTVyH}@;@ce zFle2oO=t%R1Me6<+ud0haFMMgp^vRjvAuo^9&a<7kc|h6f3(2T1Fp>s0#yV9Y`7#! z888x|&Go^`PB1HbKLO9sH1;nPEATOEt7ez>ChT;ze; zW)xQC7zT5YEXz}zcn1izknE&c8Ox41HMI^jhuDSK92kmuc+0j&#Ymx`IlAQFyNH@k z*<997z%r4yYVc!LuddbR>P!bA&9BjIq~?}#2E!@Jz@cN>PTFi+fX)&;PKFK;EGC+D zshznA?AabLjPGphBJ$4+KwjMhfGF z_-K5&;l*zAW475I#*<4&kLjHiYyL0VWKKPkHwO>++z5V8I>+NX1A1GQ_B-p66OaI- zB{_u#UtFmLlNelsJ7_biYECA*VeKBuHh_Lk7#5&X;U2O~@XiI^uIBcB&K>&xLf7v2 zbz~fU(LE&a^|?Il>^zQDDe-)xJIs;VVNRN~l0vXbO>@wYaFHVbn&lPE@-QbSJh;8px`txx_cQwfZr)3u9k0OHuQ z>#dYCCw{5oBT6|iwa|m{+*fi57y*SCR(Ka%{!sL*2b%uRE%sCH%r=n#laq^Dtbaw_3;_k=?&@@d|Wk$je;ocr+ zuc!b)1z=06mzpFBs7~(L5-rT&pAhuyBAtytr+mvyyL8O}onU(1-DNFAT#YrNroC4z z{5^6o?`PW~Dv|cSU_8n>XK|~t-0{q{Nela`2ZS0s%0$#th{%tORr_@msYB%%3Is(# z#FMI>OL6lo3UZFc08h`xFo@?DnHU}%SOCReX&PEox9^b($Y@y*mQ0w$Hw|cZ03Id) zBAFx#cwMbCFQoWm@Lfs%WfZv z2M8>s31tf=jUR&0iC^3Rsz_ zp&IlO(gZ31VH#>tfSI{1O$6gKwCgZGz?eR3jdp^bT-o3zd00r{+2wT^WF`{>@fbp} z{=wx`gy+g&A|RmJpYl%wE`UJ}3WpDAJv&0rU~=GcZBUuX85(@mX#L!^)t^&Y5+|SS zKlNKOb`nWy)CM5D>bdYHs=6(auyFxOPD(wF)c)X*6N0Z^enIvtG;7e(Jb*RyYil-| znnXBi$?2b$+2Sl~@?YKgt|UEz%rr=HiaWV>;h_X3s*5x@@=JP1zyeY)HqfE9iSq>% zEPRg>n~n(4E=!S!^I|(dIDaJuU{*!Up!uhW7d)$wPf@weFlZ#FdC=+%%PBn0`ZA&t zV395AVIj%@H_#yRE07`L&b(s_6)al0Xtse4e7y8`xqVWJfEx5cJmS`gwWX7Dve-af~!4IA=c1R`$`gIj-7^=3GqeQ1@wLD9(4Vjd zFBqUp>ppg5nAH~~oo@+qIAnpP*uly{3J~!q0MGZgu(07X;-dQT{rUd@ar}M?^~$Z;ci{dTtSB*Q9F0IwiR=j|rQ*9_J&N6_qKfWg&0eJbKq zrdB)v#;i1Rp4xx`N5nO=(J58TPsTnJ;mOH{8pj}*e8vq0bC38f`)M1LS|k=n1lhC{< z*Szqv5T9j?QJyAE#IK7y{Uxc9w$+i28weNiD&na1ca4F3B zSBi$^Eb`!1N>?$isV5+1-?v^Y7t#xGP>{@x1Ski?gO_N2N%8*x8=o--L;dRbwP9I1 z+T__jH(1n`yhOnt8PuOMDZ{kkfK!0pB?PqXMmq3Sf^MRbiVB7;!Rd^&i}Sh7wtki81OD$V&#*PRp6nM9eSKA$&pF zluo2ifO9xw`)xUte4UMw)WAqeEotU;JhH)78nvZcDMj)fDtwVqZ2%GyLhPC*5kJ_Vg~3F%qz@bKk6gbY|Gcc-i|Ok5NW9`Xs3k`1QQWsEr`)qs5N zJbeO-$@KMtMCPSyJyI?$uB0lRepF(Yj~t<;vDV}|n8d7|tkJs}lE%1(gHAC&=3IQb z>h=4bv|8fp4_@IW`=;E9&SHS;QxoL+d+@apDQGXoTIe`K6oKdPJ|sAyZ>l7=QzIWO zx#-FDxtu4paXd(eo+wRQ3^l-b5Cou4iO?!?Sv|lqih~||X-`sCplLaH>S-xnN{o*% z7hy_d0+i!4m-fSSSEOd7NDkLyRe}RPLG5&}+2#hI35kw;%@7~8*RCa;t;?{A6@m^R zeo+=cjqanUEcIH!7Xi)@NU_EPD#jDg>afyR*DjPO+t_?Ob`fl)gn>4Rw$*B?C@YlO zHf?IG#b20smM%qs@>#bB%<|>XA}CsY2In;>NpPZ!kmH6MS~`%W3H^B`+ZpkIQ0J&0 zQoCD7{{U&w_c>h8`+6m-EeAA>Ok<3RAkgBCQ;Z!^QONpxjAnHFn?@L{f;|$PLt{bY zh`~Y=+CXY^QV&tNAO!g#0R$!|xHA4g6wie-nK)iA#%_24SCI4c+#pjnV>MjMYkd$- zUbHG9{Yl<4VYy0-atifa3l^vd1{!PW;JPp)ER$D~b2l7;de#r*w|4=*U z^?QB7IPn!q+Ko79f{9>gE}2Uy^h~M3l}AXH2VTP^4{2>8K9Fe``7Rms1at5ob%J7$ zN%@?w>$lgz7B-n~OFTm!IL@R`nUX|TC5MCV0}`8CLY5T1vB!Ym_9&Qua@ml!px@iY z&}?q^&zeoe`^2!k!wLp@M#c$kYts*H46io`sfK77=XP;Jfw}6IEYXn>=i=wYiy!JQ9EzI*$V6 znVGp}3>bGK7m zBp81(%%_i23iSoV%8jx%Lve?JFH(3WkEWKTfq`qd6Htk3Fj+S$IwH1O1UZX*dfwC? zO;}muTFuhv~_8?DqBH;`&VN(?y<*o=WAln<4>O)?aQ`GlQ4TEu59GEw2Z{;8h`n&yQ; zMt?YlVQfkI9@dsTFOQ9H8dMGsI&cIDVCRbxdCByEIBj{33{|ZmI+^WCK&cIO$)>r? z5N$#umGyB#(gr@4u5y-ZZV2n${fc{6#30*Bg*3|@vuyVO4gsIez3GwUDo2{IT!-x1 zZRdyHr_hr>u%J{{041t-nSB%)5D9jk9#2gk-&S#Zi#0gJJQF;ovhU>4S_2AbwD~P> zoyy7bGrmO7-nv6REaJikB(A2%@?Jc9B>HZ4OOrTY)UlzDzKr`SJQxBiQU!+5&z4I$ zn1Xv$+jDYEumte%SHlgMJ)hUb<(WIk&xjVYBEJn{a-gl8r|)3 zDo|wN@3B`z=f_)JD#)~y25d$9CUs_nXTa9lue>Iux4}X_z#1J%7)-L)%+e#vZ>qAV zF3QPwE}V3!`OOl+!JVAL9y?;srAkfaRs21$Tjehns32M z_Qi+$SV?bxAS~@ZH=5Qg#lMQ>XRe^8)1>h%6D_a7`L2;Jf3l~3GsO1LrMX^K#3s@O zAK9-dQ^3fIlfB_31!C2Z@gxsKvQ z{_M01>?o-nU}mgi#8kBbo>k1N!Vf&vSKpUwWvGB~d|bTxIZ=QJc?uZWXa)x_9u~^J zZD?dcn6`fE($5$Oo}n%#N9xRJ{{Sty!D5$wZXiE4$F-^M0?04Gi!GH*sMNR_s ze#T5oN2OB+j%BKLyZ$$=va7Nc=VLQg0mzRFgvup1c~plKn>dPVQf>B0j}e zAty7r`8+k9M2B9Zb-L4^FAP@JhBa>}h|!z}kUY}x95~0yD})YwRv14Kc17jEBRF2_ z=&Xw-qbE>mtAkW+8iSj}4sbJWLQv+ABN!J2W-WjEzE%xFBJQ6Uyb1@3Pnc`FdA0Nj zAMEwO`OWSOftp)KJH?!;M4>o`s%<2iBE;@U;{!Xdwar3WL+7J%Llx0zsPeUJ65Ii} zqI@XY&>%ZJOb>~0yXhT(AndCOMkvUh%L$V$$abHQ?AQQQqM+pMt@{UdvDgB_*w#yu zH1Ir2Rs-nWiYUTWg33%pr*!`SVrQPy!^H3^YOt_7l2mfu=v8$f9vDy? zLo>h?1BQcn*MLS$5FEn^sZTTi076AwDHR_f@y5Kab1%OcI-QaG&(Y-!*0Dp$Z1HY% zz^ zsG-gI7P^)P+Oe|0U{qm}4^r26Q!xOj4zgg55``T2abTRinXASRawtDYMAoNHX~%G% zm;_L=GXTn0u3=DA$Mhz7N8fd3(xT<|%6_VHem~^Wl%pVN+Q%b(JWx9?Q)eYG3R#RhrLj~PXZG9%@#vr=GUa$Al{*q!GD0WX`zp7*GFV#b=zB#D>0P9M74Q6d?uo~7Z0jHH@C&ala z!L4s3#z#ai1|gh&PZ;3qexX#Qk-d z^GiA^cQO8~GFJAqTjZUIXW(GpD07X(kX95~x#Y5EP!VFK+QB@lAl0(guY$jU<50Vi z5Q2I?&HI>0@YS)nGIU?WiOvih8DAeu1yKq8i9Z}(Ky3jBp@02Ft?^(4!&8swt474g zqy~Tq>rmJBJH%J&!XpNa0h~o881%{!0BPt1a5?Qjq!yG3%((L%@GkcPyTWA*btz zH`~OyTC%p{yt@X^_3?PmugKI`n-w2GI2(iWT+$kg*)ae`5Ceg`DR~Whh$4AnLH0bh ztxn71$$l!}+V+!cA^!ke5|4J9R$h$%0A)G6=K`f6)Ny08fDa^^7c2RGLaE|lh=3k#kieKcz%JH`=m#mILOSId8Y(U;*vD+G{@=+D!&lsH#(ZPeq7^Av zGYih=x1vmObhyYQ>f*09SoXERZ58v=-&$dxESHK_)9zPq*9J~1d)AdE*22ClDo$ zrKQix81v=q;jQ!H$zj@S3J7wYa_5>;Xl28APV5E@UB~qw3#vs@De7wWfj?>tLzY15 zaDLjXv7qA&_cjylgl;fUERqhnn5y&kgqqY1%1>t_;DTe8AYG(iw21Wt#6VfW&>Slf zn6eY}pIb=Dd%aAUp?eT_JwEmpxU=n_2zI)*qOik51)Y*8uZSB}mGf!{lR);b8KG*J z=UrPI;E0G`$!It@`zoD&CW#+pCn-^5}86A0?+ru zjfTnoz<9CXtO`X%%U!ZfVCjGz=4j6d~+o&S}#)uOX1_ zZ&p7nun5z^CLUpU24&)6XN!4*SY2%pMQMcVRX`_G4qCsnU-<0ha9T&&CnTVAg%q_$ zppt;N2a`a_;lR{6s{YIC0*-#Pv&1e_q}RHKs9@Sk7L z!v>7via3C0BZ=Y~5?qMe&#NKOAB^>3tUQr&8jSB*Dq#+&eRx{d)2uAeax$q(mj3`C zkV{w~dBBZt1!X~+9f~!;x((TM<|8^MSF#{YSxb6r#PVl~nv86ZA`zJK+opm62+dBS zDSC2GrQ8a(1o;SxnP{(#PkmwngMC$ zfqfia!+#8b;Y(woH3187H^^plf?e6?cdybyKyA$vpJ|ZrBpT-$fYtb?*ZLL+XEZO} zYk((~V)E35Pd3m3W%^Xb(YU(+Yz2DjHT?k&JpD>u(071lXX+xgiUkiG0J&kzIJ=LN zyVqiz3KoklY?X`O{i2IXi%;4Dz`+zaVxO6NhdO;}FAqhcUSv)s^uIqrUde4wRycsm zvbL-U1Vk#8Z>erP4h6Kun(_G`a3f0|x`QcQi0HxY#f=HInFnSq$tH7t08)Fng8)?O zo^6JJuRN)C7d`^M`hfnpr!c@!BD0VQ<|0_3Y7t){cbd8#F1umdty@&NzW@WAy1(kfeP97<9QlEy;Qrc~ zC3zD~WS1C|spOLnG|?vsmY#8e`{t?Rj9R9^dE`48YK5l`S7cp3wJR z?U3_~%nTQH(ku!s;m0e;ppAcCv(WcCP!|Y`HYOd@5%zc=YDE1i$O>|1fYj zA~omC;eTe6S8**XZ4$KrO=zu+!$TlSGql7~vQPD4EZJa{$AVEfNV+Ch=jIn}vi|^7 z_z@}Atbcj&ZtnCe*aUs?{Thb_7UJxI7%rsLg6{+m34UI~(iW&I-08nScdn=p=sIUHv$?AS{HG`tHDCG*XmtHVG9WJKPw`bM(<*hP{MJoG>qx1pffp zc_6w(`$*tf@%TT>@e&l;V!@$GCrV-4k$+YeIkn2b%`$$~DlV^DRxv;T9m9hps5$r1 z^iQNjg@C%4+CaGkPCr+mc?9xcVtE^<<}|+_d;m;*^)o(N<%dy3${jehYGQ*r+Q%hH zP@Di#hS7Ncm)crdGrXyBD7Q(UsE3hVj? z>Deg!fJzrNAw3UN5i^%;$8RPymtP+~d2LODt1TW9F$03d67usQl>qe6Bar9xEivYG z+s7(;6@|@i;V-B{Z{PwXIh?Uma+T=2g|61u(ntf>nPf!zb7IA2qbxbd+@?(M;gdAZ zje~~`g+|s%mZyO!Jdfg%O=o&}OPlL-SN{N$5%(^=+gDMBtLUY-Qkg*(pX9sKX^2Q3 z%=O{&?3ARIAL1B7eNU9~pWJaFbb;YM9aTwRB~UJEYIxjE4&ZlU0frC4*z8dtq#lH^ zrkgpTNq24!D6HA_Ge|I>kD)FXnSOSoNa;1=5dBd6$?Z;UlxP|#){1Z#b_83v+e>PR z6O(3~_1h^)&1;r8l=3Dkzy4Su~uq9fHBTPmKh zJeYGleHqQ!&dW&>(?={)9EporvOt)?6ozC0 z+&BVymf1xqB5IPll{>nf^b5Lo7@#HVc2_)zbu;XZZN|$VM8$oG%_A!939A!Q)@Ji* zw0J%P+tt9cg?TQV1j{a?E%DzQ&95fs>m~mH7xfsYJaC}RQ_0kyXhaXxl7Y(8gEhU4 zGtLA0pPiLl9JHWkHS%BQ$wr)HaIQ`Ko{Acm2Xc}ynn8{>866ah`IZeMmWHkB&o=^< z;#R_CTu-Raxyc0>j%GG~8ga#S?nv+$PTj>>!lK zKS8sR=>TR&u>Sx`@v#m2!!q(n035@C6Xp7+rp;Q=rxgfKjZx8$zC2Y71gsD^oyQZt z7n{rvs~b&oP_1+XYCOSK!5!3(3KIwIxyU?w%+2J5B;dq_QTur@T13S$VtmO>DiiYU zisWH{xN$xnCkZw>fXyka^IK}EM~i*h9@lWkOq$;4gb?Gw*3HCE?xjjFNtFzsjYa|q z`2Bd|u=U&tT4*uJVe_uq8c2GP7vW(ufs+-I1B}%8N}wKBs<2fcGkbfY@}gZ z8?QG)!|EeUHprpLaTe=9@^EQWhse;iP zFO+ghK>Z6Vkfd{EG810oAie~VaZ9qM=v6 z>*>V!mTqotaAL=$Jq<2G>1XEAARir)>;N$%@mhI*D!_-A@M-!LGlsffZic70mP^b4 zu}M$$NWQ7)AngWt#!fuuLb#4AezC(baWcd#a>0#Abv`VT)UzY$$ye4Yo>StxrxlQh zha5& zO6|b`l|?`8q0D&F5E#jeuts9^;?z+|D5nILC`c!(o?kIxgp{b2;_}A3l0N{-5_uw5 zB^u{)5Eh*nz&t&S4S+y_n=er#>QWyMEKf2@O@i-eKtSgOk+P%62O*tUO#)%we_`#@ zB~Aq-@OPW&OsuCX;bPdQwP0ahKT6+#)!nZ&v`SR2Ry)tsW#so7d>_!cd2(`K6OS4m z3JKjHFoi6&sQdSFczg>igwuc9KDzGD^2oD35Xu=-4I*OCsUQR~Uq`XrTLeWU{W%|x z%5Gq=+6PSTqJCh&4CEh^9>7n~v2*%DMx>PnhIBp1p9@d^+<6YSa&mDJv-qp>P$1sm zl)C|NFc4fz@WweT+H_GIIw}rQdEEd%Xk4Fm`dJ!o7a-zXaz_h2R3#)vAkL!tB?sm?2L@k7KIj- zI2>?XuMLjAn%WprDE|NuMlpGv4{({M)ckML1-{2r?qS;#3q5ES5KAp-aU|$(R%ddu zl3sa&Ytjf%*Hwo!C3SciohSiCt*(A1^7=|233iXH_BHR~g(=@=Y1QS@mtsg#?^Ym7 z=2Co^|s zAv!XuUmGUMlk5Z1cSIc0D#^4{Z4Y@&9Yu*KNvGVLyMD1ZYmSV#u1mzo_1d8~A(d(= z0dVCwy5W_H!MBOTHw)E*Zg|uQbxIN}3FARH^B3$G!CaczNWT+c;d0QmAf*JTAe3$g zEb;@4I((!WU8-dOsYDETHJcT+hc;*AqjkBF({VLAt8EOU(f*yA;4x2BJv_6WhS?m&#jCh7FTCzYb98sxrf#8Z~Y~l#V({lB9 z98>YY%(-}-OmDO)r?pf7RVag3T7kjdWReDniHB<%6wal1&LCA+2 zR(;nv825gUWretKzx_>YA|o0<57esYi%i*wOCg8Wq~HZVit0^fKYZ6hHc7WCnCCtg z9;K|wiJly{Q3v}UB_ij2_oZ3M8PquzQ}#h9Ebx8D(k@y|2`%kEB3c@Cf&L(^UZbp4 zDP?VA?y4`^fRMEv^`yZhqX6|Nl71p)kWOnBB)A~efVDN9J)mmHVXO-H%)!Po7{O(z z1zS{9NF(epXprmvrLug?2aKEgLEHw1vP#v?tUXBCF5D>QXw8bAwJhCC;`cq(+K-@4 zQkDE>;}si7(yQQHT|{&{l%9cQqTz8kHae4FtML(A^kU-c4&%k4!<>!$a(Fj=DuQ78 z;cqS?Nf(8)-~s2vC)S)R_DYPoydp4f;vg#|6sGDxm@=9K3_t*hbZdJKc1Qx+tCR8Q ziwg5)@)l2pDF@wxmW{&aDwG{F#WbD09DMXAXbFZul+5b!l&B^9@^h9`YEq>u$9)_5 zJ;&ROPgxhWUl!2|Bm!1y6Fk*Yr+3_i_6&1a(4|G6J}JC;El+BT*E$fQRumlD`k7W} z_@M!(0@-(zMD(^`$0XLfr;DXcUzn9?$-S=S=L9?O4%`M2P&jZ7<^d=eZNjEFOo%!tSxJ21BW z^D#$A^zi%2ZJ-GOFv?-)Tib&U(KS3Jbn2dI4NXKWpZWHW4XtuZ#7P-H8Iqq0{6V2! zPzV)pU>eSL<*u2%zExK;=>&-cxv5n3m~rusKUb)@WxT?MH8@TdD_ij>NMn;83~`YV zH_X6Jc#81R42vfegM;WO3^s=(!a4}@KV_RuOEq&Y4Eyy}S=MAPk%h#VJd5N>%qWo4PbU6_z*%-;p5|WDIJ1e385erj+L zFJu{bq@A9l&u9^?3lBPI?*qt)`I31sbN>L=gLJDTuLj2AW!$sLb|}zcMny_*S#t!+ zKqlOWyuFqbk`|??qo#5oPzQ$eRmHRp0GS!kv-OW08LDM{Q&j9BS;oJiNe1Vb8zrhm z$k0oDSGyp(h*d>P$gNWc01Vo?IbqZNn&pL43wZs5Ey|Khnh&Y&w*a(t4k&6*Dtx5+ zyIRWLjG1PP2;p=OF{PrBOAqj3%kl%I;je_~yrDveGLb>@#gR_c6-i z-HonE-D-9Mg9})c88isUE?pSlN0hl6B+j2z#AfO>TBjfb*bFvSRX#bSu*Bl!(T~F% zi0`J4`U4nD>r1NYP~-*ZWJg?WuaB8eI)QzxKPA!Y1lr|VJ)p*viy!kie_958Y^LE=U@J4~~7i2e1Czu5|1TD4fg81xU2f?EwrPT?K-8R*C(`k6rPtL zg}=Z8Fj(LcI+K+s=F`Cc04|koNV$Eb;AZ5sl;ZjTOzNGj;7c@M)RTOiSaMVil_yAW z@el)Q!zPEf!1Y5d?}U%XRlyzUPH=kClBIN*A7}<={@JH!&XzM;@o#d>*(>%;JT2MB zh!aYBSy?prMLGa^bd2FZJ30P9Hl?-Ky{Y0k^4V50IQjj%^m`1)zfMc-sH+xMjSA@gwRy2!95w*18x%vCat+qTH(oPH-Dpa;!A5-;~7&N%=@dZ7u2=YD>fw z<2EDoUbH;(Epb~DnV7MPGyO*13Q&_Dbf(kvyN+6|5A7*K#$4e5Uv>k}c0*@df3(9I z?3+UdEETU>OC)*$$!OONe8E3N?Nlx0^x_hJix^+{yCdcMUhH6XBWVhOKOk$&j;xS^ zK16VuXspM?==LNkCTts#t!E(!Wb*$24uH=9&T}$?r}zH=h&{dvZ=esb!e0?Ay8My) zzmwUPtd3@gh-#13?Fx+rlgD{0iSd4A5H=YWd}bcsUj}#)Ihr*oq<@ZIJ6P}aX+v83 zr^-}kvRhw1MJ5XPp2-^dTdil{T5VGUCT;8P`Mj>L;+2NDJKbb7YgkID z8By!2s;ntfa?4=Y)v)Qs3Fd2lNn#mL@kZ9v;8e27k+OrxG+*`RD4{qb{{ZOw%vRiz zvdklYngJ;_en*wJJj6_Z!4UEOlINB$@j6V5@(X&yJUIsn6M!g^YXhrda+yAJ7R9y+ z&_iJ03mbVhsgyE*fPzDj`@$YFfDCeIuuRz-cro1k%J`&N$S|d|Bo4?9Fr~3HA@m(T zX9%siGOmpBWcr|Z^fjV+%Riub;e(n@4;Gm7HPtwNYEgS@zuf~)13tmqFQi6p6w!^l z_y#6utH7fP&-o>vwCtgH0EFgF5Mxr&P=FUk2m|QPw+>sE_vo0DCt9A7^?JgE_S7Se z3MV{Nv-U&99z&%}ubJm6Yr=P9waQ@6;wZVsnxLJ0Z&(tU>ySE zBXt>GMT7-MVSQsc6s*4_KZ($ToSWt*Cpe+FP-aa$BBB8z3XO`-t1zrunFtbovVkEjQtJQ>sxYMZiP* zMh+c~5dPseRunZnK>+xnc01VoHMJ(Ru_nx(6P)6V2l)I?335$mBMHAr?tOUC~G4a7(a-$wgURFvF|Yr~J-GutnLLL(NhPyq%Mj{{VPN zB&U%U34>HMW$T6Q;C$T?$DHl0R?C6OJB@q2o z?6rgpVYybjfuswP-GCy`s!Vg&+g)u4dR+RD2%H{7J1w3Kp#Y z09T)_Rb{BsA%DO~hqYtWK-FVZw76{pb0`L2(cTl5PN{8lyyfJU)vDTy#5=m^mrGrE zGqSMDS)i#zE`o;m&E4STM|mHQibBT)G{{q|IQ01#PPDIj3zYYfQTQg zU|lDNOTL?yapa66>yt}~r&gV=Q>{VgwpnP`yy7|xq;UOK(3HRqd%EScwWkqoRT#Q2=P*tWKJ0 zCXb~IU-dNlmkY#EV7ECYZ8GgpK)rfJw66k?VIBgwYMyYUv0fB)ZFV&Rk^*3)%djv} zdta4XOPhcU>wg-zyCoo`LRrdsnXN#Ri~FXw*JKD(p*Af-k*6*GrR<;el!TqZWVhC1 z_rwzn^3Df>ndTe3(G6>S+^3_kYuoG@G6 zIi&N0eok;G1Xi;ET&_?H#olJ2RYsu^;$cg224j%&j6A0`k@N8NJW*MVcn>1N48shU z9A8q!CnAMd1TAD?%=5{Uy#D}(7uIw1?nY_K&sdvcaZsAMo_82E4srHEbji3`_M`8> zo(W>iz>@=7W*i@08;g%-%$!UVC*vN&cs&a1BvJg4yo^bU!<;pNV+zd@wA^kr z7**&r45pNOQIk~y0+PtSrZ)j7egoF?0-HQSOE8rIwqeFg;FSPsOrsES&6*nVaDd>x zeJPGLjcY@bF5#Yh@$_*q%;p3*BtIQ$1yRStLxU|!NC<1%(f&9SaoWAHCoKb{n~1Ir zmU7~hP&ZdvYXz{GkzU47e3_`7)XL#I+ldu|n$*iW{@yL>I;Ec+d%Kjqlm$41rT$j7 zg_wRuZD=tHdFLOSP5H)0D_2;1S!wnV%!3au0ps^mbLv0t%} z5+y3N(7+OvxHP2GQm~OMciKNPPTAG7bVGjh9GG?DLYm;N1h&aOl8%R zoqugH0-eGu&UPKd;BT;Ge@y~1nXY610282#l6M&BYok)YWS}e08ca+Li>Sd;&&cJ# zsZN+GbDWpgST%2N5Pr7MVu4kdli*^O4QZ1}df*^V2$(~O9+&+nvf0fW5LtfY<*cUJ zM5pn}kLmYFOjCc}bIG}tG-PRoX_S=ysQ`=P`s9AoBR>JH{{S6!0B-j3$9}9&FFg=p zLIM)pAYF6e!u>-o#t1FKe3LRzvguH$K!T7Wm~ux}HzXJ~s|z$syxR3iSb+^1t)!>- zHGNH=eOyuk>{0}m5=u~{2vj(WCbCH%vY*%-GPejJSmx$xm+96RJfI#u_OYZ_EOE3hc1Ug7a@Wv7N2Bm^jCrdEh> z;SEfxA{NPxG(My-+z_mSgoXG^UklVz>wZ4gH!Yyd6Y(F923wE;4>1Zf{h=(FH7$!A z5H>(DWV6;J5wwzBdnxh#ipM3*R>1=9JPj|k-LoK6V(gf-jiO#HnMjgP{a9vo6HUY_ z!g!f9DC9pMuJPVW!8ku5UQZuq#0Bi(_O6^O%*!ceaO1$Yl^(N2S*6@@Ewi0lKUqd) zt*P;1cLd^~C8ny<2BFFS0LRx`C^hUA%Vn)*zbRlmoTR4|R;8uCnozl4(P{Lk^h;{m zZVV|lvZX}ifZ!GC?tX=$NcGpjEaz9UGfTPEtD4M=2NJU3-~-Y!-&mTmG@GZW+07^t z??1$3Rtt=cxsZ3<a_cZoC?HbTC^CveJ?^2#lQf6eIol&>dc90( z92XJdGXe&bHyUuZDQWN!z(!V539H-F)y%S4X@p1|tA!ZCu@1Y}>o&MH*<|Wqc8)-8 zt#z=60h1}&#~cnL$+}+DHz|vT6p957I*h~Jgsv4BZFBsob=SOM;+)b3z&X7_Lv z1AnWt?w|~tYx0M#hBOaa-Egc8IQDZwoUA!*Kuw$riJF}~3~l;~?q!F=j5 z9R40vEPxXB(g))2)eF@RYgC#xy4`--as9mMFPLmo@(W4w!gC7ZdYAxY*EjU8*xGwk zQzmgj6Vz=q~uLA@LmIv%pfm+l4>vsGPrQp==@S`>Tb^Z0XDcv4h`G6inZ0vO47v@83uAngvE7BODz!VV_dhXK`dry`zs_$>( zMo#%x5C&vu)&~Nyf;39xv;y*@oiz}G)7{m}U}`XtDFQqeDQ!}~Q>pI&H)o4~```g~ zqH+_FDq%Net>J>8a2{g)YqB}&$PIB%TNO@J3M4{fZ{x5~6QmXQ-#k!tbA zUaWj~REFI;t8ZFrms2I~T!cmo$2uhU##;~dOX&uGqI`xD2nU7 zxnrD>F?1r+B_2)veScEQ81u0*p{CO6Zd?a~0C0dJ)>gb9EG?wf(L-)fb1dRU&e2s| zn?+TUL2geE9djE*{{V(FdTDk&KPjuXuc8o*DjztS#EPd-z!La76=NqZdD*K%6~U)0e))N%br4`@*R~{$m6nh zlT(nNskhXD^EG>1NL!bS*+O}NDBR>pw`bATIrrj#g7D zRIE#LSw$gQ)CTo}$tI<7v#qT4m&c3E#hMj090i&*&wx2YQ;XCM40NNm;U^%W)aUU_9tC$FbMC)YX)+Lmu z+jn@>z~Tr*ExLogu}6$JDp(J+ZE6>abL;ZpXGYOd&<>p*#E(Tr)!=YvL^jV4viW-& zo1yyG=NygNOV=fI*2OuhyS$j^1UL^po(T5Kh8y}=gx#&G_EZZcP3xRrMOd6fHnB=jnqz>@AN+y_^Z=T8x3z zF}eMNaE)?y>M(3kb_u%;56LsGRhbq*{La|&Li>cw9o+TW62V2K#qBJQ520_>vOTk zaROyXrvuEF?}G&mM?V8yRTwDvECyXxx+IAce$47RsA`8JiR!wIf>N_mmLImdssPQR zNlf}~yrj>up#XQ7IYEU!Bkl%+v(;85S0f6~p1TZB9@7N*n#f)`7M?ssGLC9n06B{eSZD3WtMLS+?TPb`f80OTcp!IPc!fXlEsFH|`e zCkJ4-7CgzJFW^7UYp%4ppqcoBYr8!{Q{{sz*lTb4@yf%nuvHMwnL*}b__b666a7k@ zPs!Yd&|S*N0#kx>dpUqxJdNY+H;_1-pge)+hkMT?X0A#%TIU84SL2hrwy7F8BbHj> zVNX#WLXS#D5d&M6q3`HXq!-T*f7d3v-?uxFBIcf zvBYu%S>#Mr+rh6eCw+px!y!{w_7ndAR!*Y-0ATw+hdQzN^qk8)YBM8KFx+wdUp5^7 z032uzKq1*)=Kvf0iHNJ-P6PwMq|E4zBpD-2GGSP7V2*@I+zCh@ZnqmM8Ak^4FJGxm z$d+@OP9~le&22d-$Qz&A!PQ{^&d?_P`-m87AFkgMe3v9jo^VN+s0gtgWHvZgWk`NVylj^87r`Fq!e8@jvUAP4|okKa` z67TX!lIiD@gXP8*Bc+@G6FQRCPpz%>k5H3xc>T| zaB!bbxjax>)cYWoWa=u@Kb=K zhx?!MFsuZT5gCTbmBeRZ`HKLZKw`hs{EXWUqt``+Rf-G&;EP!fd;NTIaUz7Zlo5eH zc)8MC+Bq5Yjk==PT37&;KO9IkBNkdAt@zk8`!aqmO;*`$GXlVto~=5~z~qe4Y`=3z z2~X=ajM}S-%%BlLf>+J6k!%r{QEABW{@b*NJq??*vqK=PmeLn<@ipAmE1wTDT|(s; zH>h0u+-43Gi7)9fDOnU}g1tyKaFWvpt)nD99}s+imE$swJm5YgTss_tSejS4Z zBedrcs9tD#!H(*jJ680WpCJDLA()Y@2C9dTn%(Vs=ZgY-C(qs>s@~q_nLUeCtrWk% z6~tqL&oJky!p#jMHDvJm()O;Os)`@mYL>SZ6B}*XyDt5=(leh=r>U+bD20A+7m432 zhMX+3@gy}#7|fD?@lTPfx3u|%QBS&|#+1fDP0I2Tun)7K$;CY3(`a_R>hh zdU0R!tL3hYpG_UZ1S7+qDmJ<;I_h2go8H!86l4Pcr1?77)2t{tRA`%HIsl|1Xamri zKen!dK5bHop|y0=0$&a39f;ff;LM_12@u05z;IbUn3*xtA@g zz*OvDT**fR(fjSG{{TtT$OPPin7L$pxxOJhn(p?**CbzG<*PuFdE z#7Qgzd_$7y!JnCt`xQ>yV7e19Gw67bW5?gg+z2t{d%RBaNxPAoz?W8iqWVLf>a@Vb zffmq{{K!khP$_ws4puQ{7k4V7C7rdq*y%QljW5G!RyZFNo8ie02bg;w(ZL^L3%CM< z^v$^k-*p5$6e2v|LO_8aMU3K86R5`mhu23ufrb_C>xYrJJk99G=Cu6^H<(uyVo~w+ z#7GwlM4Xy3)(``7v&!wBR*BF|^A$S@;PnalTMmS&#$2k@N1K>ugW}g!ma(9N{;idD zC$#x_@x6`%;~H5VM*OCFy<4S?gtpsx|c%d>uR3hVohXjZ$of0 zn+4gx0MyKZh=}BdT2(lYNPt^a_csayS5Z+2m^i29+VG=Vv2&ZuPiV`{M>z2DH(x6% zNDdmQC{0XI<=sV$(k~S#hXMOuTiV>HSb2r*z-Kdoc|KJ+QI1@3t#lI0Kzn7zcSr;{ z3IVDe#uS7mYxSLn`(f0O_D7GG>zz3ky+R>8P=r|H zv6Bt*tCDNs`(cTmHdF_0NKiB9A^om#;a^i*()y33Cbi3G2CNLHhZ#w~q=ZYej%D?z z<`rL=CFv35q`l>uxTU?)Sw9XO%-fZNh#ehkSBa{o@c^A{7Fr+VG=YmG=K0(v067zx z6#EaSo3QY!7+0nl0Y)p8!r*Z-nl>kKVCIy0%8gKLQ%y8>c+Bgnso5mp+p^iYIXBH|)@9gK@|^=;r0G4--@v*-Z_&EfWBtl{#0O0$t- zDwm&PVkH=US#mjz z4#gSn2Bc1RBxzB-pakYlXUQCTil8)}aNcgKjPv&OC8Ujw6)*uafjNC@sD{~A?>(>0 zpm6b>8)It(3>n~V?~{~1>rQdm6KDX~Pf3@@BG&%@045RI10@jG{mX7xR1hf~>3`zN z*c*|JF>;*`!R5FBFF#Uc%D1w+Cx;WL6KLzd_nCJ6Hyb0W(nzS<4p;(bz}h|p z+B;0pGMP4gR+HIMeTU>L*F0~b3NQ)T@rbPIc zNtF&UCDvg?`Epj_&o`g93aA67Lp0@g&g9gP0rMMdSFVTOoXsykkL$Km`&!q?om=#A zU0syb%g(vyc^s7j+q(BQv$(dK3^iJ>kS$uN5>#_EZso4Y!c%BFW3HcUzRci}P1<`S zLvi@v>e6d{9`O1)YHAOHnco6Cyb=NHv%1t) zU{rMQ0Cj|e0APgR{gj|hPjL!%S)u;`*nfFs3~zNvxD=mPX;k$;F=c~2TOE1&igMOL z?<)F)E*eusUePxUJhfOg)kg`5q*=M?s7vu;zo*+S2l+Zu74r|JIkVex2Mu;vNFZ+u?#e|h3`OknHWlt96-fWiRi+t84%xExF z7|s+x*z0EopZ@@Q=VeF{G9^%tx$;2TfxcxkCGE=IL>Ry+s3LLs&WX$HHcQWx+D*?| z!~|1$n#h1Mqk8KEC4lY)jddY7<<0^sd%6@QD1%*@K7>xP%UNXdEGfwKryI5l%DguU zQ?0G0Ez8INT(;msmvyxnPq)Fcn*}iYRgy%BW^($tCev;RyXBkOHz`Ek#wdl&Py(Ub zE^L3`+zZ;y4= zB!ZC@_=9c))WB**0ciTpZJBx zCz)}TKmL!y;x*H)+`sCB!fH8H5!>tm4%c0+`2>PZQ7FwwQfhJx4BTuUCTHfh)_UN1 zAHOAk-~N94sbu8asc>>k zn^q7BnF5uKstKLwR!_s1HIrBm3=XE#)*pIL@^<$kvU73TENidP`)YmJIED*@!cAi@o;rhhTGNo0&DEE?!Svy8f-aN}Yh zYF;{)AG-xqa|1sYYI{wThB&hM#1z!<%cwA`iGzCrO`_%P1lyceZne4ooPC1-0CE|7 zm0uiNa>8&}ryxisQAuTo(haHsKF(#IGi*V`F)vmZiOUT?VMOh2#OQ#CV+e2_TgMSqcgrzZjN z%}pQ~MaLTNIN{ry!9vV+j7&2U|0&^i^Q3K9}EuYiitq~zo;u1e3iwZ+unMWR1E!|`y zukG}w?2svOf{qyo0A_F)CTI`R2dyCIqyQn6X7_#d{*oEtFEPv(d!Hn-Ux4d)oK2{myy zhGajm>dRMyue8qIpCpGZ=FIS9>xLP?KqnD%{{U^2hz=nFiF)e!{{XL5c!yd_6sdlD zbwiMArv*=q?kBc{%db})$=bQwNF&OO<_IWs@nnTt&!ig`>ANGc|&VT_tJ#!$3HrQP~4U}NiGeMf83xo97~;w>!aviZ2M|L-|9$T)|aFc zl(K}We}1~Vr>iYK9CK4-~F@wcumZ2uM9O}DewqYU(JB1MZoE}&i#RWdQaSNMw zNR{{WBMLvq%+O1I;>-~fKRVBe%O@Z; zWxh_iNduJZ8Z+kEHH>NY=#g!$?VHeFU;PTG+6353*5)x+z2*_y9uAT z&w){NjX?EL`6l^5GKsi|ow6k*ka3x@%O%Lb5;q~{^HQ2=66~~cXuyMfzHsUT&IFED zbpeHChWSzAqAV=#o-XwG-%{-B0JPM9OAHG0K-pTYt4&&i$&8ccz zLX@Z_LzsN%4wP5Qe^^>+ayF4vpIVaQY(}+91Do%uAGaF)0IMhF#ktnn)#HnjJBN~g zImebM3e+4_ekRj}4o+nNYUX(}ipS`w_V#c>nxSqcWqRWDSxSDXWmLtGIw)6ec9Wc@ zNpkS*cEmkGdMJ485xt*bY`Hy#P#pGK40kS|0Y=vjG|UCvFFrw`Jr zG%a1v{DMpOft_D7CB^OUhe06MVD8b<_Q+l^G7?Li$VbfH z`q}NZSXiZwpy(%k0W#)Aj&xC;P5B{$KN^QEUeFDSZ)l%~waDZ;fVjoAUe_|>+7&45 zSP<1%OHj2ToY9dIpoBwZ1V7U;EZo19ET{hB3^^P3>^Xvy_Dp*&XK^(l<1KixQ%o5T z8L_|BN*=7|%+Ldty9&u9cVGY|gUO5+?A_X_01T69ipX6;m*8eYtP-7XELX9eTv6!& z3paQxLBYuc8^|17ez@iPh^WCN%jry9b&&9J^K+Jwz$%9~&v|AehgXmedRt66)@Ic2 zBAhUjRydy3b(?!qu1C0rbrB@+q7RemnjB0x7;Mv%FbeuZHi+c@suqm9XG?(*!4PL~ zzGT1y$AhtF`xK{>lJIHIPcK|GKed#t03oJ)$d_OgfHU)ZpvTAS5oQg5_(H2)>kkYD zC`$-2$zCaDrYYF^$(GfE#Dyo27S~d6Nx_CZR@I$+UVIAw0Fk8f-|~Qj?m8BsFyITS zNzfu?mYsP+USOAJr1n*Thgkg!HVlkAbOUM; zta1hO#!jz^R4!N8>Z_X$9`f_LQ+XWkAq9iY{JXf90&}R&41~JJI0p-Z13gJndj?;y z{{RYkMB7K=H^Eznn4|@lH(&?UV4%eCxPU)^Z$`N_P9|NhCP7AeC9F9;ba#bZjmn1= zw+%mSL^k5N7Ney4r-jS^07cKlZPv1S1%C2a+)vLB{IVlm5Y&|tlo)LLD7)K}tWJVgB%cJ zox2<;4-OLb^~}PkX(i3$SIVLP0Kq4pmHehxagW$Z11&n4jx8Q9!M`fT3_&olji~qt z(y2OK8?UUeB=P)&ViyII( zJmoAG$+p9CI%y*x0;@%WW?u4q0W`batAA3V<>*cdleLxp_zQc;HDR$Rd;RMY`Uz;t$ zWC_Y);@YmGV4>(vFmS(QtQ_jjII4}%vzjSz6N_w+B^}4WC#g7Z3LlV7dua@u6d4e2 zXeEy_VLKZwz-8wvT9O0#8L#nU%rP&>)Uz{7_`uJRn*=7D%%sQ5XIoZh)YH}cj?n2o z9B24j&4x^%jK|_KiMzP64gUa#C+JkF$Qv)kx8TO8Ec9{P=glUcW3kUQr~0(t1L^8I#GG+r?KlWXpdy!c%A8^n4jVqiY(Cnl};}kPx2zNW+a^w3wda~Pu7%!E8A9IN5Po!JMf&# zJxuZ+nLtc=5b{ZEv2D$G5c=}$KuBDW?VjpAtaHeiD_ywNjWhc@K4Ewh*hi$(peiN+6`xXxod|O+bmIT#+&XZI| z+yDnFbm*Og5>)WI9u zd}m}B9Is`bFZj0P!}@D88eyV$8l0lZXf-!cwVab77)kN-`!!Im1N&aid zM*uz(UzyWBgqIF2@FC*E$p8al_{R5S@c@zCH~bnnQl!Y^=Dl{`USt_iIaF;ZE@k^u zfJbWjzochBvx{Qh-jVS-J)yJcs63c_ZsjoA1)f41zHNqSO{JfX{KW7nVo5;1ihPcx zyDzCrPJTOhEDzZu5csw`RCWGCSH}U|jX-KsJ~_1%@&|nZd{bs389K*4AIJ8km17lt zIMCiXIen}VV^4gadFk!K@x_PtKNDZH9KR9|2IE&OVoqa=c8a48N{f@<@~Xe>G8`pa z93Yfr!}Bpz7*+*54D~xw&*t2QAMu-8m2*E4tJ+Gl5O)G*rn5W|pV^*{;{Y=(c#nzY z-1(Q^i}^u%Qo*0Y^}GlCauTEA*Zq@V{K8L(?5N3xONW){HnLt)U#mX=!u--{W;k-EYj*Y6<-$Ji@_=( zZ-?4XsJ?t6*%zzZm$jb5I@( zk)zPcWB`R3u@Mi_!x9T^eZBn&9s-M{8U2=;gqQN9Dxpqw@4}J10zdLpOY#2zG1I!D zn#s$w_PQf689uvrI;bkaxg;y`KONYBH|@Y7RV>)6a*i z+e##O<>eZE!+2w-C+0pmyc}c+CL{Yk;#?2-?<{}E{zqR@UH8m&0&3VM^0 z_Q(o9f$j;015jtkzf7Ffx7@3!k@0O#suK)j4{8*W3I71Z`%?ZpC*=OG&KV?aR7&{= zB|ei{W+6*vCj#}TSqDZ0nUo~{v-V~3=~uD%rC^GCN)_gFCl`yqfDmA~`HQnECqEZ{ zD3rQr;(dUi6q>xBa`4Kf{FHgw*Ir-iJL%P(Z3TNR$1JhjCC4HnVm3pbIp9iW*M?MJC6LDD zdm3@oD$TnZ^=_z`+1dyDlEa83LnTxblL5zt3FP&yFcH{R2Z!Y|lf7TZIsbrXR_MMJ_H&cX-CR% zrK=AU6(ajLw>WY?j2FIg12QWQWAdY~ohBJ3)w#o{OL7JV?Zl>)1j)yTbU#RHs0^Mi z$uNwYmHGbwAS8z+nQ~9fUOYKx@MUr~zwK%84URSV_FAkxPv3?z7!%-a+OTjZ#~wZD zO|mltzSzEL0=_#ez&SSBz0Ucb(bUx^XDs^FnRfwGm`quY-^sOH*q+rM50}4!{#>sg zT&A&cNYEB+y|sr#xb2@dh!TY)LiATZ_7tubu2}<vMPJnaLw2kA5`^kBNEF@#8W(;{+9lH%^px!?BU)}NJpe3Mtwy8On2hzmiy8*Y)EEd#ZKJyFR%K#r$i7=@@k zW$e$%A_BnRHU;27M*ik(i#{VylKbPZ0SD`2Uk$G$Vl}ip$HF%bPg<^V3}2`87J7~U z0K~ti>JuaB`V#o0rH`*%Fl_kXH}Yv<%Rdp6Q^b|bv+$@1%E|SYh44LSGnfto!}v`9 z0FG8G&yM(%~jRA$Ll6Hh7>3pAlu_T+HGyH1w!;34HYOqK*PBgY>dNaV;o{ecNz<^KSX z(j`U%%LE6b0Ld7D=fKk*7ABDpI-;(u36&py9*(2xz){6Z(f~1E{>b!Z8EFq3j&!0x zqR8VTojmQNgRAk{Xe4a1f@KgaYlG+nBpwXXEO1AO!v{u<>C19rCF1@+DX>Yi@gn%_ zzkC!0zj5-(I5|-L`-oC=*xqM2cPlGiT2W;7xCOT1kenD9-3aB zWF_F}=4hYv{y(xINA@Zo8Kywwn9%h}2um{IEENJ^!=5pjK_{swS3zNXri9e8+17^9+;hv%A zHll$ieNbe1hdEgSzQ~=S;gK;c5VuF`%5PYHTFp`P88ARvnC+bBvN9p1$lA4M-4PjI z@t0LcJ03>1=Sj&$#mQCLVES*NJ;L8U}My%pqt*T_6xs`+vz5(jKBTp8z$ zYKgGRTAbG$KaGps+Lqybz%|nDC0MY?nsv+aA{7$aUNk;Z{DGFkBqtxpCSdIt}#mSGc15eo;5}Or+0_B}~bNX7aCXGGnXD3n5#p-u11rHCPuT@Y= zYM4v6Q}HLrgJFqfyS;M(9Yic~BF&7t=7iA@IeTs6aw>kmijyu$4R&W?5Nvj`u$Ac# ztXschs1dDblkeLl{Kiam9asl<9IXdB+g;RdqW~nz&W>2OpN*B{5hQj11Ae7aGyG}` z%qFFBSQghl(p_^NaACq!o$Gozl0Q&IpTbw1`f(1!)Pw*~228&}x zf8UX>TeZVJxbrP<$LNt{%3{Mjw?{{=B^i);okz(kdx%}gQL5a@hUEK9YR=#B0~0Wl zYqZw9&UHAOFUm}^-pTNzM&STt0Mh`@<6K#9Iy?`M%u=>*+{eW3V)}1!frGwUiWn(T zDq;TskwkCclTZt{AXlk{QSm>RNzzzVAC^8!11YVQeR+?PWzZ?>pa6BhB!3XdPy{L5 z0iIL%tQmQ?CXq2<-M!fhzqLF?nAL1E+BTA0`T9e(r_0GJ$W#WP;@K$KMS0ftgS^0Uq@M-+CRxl&t0m@sBRQFFW`R^4`5cs2$B3{l5y@z{*DYO;D8Z4$?=&^ zb3Tp*U&dujN@f7^Ys=2C;s=#4M!FCT;w08fmaI7e0WvDnS5F>FH>o%fQTYoXp<9jfQPIiYAUz|hAENp?9%WHC06%DY z6ocXZ@a(I|2pe!7L3EX@IDM0|xvMleAdzSWWy}4iPD4VgqDz0vpaN%{^e`NTiVtz| zla-T<&B0L$7f(59th=4@`{b-9TgAnlH3H1yvo(e_7oQLb2)y{IU5A<&qVf9ciNI@7 zFV9kn?>gWJbz?&Mh9b!0)CR8R!0 zPFO0K_vHD|-!rnUxdoAb47BbJpZ8C@l|5X;h(CC+TDn8=yK(Ka2g~ry-nq9c{D)7r zaAS*HL@B$uCd4RmQ|%zB;trLVZXK7i0fAgNlm{yu<)&<)FeUsIsLN16)#fm;U*!+kbb#c0z<8}H9JD&K#!QiM zR}7bnNGB#IA2DEZ$+IaHtD=0dJSY1Vp+CqeMqVUxQt|3OOp%i1MS%j#7Hz1&Qd}_` z70qidejE(r#e_yhI5)MK$mK_ck5PyZiCV{#j0=S8NU!iC^QRw=XA=*p{?CvJAFjDG z$tu9m4mOgo#c^(A6yU$8j98>41CFo17d{Bc$zOrUgXi~;%B1sAVWr6Ntx2T4kH^5( zVtkWi4sOKkJczjQ$r9t3@}eUfye$&tOEtjC(aq?JW=_539e9iqz@)NM2;baeiNZ0zVjX)VVQ1z%aXiy z11L14K8o0qnG4nzaUwKKHKEe-|y0zQNA9E{qaR)6aI z^AZ@l>!?Hl2ooL%`UgclO9M#p^D*FY_$xjmR0Lu<^U~w}cvp(of3|pi6XgXs{?*US zg4KcKpEEcP2*|#g2*~lye~$z6$$z1ExfUiwf6tXU1(Bcd=edP~;UFKzRphc?kr4Wr z>p!OX=;Xi9h`b~uaFJpDR4pb3VnxEK9;_*#LPd(0Ncu426VELUE7k`|}!TL_Z?q zXI8V~$VV*uXz`zg#ap&!~r?kP%`_v0NivH5+s z${>)I1OP$eV2C+=XC>xkm-7);dE!Y@Vw}&D0h0h{{>3`va*d)&6H&^;~tGs_N90xgkKihR`L-^tIZF?(-orY4=!1Gd!(V8uf}z`;o3cYT-qJ@PqD z?&JgUX)VG{qB!vWGYK=184f)gL=IY@6 z9Ia40A=YbxB7ZY3fmmyy4zMr9=*0_HH2D3Fwo6(S+zKXdbZQRK*}yrAZ}Iao>fOvn zh*IpEi2jSw53au6Mbh9{V2to3*U8OG@ym0#)9VdP*=!Yp(_a?hhFXo98{?pqUf=-y z_CFMhYmdZ#4X?&_I?9bKh{wUxAO8T2m4)P5PFVpk>KsaD@(@qs(aG({{{U0M2>!`J zYUC5V!6D?is(HxSA@Pe9bP=1WP}bl|&jM!B)m!Rnfw-6K_EP7T8o?3ewUmvj1EYtI z2P+4TKxGONOan9GHp!Pbnxeph;>)TPo^k^07-gnIgELuy{{X27CR8ht^%;-uK|J2H z>f_@!IUtmShmM~8hpyD6gb-@!d_yM_SC9B??T4$E_UXPIuGaSUD-0}2kjrN^38*0e zH5jWR)0Jkvqfv9jOPt60R-zzq=bKu?3{HXq$QShjc;}!13&7T|{{X^S11vDil03u3 z{eX0t^9<{=>=}-8)C&gTA%yjKTD10muL+r|n~Ri#gtvLyyTELyP(j|nq zIDYE4QXNbx(n8wx3jVRRBvb8VR}k$1H*aDZMM6i%J1H<>&cD3pX{`y6-*sYm+eFqF zCZG=rq!P`-+#i_2PXK4dUONjs{$=%)XEm8~<34hc>{=PaVlGGidBhU&XA`V_;!2ba1 z4=}WX%YcuIo?oy&9tsvbh{q%6)a?v$52oYQQu;bih$VvNi+N-*ikgfIeuv2c=9c7u zeCcHC>CYn+>#9+nPmc%6$6(BbLx)9y!%K(djcdT#e18S&a@@{jIRaW=j!IU3yfoCN zaUY`d6TCC@e_m!b2r0Qda_h-wh^TSmBF|y055&#upV@{R<0@ZZtJVDGhb?h(BJ&U;u`D?z2$DqTLKR59t=ewOBPE$h|@UpdM>m&BoGy4E~c!r!M7ng4! z3`)8l+>ISdl?aL4FayseJ{jA`BB5kIVU?(P8zKq%xPC$Y$>gC}WcVtP`uV%3()t%ll&p^j zjyQ%>4&zd@iS@BJhys9xbAZGqLBJT5y930G02Y+vs6L5ZaRy8A0c+p~0gHP0_77*hY;>S-ECEA{16;V(YQXmTV%Y(3Z$cSy0mx@S7K0j!>GE3k_ z0YV*;4CCl?W>V&)K8z5@(Bfb#1Layw3dWH7_9(63N+EDzOgWDz0(K9~(UPG12P*)o z0uej`d8vYWvD+Yr3?&IQ1v8(3lxyqY2g}c66lBIurx3v9EIp6wJ*@c``m(4N={_ux z%j}^5b*0D}ClCI$YeKZ11L#4OXth?1PF4fU{#&V+nkAuG%p2GmwKon(wG(Bz7T|k@ z5F~?+OpJq9A%0Ed!6c-3k%m;MSva7$Bs{AG@f581`KQ&sQvS|fVqfe&CL`k4g3TCP zL&~C`E9ctIOhV^kgCWRgta5y30`cIn5UAX&6MZ6!`B(V|w0B~pKMrQK?>Z@Qk-o}fC&Q+P6X{YHA+tX)~;#!UiG{o7S?Hg z)?s3%ukkh|4rTzyi29Iy0jh!XP5PnoePwUZopF%Q^Usxn)ZyGCmHz-Y`EJkqzjpME zi@5ttwzjddLBP~*9GIjf*WtACaFn~v!i)TCS%k^@lev+GmcpD2zo@!Bhf5Pf zYhS(WD*?6FNN^jbY=#lCO4waZ0v84YCf;B{McTPFz32G&t^? z`CPcH88uy^pORvyk+!8Kcz#c;I?85LE1bS-pbn%Xn+AW8%RLD}tF&>t*EgDQZDVNI z>!*lr;*5E=`CLUHFqQH@hsY=iGOk_+!RL0% zsiJuEYw^8QzQ?RzMY6<_!G=ubyx+e?NQEfXCl*ihy{zsP_VxJR)eXkA*zVW+n9_cz zA;t@|K|vSDJ~-U}02hh)%V16n#^iCIV<9Yw*DIX$%SH$i<1zGs#!YP_jHB_-5h5=# zyoV-&bJVq+y{udB9Dx;`t{apCH0-st7DM)^(&MYF%g@hD-sN^s1MzBgR z{a0M`sZ{7mjbG|7#db+7ES@GGsNWn_%9&Vud{)Ousfmx-r9-m)LHLT6-&(gk>itg9 ztGfu))YH%EHo40jSql;7*W}XD`nZF*GSEJxzVcfZNZuB zY9kf#;pB_jftP(`3Uzx%haA>onZ84^*O}#Xw7mHJue(&I#-cAX6$653Y#Gfc&o8cl zYgqY3VsHNdss8{VT%aDL$B=#Y%rk;7oy`-OkwADX~Q(C;jXHYkhV2268q%p_n zmobtRf)ex9!?=rpIUx&wJauv$LzDji&*E8yYRPj9=fux}%W=ecb6QMQ_!C%+4h(_ruj$_)j(1QPql=*VHmc(!zOg|+bFK#% z=W3StxPjOfn|eZzL0CWi!8}7{ts>x>m4SZB7^`kQ)cGd&T|}UBT%H-ktw6ZiyyJT- z#@YHwdGm3nc;GO<%pUkv)IFo03uLn~B#9ZF;@A3=OyEAkCy@mN-zSpVv(eF#ZgiVX zd8i5^Fh-7_U!D)jH1~ZA1UpS|>}p`Cz$)=NI=!rYx9`u|r7++|q8)?|E+hPPE(eAa z!2F^^c3Y5_>k?~8t`!=;BK<^*(&8t&DB19mU@(t*L zDVta1F>SQ-CYwxP42=R0@_AA1DAGN%{99zjTRMG?BSe`scJ!BQ@f~S*`=`KM<&eV^ zWKziyR6LKUYJ)RX_0+tQ=*+k#wLI}(Na3fRA&8Numn3a7;XSbv0L)lP&SX;yAv-YI z5v>3wrm`YPM5*~#)J^pgmGb423fZI^N^f8U_FpQL*RY#Zrt-BlHPEL+`}wstU6Fb1EVqknHN${{Zg9hfd1AIPy(54J8NaEA=7QAg|Z|0G-o3>UMSi z0GdBjbyK8;x_a2Huj+=->u~E}LZj9E^LnVO_Z*jwgXDPK{sw=Yul~vVgnVYxTCK9Q zW2zua;*?m{=B9wv^Cascbjqp6vA2HBouupQ`=N8dDIz)u`~y$X;YsUl^vMa^487-Dd2Af}>@A@=af#eF~884Mb>SPh@b zrogyxXw;!2$&@FEGJmtmK9S}ziW?}sxlu8gg_Ru5TT3@)iUFt(qQqEh1=QMU6x5Ye zX)<8>`)|nF{$nT7R}S|N;N5wbk#0AGl`k%GTQ0`E#Qy+$O@FT3GUlJP?=i<^&z0rF*p$AD8I`x75B->%o8$A z4rM)96IV2Z%nN;r`QYuGde12*;}+#^{XIR`K`Z>WphY_=UdtT z0F+k-JlpMeyE)E1j{3S(kfB-YNaKbxP);BqBb{n0sh``$LTEK%rcE4pb!`*c_!E-> z8t@7*{uPad&3Pm_9PSC~SmeODW!VrOujkGcwJJXif7k%S5<1s7B)QOCE6h&F7$4HI z#h)dBV~ni8yg-D!qNaB}K(4PDC?#SOQOI)i$OK(qZN@74>_CW?%G$@JsG#yp+%erx zdQ8DNH%gYKPg%%cBsIp8c}jvG&Se{odARYBcl(;qDI6p?o-;$MXe-at&un!D6Ct8$8jttsjNjn~)?#nJ3k7ZmK0gYBEgu*1 zJ>sJ3B9+1N2Rn5Lp!$~Ox#~25+mIY(2i4r8&zkMc`lb`+aDmbDEv*J3br*%Tb4!z2 z?m+iAO{UT^$*1XD{6<`?3%MRd_ExFFOZ#Z%>Wc~nw}WE&<@)*Mke%2${Z`zm)LN zm5=l=%RXCk<)tb&+!X4J^wa$W#3{(sk-Vut4! zp{FuYiBf6*02io|xh*nDr24b*jZt>=fQ<=Wxge>P_R3FtiSh&cX@Mu?`sVhq#~AY8 zn1Fw5Q4!7m05N?D!G^c1%zTc*`~z56BidWDS$;hvw!J{7J)-XyiO#e2we4{-`Lyq$ zH4&`pu3EUW{c(rD)R50v8;$8}1p;4wWt$|qQuL_&8{Lppz#wKXf2gPQgM3Bx63KmE zW{7br$yk@mw#9Q4&&qU-$E+_9L=tmLtisYiUB)T4+Np(#q!HVJpC`XXGf~3 z?QJ^VMu}jRLJgddrdy;|f3~!MHr-IfTOZsdRQ~|_h48#HhASf|wwkMvhNiFpMY28Q zvY`Z7G#i`PASD*6A86@T$dAmJE0}c=XKkkV0FXd$zvkX?ZIzH5@aVPjsOJ1s{jQM) zBA0fNeDmS@O^*ug$CQ4cY3{V$?0#D>nrw4$tu5e7%GLamPn8+S^9B(SBrsTS+Oy<2 zii`js);wm~4P@#=V!@G^9zT=%DR97HU`swhyiEA-q`1@ZefG0w@xR>5VwGfQL+?}} zP%4||%BwZ-5z1Zbv!;*+jJU-{1O@h0CGg!-o%sgyb1G|6WUPqk`R2D*CV zR%Z`*LTSjH?ThNj?b_oWFMp^tf+V@^^JBINFzGYI%T!g*_@pXJ zk57LJmCyR6k7?I9$nVb^E&jdchRNEjTUI$7)0irq+XhsxFy*Apt+Hi7Y(?N3t26d*C;AaQ?VhdoxL0Ro`6I3;RzNpp^xSxZ{|B#;O?UTro+r%33? zxng>Q9NWMW&g$4WfuJJlHcw)bwK`(gP@`j3+6G-{8w%hrU{{SY7K*{%E zPa*EX57Hc(2mr&$XqI*ldEv>&SmCesMap|BROyvAk@$?~qIBSleA``#WHMSvPYbII z0a^JpPop*Go^j$~fK~+Wzhg9Hzu3OK#F7sj;D>3Sy0+##%K8w{pMa7RW#B3M+QZvok2Cn8b*tI9*bYYP}o+0PRH*2bT^CzO$DONqpfWF~qaafbPyaShPLeK>TvXsfYagt09+LFIfGKJQj229ZJub z1HIbKV2MCXtsdCQH!4_0@S5f3rJWFzhI|L0;^Jp@5hi~F~+A~IHM^U}s0Ql`1 zEf5W29`&KCse$if3stcsxMkd!8oWU@W|2|^_Ako1j&jMh(7v_}D?Epn+GUsA-aR1 zEX8OPx8BZ%lX*3GP%{WQ1RQrI8* zqok7VG|th6jkm_i2(QNF23f8x(kQZf$JAamP1kpYNx(k*YvLgGIe9H!#8TE|1fVl( z08ro}+iX{-LtT9cz`OM~Ss)VwUt4L%&;B}4DVA&+6m5P-tD$q0y8$mH`Tn<65k9#d zWsUy;#I5-Jn$6lQIOGG?0s@+OAVh%NbT`lwLD&Ry>>{1LBiG4$EVwibYdR z$pEAECrLYt)RC_p@6Y!;j$Cz#TByj4P^=3@gO!UjBI|^YUG; zNBxKMJ;lLLdeyf+YW`{REl$a-UA%lho9!C)Y^i=saq?=KbH5a1TK@o%Rb3Tu`#&GD z*eKcvX{|?-F4L#%$|~8d0BgSZRk?DKPMUJa%J$T>jWG2R6DM)-oQNDO;zQac<`$92 zm*wnbc%viO1R?>Ecp5_-KA)BkPcaNj{oSS?iqq;XrUT$^A3amnlQq(xmhV*kle4pa zd{*=12UPWz;oR-{H^|RuovJq9PTYLE<7nc&zGH;L6CxXSLOo+MI) z6IVQamd1%OQt5@x)Pm8$=p@K6z)s z7y%n`_{ucBTtx1`2ha{YTa3Vsla4%Ea-M7w=aw%ekm@eq2}jrio_=>^)A)1AF#zQ7 zCjS6yr9FO0qVL01W;@WO2hz1eC}c3E!E*` z;EiV%vC>jj%tT`&)r0EZK`|!6eW8bZEA> za}ZNVv8SJ3Dp5#_OJ!7p&Noy!R;E|pzglV9Lp$V!29q|pzjd4$Rv4V+P(5v(UE)qu zMhfTF4L>?7YRs_F1dfkd9jxv9H|ALrLQ|BebGCwZaCE&*uW;8G6e zwfASFoW-d7;xaXdcxP~Q7%r(Bj3C(6kVgr9<5tGp0e2*+h{REnp{Q|9P7m6s%lemE zCpAv0A6em0uMWdR+{Fp&sW*Wl=j4M_$0Z_vSnwiRqM@&&?;g|S*xQB6gH}4|VB?V} zQ>#AH9G?M9S05gSVSw!ia|1T)c?wslQw$`CAC_&sRfu&0&lmQ*1gOpqS|02)gBat{ zd2`7ZGWFKwlDe4I;tW%T18Pu!4pM^+ryS2+z(^0E1qv(Tf0caIvKCj7f1}$n;g(dB z{d6@iR-E70Jfb9QKx>IhpnG4FZG0G9i{RT_?Y=soH3Gblf^~_Sd3YUWf;j;2)7sNR z6dt&Ej4-g(nR6Cvmm<`_ld!kCOm3K`CVVH)+T_+?k2djDvdgvkBVPlZM2EY`EucU^ zAzIsv7w3b8+T&dVOIdJcKu__gzC#d zr}#e&46A|Rgob+N+>%?}j9?%kArW>m#IKnsvQ=ey1vJuP6SD{FiL^ldf({M#{{T9i zEqC-5IWlF4E12NCb}BlA#;jyP9G8>H`2rd1nTLTsB)CTK{MfWBA4&T95AhlGjvx-9 zz`kZJ&yhH-M@Yr^tt^$~$cKoXGqgF7bvk$PNi&IX#kjBVH2o@cu%+n%#{)+$Akpw; z&p-4GC?cWBIuIg0V=p#zy+TBJVqe%(rJ{ZcTTJl$fn$P44sX^)4OG*SQCjgO(y_Y)r(ng3 zu9C{@Qm5H|rtK%H*|frvnZF_3wie9WPmO=6TPZZ@O1PoA-OkFZeYO#~P<*>_5zv*_ zo~(T5Yde+JDRN}_UCO41Q&aKd{z=-Co4Kr0Hd}cX9TkRWPs^S#m>OOd#rly`lCNeg zg(v!pqSZfNAkN1Z$o^}WZX5eJ^}}5bqkulAFvg=Cec%hk?0IlgK9r+oDly<6#uI}a zfd?NMI!8P}yNwAy$MViRbj%buc=IGlLVvhJhI(jF7ZWT76I)Vq_a6)$(qw@(yN|tp zN2o1urcKV~7|scwPCQ}I+Bj49&k=WEc@G~bz|WFSf7#edxG?_!AY+J^!ARsIJVNO} zQXqc-ZEuu4d>=mC z3z`BTe0=P7GFa;TLGM-vreOE5d`t8nTlU3?VuOhmKIWQ(S zLR^+zzmG4%Ep}@~X3jYt23Y$f@bP$Myh#55+K4KLKTje_vm6CRe2D0xa5RXKd4OSY z=3kq##V&vpj$4ND{{SuJRm&(61o(XM>#O!$ zvOxf%0SXPRuYgfol~Ed6X$W9txgatQtt7LZMi^-qi~H`Yx1L3GUF!0gUwCB|IQo-9 zyS2DsVT!hFW9 zk|DWn!2F-~?Rw`Qcw9$hr*n+a$NQKY=JpFQ(eBX&?=I##B?(ub~EG zWh8;YvI;LT4iu6|9>n4N1z7X?{ep6qd}w*mlTHl8pMa7?OqtARm)e~GyA{b!*pc9} znF}60Y5P?)jdBPYQgfwsaUGCKD;IN0f?fK+%zLt4FXxcEjE0go?(^PyNauwhM`}#HY3y-7JLQa~4iR@tyVYrk; zbGgIVDq};PUn9zZ0TYvsR_~irNzqJLMycI@=4{knI@pN{nIrZZ>0H({cnhejD^c71yr~h;$phBnZ3u48UFwua#V@C$Tq!FzDzG)$+RV4YH31dXp2c$Ih<9- z{a#7s=}-N*#k!ILs&*NCcjS|k>kHuo_>5|8u0R0=wTMO@>AkFA@6qoSPce97gS1H9NN_){ZiJjl(<9-w|&1jDt z?N)3x020LroXEkM5%E&aDL(am9=3FBGT&K0gU)vuBm{hwYgR|NKK$&2O{-WIN_^E6 zxC#34;jb@CaP?q^5}Jbxt)h^r2ac>PuwF_9z)!fm$YdFZ83A~jCjdZ^myTEc#0~o& zL4|<_A2LW_T70;8DP*OUlf=9+F2C;LuP8YMiVw%h!6LE_ufGm%8F{Ekfh<~>W_+0E zVB}hHkRBLZ^a7n}nS(3Js0A>%tC;;XqccgO(=`3Ga`8QOHbAEj*b_Ci14#Xhhm!CN zmU;aabAx#hP=00j&kzwmVT89u^u+#XscHf~{{W!|ElVnYCkou+NU@0wD;I!uVE71> zmWBwyzhIhklP1aojQpo!%DR*@;XxAlPj{nR|Mb zAP+3yyu#V`9Q-r^7?GbZG5{b$!vqVE6avuY!wXqqL4_A3pfJK#3+SELIpStsGYfVU z26-kPn{6a`~;Geg=C$)E{AvP6Ir069b_lvT2F&Wqdk_13VE{TZJvk<>T2ZfPXL} zuRYZcaPA|~lR>n<9~ShfBqjWlDp0I={$39O&#>Sh0;GrW#~3DUam*5Gz>m7IBl=Ke zrFzdF$>$170vC&cznk;J`%a8-s|P<4!$ToI0YJFb%ga-^PDIK;>cz+xi=>^Sj7_Sz z2mGcagI5BCn)dyb2wiLfA=387>qR;9JQ3(3gv&x|~w^H+zcP zPSU2d^m;5(aHe1$dryezHSoHZ+?-PnKqQV-=QDooB=d?e)i@{FJg{w+kO|Rtv>hzY zAaao_nxk-3vXMB+7_iKQr>X9HP~_t{oswLJvXeYCd&FP#?q>SMMq&!%=C%A0QjCO~ za8^Jk0AxnCIIu5Fxmo9Nf*;96;l6?nL>+r`l0HwJ$5((*cw?9PCm#kAba7`*M4ag>hllw#1p%IV|(sBnro-f7StPdQx zx(h2X@>ygR7u^O#Xbe=61LoGm<6+Eh9(8JSC#ntW@ob4mou;nv#jGj}eO|9Ji<`2m z=$aspkJ^9O(FLaYaisOkB<1F~{{VT@&iu4T#M^3|+&u8Z{X<}tS|W0mPPxbj57NGr z^LbPN2_G3iYvoek{l?1jFH?i?6fU}$Z$~VPnpI#D6`Fy1xRZvtb$vGosK3xVfXSQ= zWb-!bnZe@W=@mI_s=C`GC6aPBhJgb}prq9V@b^+6J|&uLasqcV&HXDp^X>qOdf07U zL4pTrlLLm)dF;U^PfzypbrsM)(rGL;%V$xOWtX3rs~>|KQvflPhCeFtXP93H{{TXk z1L-nXHN;C+bu>>?2>5fW)s{dfBZqaNrk_nWtZy2_u!Guf^+aZbaMofb3VN$u3@I*=44)4%tmJo^<-m zKdhGDGgvl5pac!avUxGXPaf=Fv`Q2s_;`Cqf4K2*1NFDYOugCd&dPNpfD#Y!7d*~T zwt$c`dE%-S8GCbP96HkOi1@EsL52n1YAAT)w9^#VCh5iP5UOW&Yfws%f-$z;@mYwhSD{dYT>1ebi)U6t13wYk zf((YtI~~Rgol@tTTjQRD;JD5nKNuRmlwN2*$hIv10IOo6-Dm#*B!Iyy$!5HFW5(>M zY^{vXsCA%f$Y=6)e^Ej4X^G2jMNXlHSTS$p#o~pZFZN<{pCtC%k;X)NmvU5KXD?BA zudv?}ddv2Ec3C695SFy(N%XLJk>E*u6~i6_7#z9%aB9qe3>(0{r6VCS&nLAYv*C}k zIv@5wO8%+(M*?SpFi22Y>Q+NEAi>{2<#n|4!OA-)=9jHx#-}Y`j9wKG0C0TyVI=@Y z9L18Gd0@wje$3Xd!@#V}3xIwn6@QHMsDVgrulcuq=QyXu7vQvV~vK_V8pegl+;uZ@P8j9MoXA_ z<^r^2!-CcMVGR?))ZtlU@W`86f)IS;mailE1xq(8n0{+M>>DJU`;wM&{{SHHq8d3Y zjJaf_rDv5U^pK4*skvxQS>x0IfN29vqE!C?W^Ry&z?A373o8Ds>Rm_nFa1AgVy7dj zQD`EqwPlV-wo?-k8DOrKKc%9scsDyzk`Or@mq zE-VS#Mk+om*vdcrK<-v{)f(kYt@7_`tf(GjkVcv*5R@O{H4d~Lgrsan$DH{Vk4|WAJ8^(NjfH#?4f`BvC>P3=H|QN3rLU%z z@}ZODrBu}NRvA-}m&nenOpu)!M( zPuG;?#v7R0LO9tcWiQ!J!0Teg<skUXZCcT?NqWw}{CKOZfxAw=14Q_IY9C z*^Z1i?}Eo3uCwb5PJDYEaTCy31hPYD85nU)Q=3zSNUk1LD?Wr=;1y>YzqFkV0}O5< zH1;VVfRi;A*fixv)atbZiy)Aok2aUJqgD+r1_Uzn`vE*R1Yo{d`NY;`3 ziP8#zu`4NN$s20PQMJCNXVvQ;g(J1?d>OSZWqS;eMX7^>afbdZ*6EFoH#-65bB(nB z0E&escE6d)!|WHD0pMhj>YwBIeE2#`kz1<9zM%mkYK9fLe1N!OdETt?5DfT?GhaPJ zN|I#rd0bpmh4}YBU+ghsz)I&9td_*LEphGY;*8E&3~6dUK?MTJWunM>gut>Vy8}q& z^M(s$4z?IUj%!^;ruk2XLW1PDh>m`-ZVvQ4Ka9!(@ZpT7v}qpp{=}2d_uAB{@*~$c zdq4(9zgh`gjSGQt;*%1*ML-g0ih9qqaYkiBRwDhMX$2bT(jJ%(bLgB~%x%xG?e8p! zQY2n3-L-k+5dQ#D9kK0k8jv0>ZWB!`uOwNQAKOgIUsdUpkUd@gI{bR0(j+B~k+p4a zPDB%4$S^BZ>Ty)S&17IXP|rMtD@CG4RX~4A>pbFlamTq*fpBK79e8o4^EN#Qr7lT_ z3RuR_RJ8v9jRlL6+27U7weORF)5J+KY)o!xf=DL58)$bqlqwxeE7z}$HJe-dtFe(f zGLm6D`HARL1P_-Y%Et{)AIs2ZUo!ghISJNb!-2b6>arPANrRYi76SmGGlcz#+zC7Z zJ4lBp+L7%il~QDs){uCH3coiAABKFm{y#yE3c>vs-z=%Q{{XT30;YfT6Wgab53;OQ*d`@HI9tAshAz6ua#{8sw@z(xIk=a| zRzHq>^-xRagZdySLO?SP;l^A@JSUhdfMg)*0T;go36YjiP(F1wf!KzqA#<; z+-o-be~9Og4`&2^FV!C2p(0fjsbH!q#WQs_c2$oTkOUzd} zADDezBx2(F_MX$DDm)*84ghKY0N5;-6iXq})~&l;VUy@l?1iH)dY&X7$DgMTmD+z@ z#3MuQ!i`A57@qzsn>m+P5ZqeU)pEI+2B_AmgD)KQMX5<-?O7PN2%vB+BI1xsK%M

ABU(a^FO&aGk{J>@d-~^$#Dsub*t7q*ewp(ZiN2;Ag`4+u`R12kt~`~xvP#0 zID&$r_KidtG&>#Rl2GJ_IbZt2tm}B zm@|1Kj2}MP(iJ@W^EbiG;4o#Q9u|8nG7w~ll`e3U@V6DW+@~DJi#VL<|nEKWRvcyV~C$u5Wu+9sdAcPwyW;t7&0K%N_p! zV3_%})~>CTl)Buh&UgX0rjC9i3@=m?qv4vTwQgAkQb%S%1T=~A#>)z*gZ|0iM%QhU z>PorEqkFUc+&Knur!il#AOr8$Y@XxEEJG{QO0#U!`zE<6xRu(YN0`>47Aee}3~^MI z7~qH!phm8y5rMG933jWs)~Qbr?)==vb_3-BWU1sUaVFrwn)vW*DhhzmoHxieOf~gp zjzgWxrC0+`m}xdE**JQ7`mfa@b{icy`8cc9L zs_CK6L$G{=(3TwXL6&<=!?zV=mSvI=4})aGPbnI|$ElZ*iTa{y`TVYKrW*=kY;oj9GJQt z-MJ7%=COlSiB@4};8YvbW^sX$N`?%SCYm#l${sjsl3*C0Ci4IeSy9hJXXFMrZgrJN zz{4@joV?Dn1*klqR-4eKzxgNXwld(w5`7XPV9rM20yi#wf>NWP((Hqp#}JR>LL%rH zosOq1kto1~%|Z1;n$pU%)H)f}t@kP59#nt~Bi7e~$!OkA;V$049~IO9g-&3SVSQ66 zEs-lGYMcpobmLhZ3`vL&+R12JTvIn^%w7wNBr8vUiDe?fakO~h8;fB(W~1=Z;rtuy z>(8cDZW_UqC+bt-aF{TN0I{eF>g+B?)dE8TAD2zmRkP(w;`UtY_NsB<^-1H3*Fwd{ z0Wg{mu$zX9(&jDC?oPc#uE3+EN~uZ&!)!Sw^$%7vgU{lgvzIFTmq`ivbO%Mr$TU53 zMMmbQicL(@oaUa?tCU%1`7M?p6MGpyIw>;}UA54Ikky3vnrp6Jlt{BsOKWjCvR}ra z!Am$863K3Gb52!~#H+y|Utph^JzA39WYhEaZC^eM2k~~v;K5AOTHKgCvz1Xq zrp`w{P};;NBE)Mxl;;Jkp$p^BFhlr*Dkb<3OLa~4h+E}Q1mGvrz_an!oKn6?^bdyK1Q@Xs5Y>_8L)ul24+gaGeZct=d0-@pqte22+vg&PN8S++>^#$mfSd;xo@5@;d(jrgJ07wnAa`21I8jxru#w)o|op>+>{T=9y*f z#u^!tz5)5;$Fb70`u_m&DYZ-tIFA8aKaae$8{$~A!F`7UMsj4{VmK=8%1`SgLFBJl zqmQ=kcwi}+4rQM`?rUnjRe(ufuPB0rMmKCTJJp4&D)VA-ILee~IBQ;qVMGexf2TmO z_|CH|6e+z3b`6ejV82s#wdpj|*{-;}sqLYL^8Qa-u48#PNI0Wn;7eCZRm2{>f*QHV z8bJUicBpb#DdUYuYj#84>b9H~EZmPuY%x`!@|~!Ns=Zk66PP zQ>wfTu8&~CawPSomDIGbbaWWVWeYP)=MKBNa5f8UTIy&KvYWhRE~|0N+zc zpRs+_1Dp;q2~LU$RlAC?2Uv1k>uX&GC&Nu`Jb3+dLoALasDT$xCO-)Xjg8VvfMdJC z!RYKVQzk&}i&b=wD9s=(WVJTz{^ckbzt=pR!N_N1`r6G=od)#}#H1iov#@GLdHE+N zF&9+po`eCY__g+<*y&O*&m~00YQg^iP$F3+0?T+fje1Vwdv!c$3iQ>{Dsij?jc`Dt zB(|~Qy&jw*t1O|r13Eq&<5b5fqsjGJD%MAuDVBxbE}o*9+QKzY^5~U$bdM?D@(pjb z(1$DPuamE_pyq&y@84906U5w_H2aH|9?MjOo|-9G5Bvhz+j0!-PD zXm|-3W_rB>*+b_|5@5f@?X?+$@6 zREwOR*xS!E&Z#`3l zWc`}(SgS4vdG|mwl~ReQFNWw945<_YCULNnXkk7CizM;Q0fJkwrJ8TY9}=8Y!ULca z;=VoJOfnc~4qErm=eqY`d5h?CSX$Jam8XX9(F8NDyTiwRz! zTV3bQFPS<9#tqB7*J+TLTYvq9wv#D9WmDyVyQQrJ4C7mmTXCjV(y4%L$(#QG$*pfW zVRL{pi3^yXEdcNsg>eP9BtFEUm0$!+MHB3w zoTa=5bYZ!|WgskEhHxWex`4r-QW{J=RPU=Kx*RKX8m0uIcs@Ql+#VGe9|qU4m)bB~ z;vi-pWuH@^KXm=cKjX=qm+X6rGDISgQ}lY#H8z@z%2Y!_!wEmXFo2-QY2(T1!SyBM z#ZSu>D{+NkhZ1ru=T9CVB3)5I_mC4*5^Peh@v1I3UdT{l>2P6~Gc4`GKN9`9Z{b(4 z2}`xvuCMY07B<^b7st2yQM}tGPNH|*fwZr=N(vo=Mf*ZoC-|b`teT2A{ytGAez_^a zetlLPOv~@gYQiTF^W;*-IM3(olW@3=%9`LZ16kH*>LsS1N{RmfJU6(r23!isi%-XD zs#bgK1IZ?&RVb26*6=kT=W#k3LNjeuiPq%c!rzYif!H-002zB$CbKn!Qq@HrX(J(A z?to|tR2=hzER&TdL5I4Wp918XmS|WR)CcAz6#-IiXq<+$&{^7SgbmQIVLGu*Y7=Ie z66H&Ec_|M>(?~fRUP=v3P2>+g+8?Ih>((Ld<*Ju?Rzb12PwIPTnRu8d0HRh)a1Jp) zn&Yr=&`hAk9eXCQ$W%NY7aCmed;3?kdSV{WZo+bx>@pW?$0Icb&kmi34)|U zC<|H}2Di(q!hoMGSvIn^1xo(_7X(yS>KjbMf$erIwf_K^V~XX;diet$KNgo7$bb-H z-y(*ryV!9!O13);0|jK&4NvTMtY72)q;9r!e1WMG`kYjTRrbovwDm9Obwi2bfyFgg``MOa3eGP@RR=l{Y8}@<@j>O zSPH|ipz|4^a3D?3Kc*41gDoM>x`zigOV7zc+RmO~Nm^4wU5~}{{U@icI)FoYP;m7 zbmb|$%L)@Dq;@+jDAAa~FA#_uma`iWoXy#n4*PZ;4SW}u%+CZuGdk|u>8!q!;RnPpHIC+aLtQwsT80;l%X#qZmLJhX_Pua~ZT{9P}M6kwyrDg&+8W$CL9> z#MA}@iqT%d359L^Q>y7U&5stxft2|Vzbc7mM=-CURUAo2^|ho~wxi0p5w|Q_2h_2q zcx`K8C7_`)4}k4WFbhI+A=vIEsc7P&41AAQg3+0QD2&5$4R0C=UP=4l7=c~)Fhx^% z8b1{-lvgsQv8`1OL>&ewKc=nu6g4;|U;&J(qsM3ng?UpHo>(t4(L*K{(9U_=S1vgA z_IUb|-jUQIksBsX4?57)C%amHN zX~4?oHl5#`uu2ILGG}VwT$lkGxaBomtcZu0mlZIa_Tkv0IQE<|@tI8C$*<}Kz}Ge3 zE4JKrrbY%^va4jXyz|fy>{(SxnIgvm<%**a{Ey4nW36hyat_g3P((*bePPz2*>5Eu z-Su0q0m=l-WZ9+M$thtDZP!UKx%XoSip8_n{ZBKJy@)Il)PjZ7u=tmxEf_FiF>*); zmp&y=!k2lAG-kdA04;QY*Nn(W;VaQb4^f>=dC?Y_mzd>N4CT}0c$=h9sO3zVKXm5e z7izxb8fC~0l}TFNPPL)UIh(KnsvdZi@ikc~!QLS8I~t1Q`taGS*3dMNfRlIfk{Z?5 z_G9t{SM+N7Gc=KhCbx;BAtaP7pIN52zO)F(3TG+xcA5SPJo$*SOcFN`G!Zs1U4RGX zFwez6(iJZifsgatIk_2Qmz2A>?Z_B&9Fmc2s;GnoCaD%1CK$x-qs@B}$+NeZ>rlaA z;LGl9%B>J62^A*0oSsXRN&HHRqtCV9DMsq_@v5~=y|rS zjylAbqR{@qtY- zcKw5nvXQ;A>|Sm@1N07Y^@1FH0}R)HP8im^%dtbZN9knU03f<7bU88t$x zIpl%{BGe!M0EzMXdu0LRQDAX}j#D6rlS&i-WO;G(A8kuO6htqapzib`Km(v+JHE5Rq9{ePuphrhpRwD#HsZ&mSf>&x39_asBfIcN)T)oP!FulmVEZMg|@SgUw78H$cgH5r7pAx>)I1@&uWCa_G)xvZbJ zl+@LgsgQar_fKHDVGE}pY=Aq{Yp-d81R5iVkfX^VEMu1=E0Ad!8es!v-m%`z!2mHn zm#}ZyVWbW$$2c*0oI+@cJP&H|b6933Ir#(_Ql|d^ter-p)b)fw(?+5fcD9vq zDnc!9=Yz(4_x6$jQWbrrdsX$QTUp`D-n`w-m@)#~Rd)bFn}vE;HHFE)KpUAgtq}D( zLHk^u34j35*KU%ejNfhnp@@VkAZ~CN*=4|_87^Ykeb0gl4Cx%}j#ZcwNQ!86X_Q(N z5!bN_l==Hifh^8AInGl>%w0v9+ypE*wmT(1v|K)BtOw#sUK3W*RWJr;c)QpVmk}@| zEfr2FYe;fvTu$U}=5-u~hU5>t9iQc2hX(3xnk1CX5u^=^CK64pQffJ+%UJ5WX^%PS zHUQ*JjBf_b+5<8rFWizd7vY7}IH)qwYj!xk=Qo&&JYa04)~P&zhE`E3J#3q^=DO{y zj1&b*$oc`VaXHOqPSCDJmO^e|xnKwLAM9`%9Y1M+xLvH3$|A`MiYe~G3n{Em%$`yS zrMyCkUlVYAZopTWEChDBQvf;ndd^@w;aZB(d7)dEmXgzM1k zJbjU!uT`O#+NK`L{f!LcWa2Hf@m%wORvp86ra_ozQ4KJ@g%AX}LS;%}SqYaG>|FI_ zMk9h#?K8clLzU(k4|}y7Aq7*?ftbyf_>PZ zJa7j%`vzAA!|(-z08^Kj9N^JNk55T-&Po=~s==mu>=Q)ncBnEVg=EF+pMl=u z4l~=UOpWJ1F9UI=ZKRfgb!TLW*g%6YZCBz|{{V(56V2m)G!t{(t$g)>#AXTc+6N_l zUh6m}DPpL>`F%thHImA}2lXRKu5{#Ch>J2W5a5+cc#GFLA;}j3Hm$}GmY_hKQf#ks z=OB}>#|Egxe|1v}$ST#jg0VnM4SvPga;8Whp1ral9n11IC%ELMyd8eqrOm)}K9hZJ zIy#jR50dQhdheRa1o?zuBJFDwwb8#yn2v6W~JvJOgl-EdKc!<8o!1F+w`c zJJ0Ma^>CnSw>jcuNDhslJM1a#2?J`bc0DBE?7Rb@6b+r1p+P%;Zx)OFRJ~YfA1bb9 zwt-w!Dd}FRs&K9Kl~XSj0d09#gO>~g5U22NBo6OInbYSEjX z(??Q8F;v_nU3Vo>KM-~vufjkPXG)q=c%7^6{tj}5P-#0n)mG3(ZgxNFyxzzzJm*jjDi3Pk1c_a<;!xsMpk{MgozeifN~DV zaHOvoYUl*FB&Pw$zRIU1w>f6XDdZd)5llfKl20wn^tIs^`WAJ0_M1{@?n&noDs^k6 z4&Z|_tes@J_7{Yq0tuTwFdsWV{D#!$Cz-ff#=k!xzwi#Jl8=q1AUABP%g*zJGNod3 z@}=Oi9cAW`*b0&)Ka3UNq;?{okj{z&25hK=?%Hi6SOSbO;xY|LxtzOyQ0l_IRcTlel=R`FFG?N%cTHmqg^SsiuNIJ-%|0fP&9ESCOcHZ5D+H zxRz9I}Cg|P5A7Ypr0kprH3Y*@*qbC3$e?O*Ra2#{{Tw!M7S=n z&jdQ5xA>p%T?wNEAfQ=f`nFXs@t7HYC1E6gl3fyIV66RM>#96ZEPhCe3s-Iuk{`y2 zKQhlA9x`eEj2%M*D+HE$xfVi+SM+Fi5b*UHIo_6*Jlkz&-C{`Q=ff2uDreym zS?9%Gy~MJ!xpR3AsiK7&gTK$#7cNa~2oAmzZYW8ZEBNwLWL282GVY!809s%`ct^W$ zQa!NBUn({E2F{+E6Ktbba)8u-xnw}G(UNN)I=Ww)yP8{!lf$=JfW~$p@TF3hudm5H z(y1g3;u^h`5~;XP_|l{mQM|>yD2Bb7E@oVb1$lf=17wRIDSMva1Xq@Mh&^!ioUAlG zp`CyT*O4aJ(MD9^?K%Fc*lOy42ohSYN>sr2+mlu(&M+o(;D+j)V$!rQgv+?m4a1O8 zbG8)iL+Y%8yoWj<;V-T%@r%r~Dr{`~Jo{T}=Dal{TpzjT^R;d?nm(NqXQfTg?xF?C zTsy;+A(0VR?kGUqSB!q7}osmV6b zLI+125hXv;Zmxx%S2--x4Gll;B_EH6B4$TFOJvbAVBn|N$Ph~)NHe8PZ-*jNMikP) zit@Sg&~iY=>{nQ~rP&`M?5WWjtMBpgJ^-IUV84n0{{VmisT$nocl{ZR?4thJghMoa zNWPm0I=Qf+pRR!{TnYN;+AH%psa!%M<}l^Z*Z{`KxoegV^0&|<{ia;y*#LuEN#w~kRm@mWxZK^ zZ-j@$wVPopRWO)$K{aC`zx~J0$P#60}wO?)CWtk%~H(Cz=T>J zBh@?znuT6GCp-s1jtS7BQ1(SYbZ0K+Vy7Fy8Hcz*^YRAD=F$Bn%xH_%$z`B<9bPK; zL{3bpR_&_S zc>3vm6T|1cixy7Wdo)i))w z&F+-LJ0KvHnw@;+Z~HTo<#7lUl_h)+kP~Bd zcfni!j;?}~;uCadUK=|w1ClW;nXUwNi@h!?dNsy;B+pZ2TO?jqX+DrM#tZsS2SLfl z@eG@jv00_O;tV+1Mi6EOem?pV>D~pE75oHJ zl1AB%NP@qg1U7;SG|&VK4_$&}@n4_1?$13z2s~18DT7aH($(WT3=>1V=r!^+Hk(_` zVToGMNErq`+QMTv`FSwI@OBmBrMj{LSg0t-ZgGGmr`gP?yzp;pl7{0~P6P8L>c^16ocRq~yZxw7@g!LdLRUKHB#z!qQ1l3DLQ< zz*G{4DzBhWEd0;PvCVyf{`hf`{Sgq4#z|pnTIYT`Es9EhMIx8t@bzHWljr6>o^8*s z+u&-SL5^HSfc;a5BKa|ZhnmzfbO9N2Cs2c0lxijr2e9!%&ptg`nGi%>hUaXKtab+_ z?|lhmU)%-{r4yFoDdllnB>&P2+B)Lybd8vcme?&_`p8? zzDI=f?tVlY#Z&+{0ou|ZD~8!EQt6Y&!H_XIntyv3a58&gII@Z93%~0T!65`IubNgO zVJF#k{{Rh!R!M`%hvAk3Q;Zk#FMGL(^$ry-)7Zsn#S1YB46=A@RAY(dFg#37And|; zpug?T2|@N@jwZKu3s9fqZ9U498B2spZ;m3S8PaUYW8gqc9)Ju zViFENKtizp0KwxY`c*XHuC&)LJm50zNX!lT57l{Ru2@wjOz4+X!sZ+V{CeIUE9%3_ zMrGJJ@jnE+Q*RN<)0KFIq0AVmYdwc)I5Dl5)sWR}r|CHCLx8=wE5Mc~VlJ)V2kD(@ z5u-_LtNQ~M_`Sx+l3Kfj%nM|RWgP1E4#K3}>vjySi4yU-<&$YQ#e7THW=ZbIn-#9p z)^RmW2V=QQY|>UV_=hH00crtol@8csrhRIWR@=`d5_?J7>Gvu!rxS82_s?i`EHm1A z+PBM}yZH(JGbA|b0mrn&$yN)oPBMNzKfyRcl%vjzM^k`_!RDv9{2b#&Bc ztI}!f#SXH+w(C;AT)Q3jB}-tiW|n~jfHH~-VRmpDq^@@z z4r=ICLtP6A)X~9ZI9F(MX?c!m$(I}-kJ=;+z{f1b8(NNo0E;i3dzIy4VyA#QsY0Z- zYChbvGUb*L0H#(-Vm`n*UXQRJhtLio#H;KYIJF6?b|jj3A0CVD$uz1G^DnML8M;A= zul%+0KeTzLLntr@)}+rAvvxPMKna_gD0uRV=}y9Gm0yQg98aAMG>7A3^KAbBONXeT zwS#Qqo*_dk%3jvCwj;^v3Xs!sxHuSeu z8fLvzNO9oBK-I{)xDkhGe$;1RQsTm#gi<^0**k1s{xtfX_99A@=2+M z!gC>sbKJ60m6ekceITbur%^Aq&?BHR;9j1>3}9H?;`_2-oq(i0uiNDISmu|EaxjT; z?cm1&AguWR028r@Rpha0I&O-C0xLe;KDU-R$O3dN*;NzL)|N~9D0Hi0vLV;4ZOxi9 z5(yr~1x_ZUMU|yUa+G4FFXVEy9Ljd7EBOTT4GE4@F_UYnqM>d2_NZCWQPEGTW9D@E z?B~T!nK#NWZ&p&YwB8u7E^Ey?*OJYSG&u@pdol+KP=hS-RrE{8#95TAe%9|7c zPi||G6eNhx8oCmFMzZ?{oT*>=5p;@bt-VxP|>Txs0)ORLWbnRUhnW46B5_{{WQqnIN^PtjD*r%wCp(rg9=})w-kL$}!{fi$Iq8 zH~=8h!RXH*U-zV(rjmv6Nj&Ozw}T4Tu2vdDP#G8xJpLoYO%ccBaCFQAIbC2fos8T0s0R+$nq=&XYBfTsmq~b;L^-xyhHd##lzI)^{{dn z9(OE^4em!kx^rh2E>WE>#A?^oc27ULMMY8Fi26bO9F8 zM2eK(53#H3Id~ctpQLq`S)PhrVT{)FgV#*??`yCM*}l!6^h(iMWcdBMl^gM1L?)|n zEE0OTiuQS@@`MYA8s%X8F<%8g zU6`ig6nQkEDiom}!QQZP^IjGGPFmf79RC0T`cV9%6&lT^7230%q$hZL(0n^bOA zJay9)pp)i?rwbel5nG0hZ1wcE<2)GcJ06WaDYaoL>cwUb{y=?968+%&GuY!5<`aNK zTDUe-RYAURcZa8h5G9RxEwbZW?$*DE9?~deNQxXrU$Zl1gTm9mLrm#hNMRVyUAx`| zFu3@hZw3H+*&5`7QcSJ%?uoa1S%C#KbF7bC{{YC&$c|%i9ZCCAkhaMwLzOWh%Iwti z2d3&in-X=-$cczZTSK_sAuiAxq$;DTRb$ToJYB>@MRI za3!lz075G#f#F3wfH=9}(n^=6;Sk>1v&c5kV;TFXnr^lpAP$|psE=9`w#CRVZ5n#< zwBn#8r6E4PV#p+eD1NrIo2#gi=BO)&`2j40wRo-5k*g=;HitVZH>*64CSfQ&K$kI( zQM=iz0-7j2m?=3h^}|}Qz+qOH5G~;5flU7RCyC6I z7$D;&6FbV9uv$W#Qy1!zsGkHrl7wfu zJ22ucYSi}t+@l2u1}>#Z?3rJMPpYo2XNkPUPnDga)aoBTP2E?uxNR1N2Gwz0K4AuH zJ_^7#3{+_PFq*a@*fMLqVFK!oJp#GFIrU(g#!uZWI}3MAt{R|D;Ckz&MPO0m zbT=+)yvNA@0KD_-G3Jfc@^<9KVrlshDDbrMGunKfrpYD;S@_kz+R*-GCIFeZ*;R!w zq9E}bjn7z;XE7&g_ZK*rA=W;p$wGAm^!0enR_;^E{wPu$3?=IT~djMUJT{AO+z`RmE|%lYFgt0pjO z*Usy2>2m#2%C+x%c>%Z*WCmh*|8H$VRX!_&dPXZ8H~ z@nZ(O7DOC$a_g|l3ggL1? zeC!O9DS$cHz+f=r9;7*9vBH!r%c9zcmMh#UElNnN0! z{i11VSy|)=+D*z28DMt1IU$Dw!PS@1*M+uLxRPentO0@!tVWE{B=gWNPqOLl)ljsX zr4R+OAY~3A#s$cUp~&3OR|mDkAXy(D@%8K!Vi?W~9~sI>L2hS*qau!AH~V8Ouu0JZsyqhI)}@P2HaWx*&AsX!3nT}9o7 zcyq%MmV3M%lNEzvTlkj7Mx_R2_S%fcmvQ9V?5JJ;0D=P99}8R9@pgH;>`Xume@YIh zv0GH4B?h$XNjw9Se^;nk>!e3A!39Ml0WEJKlDH`3q9Z>RilwjYzXd8lroNYvjMA7L zaLU=hV$J}Oz-t02;;g7|sNcrwvowT*F=-~O&fbXmH_7W&Y~@Tq2FboZMbrDZV)Inc37QoX#=R75mA zPnf_7n&_u6Hr(QO?b-(M>7A@6E>z%Ea1T+|fpD@#e@iWOSjJU4u#njLuP|UJiMLN& zX-Sxo;J;c*BlX%I zV-k|g%ZCBKPC!BIc?+UB&plY^UQox2f` z00+dPg*ji-!P|_yG7D3c)rb;Zyz9vn+!Y^3XwVp!Dl&6ExgaTSN%=gmYq??t%|ZoT zbaT%Jum#N6r!Er_F!X?-Hko6e=~MM@h-N(Sy6k0GG5(gf<}o;;*di*2m&5%<9Z+nh zF5R{@vgCQnFILKks>5D};Bm1|fv(rK8_y#8rH6sd{EhocD8Og5@G*R+YzR_ZBOHcfk`v5pMbWyr&+c&WQjQ2g=b4kwuS4na1+?xM{U|h$ROt&bTRT) z@pRNT1zyE+rJ<6^xA!~7uxdF6nO^s0oP~d4W1|FtJ%T14)JmS*xuU$k% z>%or&NFqpH=5YSh{Q@NU8?oHg2^#fRzX9Cb_OC%vgFxy$C-zIE1tkO@Nz~d;QRd+Q z^dw1$HYi@kSRQ+_=ulQL(A5cTG&59$e`;!m|; zX4#Z0H&TzXIc+`+sANK%7&jhw@2{vT6$sI_Wac1}#}(T~7)3W9se6D4a#~>Rj^!cj zE`5F*E+xUN0xN_S5^5M*)oA#We=^8y3+3 zc`V(s>H=5X>(5G6!B`J7E0c1map1!@nbj7(eZIrfo+bGCv)Zh{Q_T3|EY2Ei65x;e z{{Z|vz7g?<>pnRDEn8k)h7b14Tj^~YlsYuM4u5VRra*zN}8-*sx_~{*q}cMSLJx|6*}<8S$*mb&s5fHb?H!>WIFy;=tens!(3IRywDAp zVqCR?lW{yGuC{QI*=m#lS)1Anlh^Sp&42BdgPa&8pcvyPSFzVO3P7bGX?{M3ub+_D z0Yk85B4KJb4%;07g=g02K?98h2`sx4fq}+3c_gR6nX%y~RX@VMHzvqnRUoBslWD)A zbt@B!oxPl}wz#eBa_NSIl-6tT6fak&DJvK^4=*-Sr6?5yyh&_a>_`HB$S3vKRRXbr zcsS?=_WK}6aT8nYaq;d*tw4oyrcA6rhpQ_nJ-ud3;cr<6sbI8$)Ta1(m>MQ2PK2I1-8Dq7~m$5Q7!E$Xk$b;Np?pR3xn-UlK_Z1GQW-3XXAwOLpN1L&dn6)$ zoVCBzCh-%q=|a9Z`6TMEiE{;E`s-y1NnHeWNZbe-zXZ*#L6`*@AY`(hd8Uq7mlUWE zvEO9>0AgJAx^YmrHx77^5r85m{%!7I8u4tnNCQNTnYxZH0$Q4N6fP_yWMJy{$CQf< za1E<)!4B0``M$PNqpjNx!^`$nI9tKSD$+dujePoF$8B9zvVzR{U$FSeRowT~z3U7DW6xp?- z4Ft$sCHQmeA$Guct8<`6l&3(6AAt%7>l3Lb=DXvWs~nxhepT^jo(#f#fj3pLm5S*< zp_W>~&F60%uXk{)kk;oTEq1p&Ooc!aWH4ag=fIj$&H&W0ZfKrRa8eu!tWRI6V?G4% zfRc&Ymmh$4Rho$FCk;ByrN$YjV5KFUorOzk!-{N@sxm%d;$J3Q-hA?wYN4P)fTPAs zl4dXg!^PErNBU=%wD862Zzy=xKq9!=OO(wVH6}ZgJA(DQ^>X*brA_jX$ z7=pQSmhG~QO=tHNR_$tdu*dU8%F_pS3$oc~=6sxd#;2oRvr1G2pL=82W|HdhY_Aw2 zV}A2Il#&7csvk1Th{!O|;2PQ+_G}E0#qmn3U-8Xl@%;tT2+YsmHL$HfGgDs_p^(oi zx+>;r%@-In0Olusdqm99mlx_w)B9P*sq#KSwPQ`burVg>u6~rI^T=kUR<_Cqo~+`C zmVecP8}_eJi1l$l-B9BbWda^z+ujCKC-6meHz9{lo_Wd7l=sj~7dj1^7)E(I(Cg-qB6e0oQ9`w|aLcYAIfkA!c!ip-bVL;_#Tyb(JVYMJR z7qRJJlf@WQ_D)jMHdF&XEx|krmbtSo`DAzX%JH2J%?~3&fJ8G`nRBRJ!2UxWHl~^39r^v-PdAzcp>GAPfu|m2hNe<3RBA4j7FUTrfI3$v}34k4Ak`v>J z^;A>PkYPhd@ z0*>0+P4oA1+Sc64rK836b?2LZ$%||;Y^2=j4BL~7duc!G<7NwH#qrTc)T-qyx}ZJ4e+ z1|RZC$P@w@qK)JF!1iOu%xrW=J`dCmr`7TNGErA@8aqd|jR+d5Qti$aI6A(P8n*{S z!wBk9wRlFr>Qgm9YOX`}!fkB$Q)-foBksX}a_MB~7FRwvSJotTkt-@s$lw*2Iz>D( z05Nw2ynK<^>uEM$5pE~SePJ(btH(Qv>V-|l(_Q}njPmWxS5EH2YspCY9;6UqRPS{u zy>&0P0O(bFRt8Tl3}R$$9b1kPYdMC{wUbdki88uQkg1TB2 zMN^%VZ)23~Up_b`yuwUkbbAcTX&~89+$k^EH;7lY05BpK;RvOsM&bshSMua;qF_wB zx0V%{?hvNy=N|RCT_rxidS( zVP%zZpCsmHQA>sG`)jDo=4+y_>7vv(4QgCmnXEaEK+{Gr5Bt1ZLY`kq;Q~O z+JvVx7I2+Tb?g_-SS`CvZM$T*WcJJhwAH#5ZLE zEU2+m2Z4HvJaM!R^q44@MrxqI#}o?)?c!nmrGj;M1#%o^rpq7d1WG1{hQHtql97LCn7NG^6SmGY}hbqWEm;*!bM^izH?Z)g%vN7hnPlvC$44ia8Ecd5{a*85MvO&stUv!hrl;?`!!wvuQA>Bl}~spC`XP zgHLVy_aBrf+8#2OE^0QLaHC~J5rhyG7A(NSz5AxZhSiB zK2*RsSx&=#GlxB|Bw?B24(6H6A{@?&>-sm{JoxBH2@^J0q9%niiH%r3xy@omsI_D` zQKqbcu{$9%QKXqe7qK8RY=Uixn{LB1#}y+{gW`AIu-}Yx&k*WjE&$|Ym3ad}8ST>Tp%5XkPN^A!*m>S zq-fAc`d8KgnyFP#&6+S_R-Y9G5zmtK-#>2tGE0KsoN> zX!y(%81P*M6nxI-)K;}`&J#(3nI&&H_k8V+H+U&N7sgXb9dYB-(bE^tU z=*jrgz7!E8K&Jgem7ldcW@OwN9QShJ<146Fz#HV7CrN?9r@6iEPcwT&&G%r|1pX~? z@YrQX>3t3|;t!ypFfzP8&xjckE|#p2Jwn2xCr9wEwTxf61nu@m@TkDQH%`ufyDh8` z29i{E-~*Ajn5%1+gsS`N1Z|L`F7Xo!SvpXoG~vfab3BUR7;14{?EvE-JxQQC2(V+| zWTXLds4@lb6FWU=49s7-Fh8tu@HUP(gt0##AHO*k3NpqOn^h|KBzd)aSIB}}XHa;` z@Z4jaVv}9Iu0+hUk~h-jyXgMBbxe>{|6#Q>7j$qR~W??4L>19|w}tck#scQ+?5$aa-1)94Fu z4ZSNq&3W;I*h zj*^su#2$Km#oFqPq^~R7vfL%{v`Ck@W0}P?EL*gpfq`=>{Qm&qTVCU5Q239D+^mxl zW+Zt#Nu=udPgk|`ORm+_J0A@cHSh%v~b&hlk914^Ck$hJU z%X^f5KjG#~AW;4+_{E`~JhR2$8`_~`kZG8v4Yc^}47UfI@5evEzap3IXXTCu#eX8& z&s%F9c>VtW0C6x$(&x;kN zWe>)A7={D!PMJ6{>mbjCtCjfr_6R(Jy%x3x%DrH*yKM%aX3l=T5k>z14$O=(mA&3G z<1{BD!MP&S{_Us50+|xi!%RRm_XcZjtg- zBzP_;*2-+{7J;@{C38~up8?7iZ2qHB=X3EL7Rs`F#qqVDr=e~IWxb@q{{W^^)<5A_ z!^ZpsKF)0J%t@c761g1Lx)i#v(tVUqP7y-f4E-)-w$5#~T=>t^GZly~q>-=S`zdnV zE2ZOC>H6qqOiWM?{W$Jdaycbf_$I1;MD3MF<}@E1Qu!n-XNRKEs~~DkI1|uF-qBS~ z0e{99);-%Y1c%2p&(HN%-@N=)9LW8z8SzjogAUgipU3guA{_7m@r=+%^iJ{L3k7v` z8RQr7Tz!%M0J!7gpT``3u6{W<0RgL#KjVqwq6K{xbPgtd0r?(+k^BHw9y3d0e})M0 z4K1IKAFe3UJad5p{IR5P{{SS=^EwQ5{v*iQ zDxM|j218--zr@~^8Jo3x&#-eV`|)sYRNuBVvP<~>%7>RKjEXOgH8`V{t#6O`_sASz z6CO+v@mkxKzM9Lo{uIJrK2IjUN4kmO+dFcbrCC&KNx9x*N%9SzT4gJNIQY-VA`k+gSGKr}9csKhfnUPua+hdhR19PJFj zAfW{LjidpFpLTyys&)fk6utsNKC_eHm&bXb<_Ta}A&S?eArwFq3 z%9;}2Wqv*G^h2bS;$Ew5ZW3d6NH0%3r|npyZcdFRGtb)2JhqK!y}c5b4zp|l(BT3b zZY&pVtRg+*>cDo-_^&8ZPaPl>BVwGGD9e|Oxj}^+S}yS|Phz;xXXRF`^4uDDq&B*; zXo5qC9>+~yT$CxP5xNjh6`S0DxiW|T07_^%?Z^wNFd67_uu?n=g?oqB{c3mO1w**- z{7vjil34eFZhA0h^qWbh8ZC>mN5{<<#lNsk>ds0HC#t-t(l{W2Ws*{mI55>9gP%y5 z1d?zu6>%WfaKl6s_>>0L1ATNXpQ|xX9;LU>**lG0ym9CJWhMLov<6R&%6RF@j|tZ3 z9^3<503lYYFQQflsHcU=GUPZv7cK?kPpG~)TrS9^f55Sb*3MI9M8I3_YYEcAlq4$J zSN{OXY|Bd}TuUlKgL}4+YiX6u+L)l< zIWIgz^9-3Qq*s$@xJ@Z`a(`2q6Dp!p5mclm&9=~RI0X(op7U!tQXEVEMU`?;QQ9y0 z6Wh&QyoBop@G=~8#&eaE4715^!m;@`pOjXH(e{o&2-#Ez%qTG&?_NRpC^Fnpp0dGO z9vOiwe<0+GoScv>0F?c?s=2 z7OI2l)@@bCWr!gU`ar}Vqo@A>8q9#_;jkWLr4lbbFXOV$)J+B@pc-ggoYPnrmY%iC zsVT4QO=yy_6p}iqxfA6nnt;G9)lr0kB0#A(Ju5C>AIr}>w^9e1b*xdcT+|9QX%Co7 za(@dn?IT8{E#k_9JZ{o!WRwuV{-gMIt7hXlhx4c44?aR|>P$bUx>-VkZcdVe<2CEk z%28@sa$T**I)}KVLcPDkwXHvnBHU2gdU)ILy;_i`6h2SzXitHJp^&TLT1{ff?}T{c zQxHs_+x49Md<&cm0V*;L8tVFM6e6m$aUeShTzte^(M1`K@LFWkTM#JiqYrL$^R;5Z zNpL+ZQhrR3i0wk%#V0#RYWQBZt}dBF_MeVLFZ<7jH71CWK5?Wx6aGzlNkqLmfl}PD;gnq<$W`hJ3}KCY>-D0T}%Y zwA9Flnz9C1!+~bfm^rTb{@vX;38!j-cjlkTl}kb&_bzbURQRn|(WJ_c-*#&*lavEF zhDUJchPlj~-Vq52}0OQ6<$B>k{z^_-HV#A#Lf+PGnjxmX~s8&ljFSAiDMUcwxKHwY(t-nsf zKrlpK==1=sJ$d|bDa(Km3~+XxZtcpFKv~jfA&;(D2WqKTAtAtu;sNE1f3#YotCGb+ zMt>c8OnJ^GI_+@)7J7cX3D|f8$d?tWLds34$8k=^r>BE>>A{j<65pi_pkt4w806%1VY3HX+~TvBjcBQ0lpV z`ASnYF&fJ_oJ=vPL9c+%!~;~0ABb`BF)cJK0DK67j(msnS_pW6sCj05t386BC`#wY z;ylgk$uLK#mMl&IgOhI$GbT%xNm=A*a+qAW@rzfQ)#$%^&dF3I3^F={JeIxWjLkE`wF#q4n#%7XGk>5?Oa8G z21F#U;wjcRa1e)%g>_{)=zSVZNCV>H`@6Y&No{WIHL&^UD>HHmHz?~}bni|iP*x@iU^!7^7 zSvy{`yWtv{0vyceJ*n2gCV4VUWU;P?D-+JVIWytRC$yGINU!wt3j?`e;K;GDJyF`b-$-IJCe3WK|bT*z?`%pcj5uG*WiwryS#SNpvaze?N^xI ztb?i3o(J5CxiK+%RQl(k03{>a-~tVRc#)tB*>YbG+Y8TYV$f)uMj)Kle15g&V8h(C zB&6zrJ}!Ti)RRglVFbSx`7?6UIl&$;;+t0fF1zuQ;ZTkXvpr&66CZL4l*v7=xNX6VJwcN+4hluj9TOIADj@FBkBI zkKn+-d7p=&SpFvx!agL53{ttri+&|2vBT9uKPGGe zrqDL?8l;xS~P5ckJnFAHCjpk0FPBUIpu{wElim~Gi7-RO_@Z- zpxxJ20Rn`na9*G1*ao&}w+>-tyg21J4t zl2gSC#{7UkA0MDj&Q&x!6Ggut+H2U{0$5|N*0Q}>rh_H66|wr&M%4kdHML4*hLDKj zT(u4thzE|;yt6wn;sNxQNHR3w{0Z<(N|;2TW~uZg{S74^J~y&cxgNkWL8g=g@+=({ zK;WN-D<5 zAW*y{e>OLmL$YKpBQeh^t1_U3&+(~X4*~!m7_|b$jV>cD$%=R7+G)3Pbs!dJ^dkI% z#h6g@haum|v*$h~C&2*8dVI{MTF(hCk39#LP;C#TE_x!gnsAw_kGk@%e}8_aC0HN2 zY@&(HUcrbFs*OOKq3Tz1nWs5wAHZ4V65B#;6|`|Vz)~Sevz8~4Tuz z{AO>T=*&Q3s#Y~U{{V*%q_rXjKh$_eO8}Dr3i7h!%`3rWC>N*%#d$aw)_^hGODQtV z1o_7%#jH|A)#uTIJ61v^-BDvL<$x8RF0A3A;W=~c59D7!4sLme-y{Ot$XsL@mj(CIn|7lARUeWoMHX?n6w6A_0Ov_{UE;}AMJ|^V0KCX~ zA_=*lU;Z2bCZqh;EXrsMV3ULKdB@O#hna9G@{k~N$9YLp< z;8!RoKh&HVJ}iD;+rYteBP0R-i-?>50NnB8;LAV&8f`r5Ot8>002ISGPGTp)ptcmH z^wBRHthJ^`kshk`OAHy06Y`B=(8JFkp`%U{iX68Oe1Rso&TO53W4GpZ>tCmyX1vpRoh;GtSl-8Du<=Ovr<)#m!uo2=l>s8hpE( zNx2U`MifYtp*#SKK~~Jt>Rfs9O*;Lu?j8y0)SC$jFYT*Up3n5*=5;~Ck346^>ed+# z?Z*}Tc^_fjSaN2P5W#Y*0tc;}_=XD@7HN`L-gX0FUvwW|-F+uZLj^2SbEF8&&-Q7^`2PT@RjC3oz=xUA zt+)~sVGeZfBOak49P3!1<&fY^iOM1R9P$0TWHb{EEof(2N61Av0Zyv!N;5u5vrfxb z{i+`ypv_nnj}Y_zDMRoIHvkT=;+fXb{=~s&$3tq?;Hn@5{AL(WsYd4cjV8aXM&4kV zpp;+g3y(fMd~mPz<0Sx>v_t3y?d}6JrvPg5hlNdQeXq#1D{3770QXY$t)kIR81UAWOyW&(9*!}$J5W+6dfpYXJX1kYsRENF}nNgGdu`c?xU)@|Yc z02Nx8e1*W-emjx}acSh&@b?}C-NKf^qjc#$Rg*BiA{6Ht0U6^{vFmX&@$q^MsCM;T z$djTqEKT)t@e-|Ej5|lhYqxD!7+Zh@NwTAh&tdo{ReH0`s#$q1s48dCk27|r5F<1H z0AwWs1Hw@C_!#6w1b*1OG)IxN5B$HyOZwxCny~d^d>CZ&j*%sPbYaR_@-gbl&DiD` z3=+~|kXJA5%vcj9z2Cxcfm=kI;iaEOA^eM_$44Lm69kxmiMz*4ryol>jvuW)!!i@f zeJ@{$tiZvM)kLo1L6VnClEC7xwuUn}tPwD%My(_pg_A#TApnO!c)uU`&bEKg)gl{y zKdrf9A_vW%9E!R9ex3!g`0g8-MGC+Jz9UP3S{EyuzAdql#7ztspTqW`A9zr4m*U%1 z0B4Rk%kf47u+DgBItm5x7=d*@ET1DmV7x*VB2;7!7QOov&eo*x(W_%yXHa_o0G=`R z{!&Cu)WGv#kWgkdX|0k~E^3F!b*TVW8}-KRUv&nxc5q&~?u)6Svk7zzP#@$zFH^Ix zx7uiOX0^ieNr-mlbZc?|r~P?OftTeA%f5*k=5=>03mN^cz;RR}D-D*Z9by&GIV>S! z`ORWXEa))e8i}MPz?yVDJW}T8TFK(0)=*}Mpv??1H)HF7g4BP2rQxZ<8sMxrLyd7c zUuBM?EF?&S z0_C{*tzVeq4^{z21LvyZ$KO)gE7rQMOX442vD8w63=|`cR!UIGC^*}z%Y|H2UP%R? zN0!c6C(gjnQ7C-ct&^i6_+Ze_R6f5G0!kk%xbj&o6&?d12jW)3&mJ5+j$RKnG(^QP zU|!c}kAapqBzX?AL{4ny`D6<)WbmUb{y`=X@A|(G(al4!oH&S4twv41`2#&t(hU&) z4LaA>zTB4r{k4f;fbl;kPJb{l>v8LzwyYpC3VwNJL)_S_CukFA=U`=72Q-mJ@{FeuMF34Emog?BUr#bb%#9 zg@Lro@h_~B=LdbL^Wx3z;Nk!Q0-SJZe7QODxhPdBZ9U`QM!C&N5bmv@KYLK$6Oz=?RU!i>N}JbhOJNZv#s&VdDW7_fn3Lkk2r z0(>kC60!Mt=`1o_{>YuGsMC`Y;-ti3f*c8!4n_(`Kah#Uy1JX1F_DS|wKWMR@y5F# z0<8V=IhY0`z`Qxku|hxuj~X*RL<$loe0Mm?TI_w3^a-79Q2?3eO74GP1D_Y7c(h%H z{wetK{+okHi*fPy3k9CX5yp;yc=G(knx-o}!AIeSc@ZvtAdPX>o*Yd^yI2HF44&1WEOcfSR!tHPsG$bNzH8HV?Xw+ z@H~4&`P9kXkRvW0V)VGpAxCi|Vp{+ODMx`zuuC+VXNh3`!`Uok@SHW24_D=dX1s8` zxv2641;xe1YhdKTW5KzSg2PXk5H@f$5=3w%K5~E4lI7zi$t1*o+tM?~=l-je?f%mL z08@jWPz)YoT7aPb@)#c%E4Uc`KudzZ^yBsbibJ_fpBMv5!DGlviu8_d49rMF8qrJD zNZ=SZX1bZl3hMA>bnN>!_>?RbL7&7Ot(L3-BBp)k?aELG+1TVjcv%a$nLo6vKkS zA1n~M6|0l-eipUZ0_t$}Px(8i{{XS9{>aPm^Aa0y;}7J$*9(eapDQKHMFK1$02-6) zzmW$~mhuq6gLcBfMR7DkJQzdP1D~Q(e134O05w?x%3oB5*%ip8!`;UW5%3qDXUIz= z@W7g}KVT7>1jhtN^vS}diI9kvf5gZv0fpdVw-Avl&r#uoig=kGwy(3`BtkP&_~WF! z#9UacbpHSui!R0shI#Zn!1+(~ESDy+!@2NWSnDQq{{U`h?&=^uSkK(%IKc?`)wql@ zIOG==XUOG+_u?6`=aL4Cl(YxoNGJ1PF*pyUe`&sh&T?~zd5L9e{{W_6&pO(_sbCo& z4p#%oOdft=YmuBV0w-1(&w%m*m#%Kn?#@h>1=R2M1D<;E{=<=6t5!d#a(*#v6A*U; z@dyflPb%PFwJ(c*?IZLUWzVZT<&^u{1fn3wIZMci2P_6hh;c4dNW)u&Y94;8_$16g z@supF$x3e@wgwK79OR$aY!`43K9*t1VB*xJ&BK521JL=$8Ui zW8~U;5FmSCL0|IFLQV;l$wyskMt#QQ=w{30aHjs%Um1hoa?_E{?P1+w7Av`Ev79gJ|1kY*8Gj+ zgR4HeCxS+knOocl`EjEIJt`yd8~4$xB=-GM#qDjB9ql)o?%PQ(2^u}se3Zls1{h0q zJ6sf{or%(Ti{*N%l|V?A;*a?qbit?lxSbr~nVtHZv6l18hHUw?nvak} zF4A)pgh+JNQoMNV+X@NjoGBbSR@x0!4^ha(lbW>|JaGct;+lPiQb=6AWCye2OG^8c zBGva%6FSVuN0FvpBxEEWI=OX^OxHAdGUeuQHSlO_cGH9C0+FXgTZwL6Y-qIrnj|m~ z_JoC-h!kzXRW<-VL9V1~$vJ9N{{SGRR?P=O*mJ*MXd~h%rR>SYfcY4!fr2f%y-J}#a-qHmld8`zu6yPAM z<=UlI(Q|Xsy`)u8(@C$+=qP%fjw}C%g3SM;y1LitM<}L zBR`98d8I4oSdFKOX{w)r6iX>lR-mEOV)} zc)R8w7W)$m#h~w>{By9d6PS7b0IHuKB!WRtKN$@NU4CaNFd@MS8v=D_>C^oesI#122@(cCu@Ez%AX?dA zEHs`0fvJ*81Dv!ydJJ2D#D<;;W9mTQ1PEBkLj*7S;OdwZDPW@|Vp40!GAF<#Qi!+_ zQ8HEGQ^4s|SLxnIR z6^~_NBWtxyWa6{l7qwV)y^-( zuKFsvdW;I!8AiZ-Ot2S z+Ol&DSsxaLPG5^d12a2o9xCzcFmtkP&k2chnI204H||*%o+v&(X6TDNGivzPxx}A` zNoIHafeyiXb>K_>K@{_(>~JT~-e-0jnCKQLcBmpsdcQKMGO| z`xd!EI2z(mKIhM*MC+8g;E7UX6}b0G7Qi z7QuekWNAvJIZbGMk??(~YoW^M#Y0~nQnDHTr|nlNzE$ysXFcu6m;Be`HE{JdMg=d+ zK0n!xn}PIy%(O}eVeQBl{Kw-xCd^cPVBhGsSQAdekDZ7d2o)dN%;CI%KeY2!xwtv~ zumWcP08*RX5!5(x_nMmD(>1ukvV?;O7=Ml5Ak*u>oa+Aow_Wm2h}ZouqY0s#O+4UD z8WgmnbEK~TX}1QY{FCG5kssZMl~&94tOj`(Up#WdMI^Vff6UrmRLMo3oxB~5-knUS zJ>U~($i6>;6du5N!f@pcbhIm~zmt4zCMbT~2$%8?iqx_cZqlzM+vuqLVc$&A1T5Dn zq{Ad@tRB+=0t_a$piF+e%2=!cwDZ*}-IGv}a3B3*e$C?5Ycmp|{ZxiY{{X%wc)!*E z0FF=-(n@k@U(fZVXNv3NK0i_-OD$SlMJ%7Fr(2{`c(eEa1iffqqf*OIpQDnjAwX%a>3VLQw{z<#&<&hxU%wdu7Wpth_oetBHX# zlh;vT9K`sF(J70$0h}9*Q3I)LN9CI@V+s&%NUhz-q6}hQ1}iqPPo&M5*+Xq~q!sm+ z&5V)^m?E-8Pxhz|csus&@S~{Gh zj)A-F#`)=NKZ2Fbl_33itk=_n*rC$;@#Ufz1|#UYNI-qOYdCgFw-O~c5ZqUXb@!P(i9_dB5G?vo}kv7GW`Ms**!cT;zE{#91;T$rCNQj3^5k z8qg{vIF5 zwz7gl6#bODo7})3d;)^mY-oJr?YETmRX`BFgC>^H=VN}hrfHXRv1^hEap0Nq4YFt0 zR(mqRW96Gwe{i>~zvP=HwAMEMY2I3DQn?0v{{StxHStqjj|V0(PxgGt4Q8mulol{g`A^7*)zfJx7r(V%S*LK~#Gf+TNpo<@ z&9mxunA*q}ihA&vzq7Tq4pO`VP)ShZg{WUgGCkiX`;o4njqXw5bhH|jn0hZ$djo(0B_9>nHrjQHo42hP+_@irV zi*9|qfirh)Q;ssz0jFbt>SZjX1~-8=nGy{AO^piZENP` z%%@Yd{YCjbj zfNY)YUcS?Rp9|4@zD7kkU|y zY?dPLpY4WlIkv&#zfitMlkCZZ{Lp@;?303Pb?q{n^&NHcGmtYzet*LxXAsoveC~si zgT7D3U(^JF{{TXNACLUIRkcrGk24LaqJsosJuLYIyE8DD1>RMODvu8xj|PU(hbcM3 zG6i)>PvGF{Ft_6lZ=!A=ePz=rXC=i|?KL|5bX!7}Ecu3|U!1#CJT~7n31|UXa#a5S zF8IX!eVdOC+Wf`hefpO(s;$2BW^?}lmR(hD{zoW?a{i;;?j2X|LJ8;lmi~-@o4V6q zyiex#@SYv36Gj4_2CKeOoEyyehl}3JvJffjF>PB-l$qy_`U?yF;Q&_iN0LE~3IN)> z%x2v^MRKhSJL8`}-5Tqsa7rZvviy!v9$7Tspf;RKrMNlvnrg1Ajc%r5*L-sdm!|#0 z5KGnipb;qm*&Cqrs=SG~?&6IudI%d!r>PEKayf^c>u=ZsjiUf2b&2z5b<`Z0w;%of zOY;V6?+tVomu`Pisn=}|m&r~;KP%YV$Q4HbX6C-mPs>bR)EhmYZNuZ-YFwlE0OpO8 zSOqd#pAh=zG4|{3CRYCdugydU-%!zt(A=to{DW|yal2r7Y#%E5Pp(EAYC!f@-)(-? zHDt*&Z4|L2h~YSP;4|L6movKE?F=U;WtLG7@9D@etIG||tjK@!+R87W6qDFA(&y~~ z0o>!|C%W39zXUD=`S$Y@1fZD^tG-pWJ5+7kAC-K&bJ7N#fhcv`%8`?Dwg$tXWBVsx zMgzzEj~et+6JXw*PU(V$CodouT$mq=u1xEvlz0CB`0DN4r>a0M0z2DUku)E;46viv6~^ zD;r%0PUxmR>Dg6VZw=tZ@5saXLw=Cz{*zZCE4gi6==DYr{IcwLiCoNmRLD zt&FGy5jY^xRwwp>$`zPG;R7~b%)vIPm{;Y2G-j%Sf6ffn!36s}TjcR0*8~(@$%ZCG z$5O*0^3!CC6OEz9T|UU){oHxmoJp7e0FId&@cq5`Ty$W=O?j0aumhNTyZ-=oc~e<5 zXrqTnJm?bgiBPXbqgN4J`nq_hl_E51Eo`EbqZv|RI+#S~5hvmX$#jjba5o028y&Fo z;@l7F_LF2&>$Xs<7>M!}RAtQmvni87Mj%bnBh^c+riEZ(-RpK2jKNnC1Fa8i1u2Z@ zmT}-S7Z*uHxE8ahME3_%IP)hed>LRp_buLGOqU!zP)JpbOE*?{a%TOXLK7>IV{HRh zB1kFi#ZB2zqC63WY+V2jOqF=a=rHyMTnCJy{Vs1FK53y6#Lh z^<=`0RDmk9ioo0&r<(=AJ`2e;wN1z`B@dMt`m`!>>u>J5=Yo3({GNI``5~i`TczL~ z)CV=lvc&z>fhiiN#fi`M(&JRF7kw-MeAi0Q$w^#`4<&>XD^r2Nj;U#K%!wm|y=REAUU|`uhr>G?4Z+yEnsX-u@n&>3gthn$U2Muq@3Q>1v~%O1vY?h6;|HhXQ=;Y~xv0OixU$i1O7Bi-Qfqs`c~e{9e#K zjw0|zWYvFx_AwVcdkmrvc)27H2y zLN#=+By?PKd$Ou>#|38kM%E$`m&rBj#YRNC0eTWe@3>uvH9Og$jEe_7h(eOccfx zs*LA~XU(#LNqfjO>1eswZ3y1yWE4A!i^=f&mF?yMY z62KmFWX-{YCovVJU3`08mri1)jy$zK^Ay(3cm(R1g#GKB01r)yqlwN0OU6S4;FpD2 z##{GE6Z|%cllZS8TKOY~QOzkVa0z!B*9&@-1NZ0nCB8)=*lKx}Qvs$yQ@)jyhhP~u?cV{~=5;hXN1kx@ z_Vv+_7A=awhj9m+yuK+ZY{B$6WB1k7O^!A{Kkl2p zsq!=^$pF2k(L^R&Q{gW9_>|K2$TH88U0mWO(@@j$3(q8{war#HyHwA_sBo+ID%Fu} z)tb(&#__03hq|GPp$~G4CEVfE>t!|=)30}j1Cqf2b~sdq2o3>CVXGBvC;tE}MIyAt zIyt0_=5eyST4j+0u_hn&QT7b2!CzYeW;p2+51}$PAGE>+&O$RAV>#g zfdw@F)^gF7@<+9k3B?FA?@s|Uk-Ws6f)m6|52GGKt@#xiRQ1O}s&n~`?$*Nj>joSj zE6q~5J1KEs?d{sB?WR7OM^E!V+ColX-y-=2D`8%714r)}#Nvs`f*D$`rmO7X6%W%gh0r~cd^C9s$M9jkbN{*EB!OezG+GO=L zteZC6I65=zVuzYKaMHjpSDk&WuF5dsu7+1vDF{Mnr%bCVM!cA@0IELm$;xBb{Y5Ak z6Dz`!LiCEfyJF6qZ&EW7-ft;&1~9jpU9Be_vyWJnuh1vt5)Y>~W_ zfkNdVYp~wJ^=FcL$g0dBh|jDK4fbb;5B$BbQKk7~r6QD+cw6pN;V48ZHfo=+A`YWA z;WFxVsz7VS$L*!B$bQ~FIN4ETtRr16wH*PbK_4 zXbc~4UDA z@zd<} zB~pNuNYxfh=#+8i%zndc(*Z6huVgZUfhJ*I*12%dVCS@rDa7v2&^GthR*7M>h)J2< zkdJDwV8Rs8ya<=$m7z$S&Bhbk*>xbb)sUJ@M4YSL7QCHm#U=)Jv2Qm*E_ zHa}b`NFeTY>IEycpj2eq#<`PWUVfe7WSUK%@@&a02-gas|u&JcCx5<)G^i z#~Tvs;%XU_ao<}MlKg?%)a4~plYuL>kWtmb-~orP&}_u4dk3ylT%|Ix2C@{%EXhf8 zR(4xJLAgJX3o0dz#oLPL${dfgGffu3gHIj_F9T0(s~(#{LY-1T)aIF=j9jYNxdx-a z$8pXw0n~OUV+~YLPX#q4B}eMl1_)f22dc^6n$zdf9A$@4L=2q@bnR7V#mhGspAbJ7 ziu=Rz?Q#zXK#%9ky&yCh&So>)L6~%9LP=m8F5_R{i!)LsVM&}HvCfNGNC?ku`7C#Y zgprrIQwqJVc@0*nM?qs`ZB$8=g0M{uCnIZ(d58fC569;TcaVhDtOb)n3+P24(eoVW znB-DKL~44d!8?KZ^Bs++puANkSw6cq>tz+hLCT!esFWV?;^2XL&1;h-Ws7#3>vh(W zlEMR*=5)~H;_^1DS-H_|vJe#i07N>yY_AlL*_9f-Y30?djA`12xR)=vvuectEjG!D zbbDjLRi-FFQhKCVQcu62NC?v$!KXR?@*8Y&TJNe=BNPBCN)VhH>8yI0h}ySwk@(F! zC;@7VIBH8{_M!Fg@ja5~qmU)0IKt@u(@BPNudqFk&-$F5QmG+c4X!t+5>1zySyReT z;q>5Ju&0S--YlgCb77a2K60n;_#$2~peBE~b@D=h=XyqHk&JarVh2@7P!YC#c=QIn zEu{vtG-69|tepe|XAF#>fyb2&#$WAh!<=Dn+L@3|7mk+MGdpP&@mm<&w0L=jWlTsQ zjZH>!InP;&7LIxPIaiI9bxSy_=^1&P%b=HDDa`9w^bZaOyxZ6bGaj6* z$%aAsD>zVfJ0F?tC3$R2#@=FxQBuJzCS_IOaOy*V=PF*uE;(F~EGy!`u-r%tqpV<_ z{byITShY(w9!SkC$Dbgt1*zM1R4EO0v?_81sD-PqbMO8*!_>!Y&Q%Cc`F-A@XptLE z9n43MTB#d`_1=zo0m&&l2g#n*jtj&hwy(J=4oG@PN3)hZitj`?bZ{JHfbuH@Kynk6 ze1qx0`BOQQGu4GK12_(|2C0(T>!tUIM!ecYt{{)1~MNbK3EVk$5Md~$YdM9 zQC2xL^GDZ`>}}yvQXzmAVt?y+n@<>`jwX^I41hH}0QjkCk6OWLQOI$FS3C;1sg+7> zP#@okxaTn-0bs3}HwIOc!(W#*f*nJTG7OsqFer`HMD=Ih{{YA_RZ&=(mPuMAzDmNA z0_4N?7+tCS5VffLzY_BP`OK7`$cn1fo>Zs}M!jEHIc6SD`8^;FXC4VWDduI(n<-(y zrKiOHJ@X0vKehI54pJxNaaSlZYQ&_&9vBguByK!lNU~#rEzj++Yp8zRxdiNXGSzF` zqWc}j$F%xVUyh$O3dLtHHqN#cO`2j8@r=NpNulH_itL_09Hsk+h$uh-EK~Js2a({$ zbU{1l1LPh~6*oL_E_3E^p2mnJnAa^58Gf)P&khA>v@IQZ=P{u7sa3 zqvL$RqNP0E%}oLKf&uY`YijBCijie!mLKgiwGD?`Cd&<`@nQ<|%9%zMJxV)uy9vlp z(e^R>;GE~~pi^$D;lUja2Y8IsEKs?k4Z&=&Q)w|11>WTWRf8T~dm1V?^8r*^;BXZN zuBOAMe3x2Y*z(WFB2&F%xVW$7GJfP~GH?=i5|bT;)LHR2<+*dGc1>TmXXFOz{{V2~ zJ3a!Oujw|P93KkZP7T7SS5`u1vT>}zMf-L2R3feiHM-rX^7d-SPGy)jAn>Tnulc1P zCD%4_ZYByfJ5fZWn`U962g$g1b9o!Ft+!+OsAX1<)i0ClK%2%yrE|+assWMN7DF2f zo5$C`y zft_Fu3vshL!b%jsHBiwK0>>Kz2{~wfMh$6E;x=2b7N)>jf=W06I0LBUHg*uUukt=l z8!4)4C85=(?acGfA^uK1lcc)_V3WgtN!Um6_a~l3s;K5aamh4?%`N@c;hUid419>z z8AuqAj8ZK(l_@My%jROqcCf z{z(kUK{`YnX*^OJLlefm&z#xf7^;{D8gLcMue_6-IX#D0uH9t-XUohXX>z8=c6?jk z3k(-ImyFptIX6}J+Ji%~qicz?(Xv^9B5p(pHIV>e+2_4|b;}UP_w0tp1O&Ux!Kttf z3T*x(ZQSwCy3Yyb)o?mLAbT2)bdrU&BD&I}CXoYTqF(Y$zls*_l>hS7r+%Y|o~>O2SAD*Kw6geJzd z^?~OgJv2*@{E#8RF;7SM^!+girdE#M?;x)$U6=xT~&$x``xq#_z%mnTSbAr8qf)6ZTG z%IQu^>spWn?lv>vKsX&mVlP28JZawhh2ef#xQnS`UZV z&`q5ZS{YD<2jQIq&m=2pFXZW=oktTquP)m#3=6GN>t+`Vldvhg>|G4{ZhO4fAw4?) zAOQv*Q^$_#?eZHj+RKHFnNCC+=$M zdVqu23&ir8}(`jQKYj+Y>840o-vWqw; znP7__Y0E*>2P`tF-k#v*6+53Kf%wIWgXw@iNY2y>a6#bZ#I}Kmi7(hBCkA*EJY}c& z9x^l0nKEtV`7=7T9l$+piu;67%%qkq^66lj*ITmFITgjhsU?ODMnd@5r**o1C!DOhKw2qt({RU9 zvfLc((_zV;mJ@I}qTgzDCUo+CTy+OvH>$l$gAy;8f|;sCXc?gZ&zEYoze+=?K9$Q1 zu#%>uDNpUX?_6Js4a&~)fOn=*6GI5x-0!q;Cc3tP8t*sTm5eF(Y zTHeJs(OHhgY=!L#gq1d(Aw9~)vX)K(IQi)>N#rR)U!MWdTUH?uXQ}t6MhLPn>yb10JXW z{y(R>G}ZD8p3JSH%1%WGOq|DX7azy>f7{E)*2ajSs%&2{zAp`knG(PX6Z219PYa^o~f7;H$5Duci6pfMi0UN>>zz4!PCVIV8OoU6 z4g6CiMJsy+iWTdmY6_HW8_Jy?jnH+t35v(XH9~0xtBX*7;`(&R!yHA2PDdkIDPvB` zFrX(e+d1UWDeXUIy{xUHoMb~m)Ve+Ia*PgFtBRme*){aK47Rx5nn10SFYjV_1t30RH!wS^)E4ZqqkM@+L zrz+e9RRFaTbe^`>#el_W&rY~?w#4TEn-p5;nzbZMfEf&PVcr>5uhuX~1?$CYJ@x+>^&ceiR0!{kURYk_&0jx1U zRV*^Yb=$ej5)_H{?N_YXI)(^`G-=U9jbK!B8>_^)5MYQNy4go2G|nJPW%6OnUcUqx zs#*{75}1NtV^k)xVU1`;vCSZJ3P1pDszHzAw9_QAANVA(9=aO79K1slAVR4KpXMBg zP|%y}$#RuuP&9`lWmR37+r-k0dV*MCVEhf%aBdI&GeY0uacN_^7fc$GV7%Q}P12!R*c)Z>s{4 z%2K=*Hl)|}627tfY+Glxikji`KEGHYNnn`8Y>ZPS=hO(4vO~n(ai#Jz^D{9`-oiS> zape+# z`*-Ad5&OcFBu>T}x!L~hUH||xNiYlO+E;*dAQ)8dsLTq;vrml32|Mz^Dos#OmeOLZ zirF|x`0~e@>#rPe|<{4;L#R?&hTo?$YVZS@pC$>-qqcvspa?)zp$9YRP2@r0 zoUTSckIfT=IY?Hc>A7}=v^5e26dxv%A~d|r3LBu=(4slmDSRmk2+o6YpZR}tfScjI z`Z|{^qyoO;oxl0XV{1G)Zdb1`DN>5fttv6en&M1}!U$Y>!^9_v+3BJ3DeBoA<*hLp&^2!J%1ZI_ zu=wX&QyYLnHA|32v1Ju}f(0eXNEbA0QRxWfL|$a!G=3j>@FD%ybyFlwnsrdgQb3gn zH1<bI3^P#XD2hT^tFRd>n~+av zD0WwV(}|THv7BhyY^VcVI{b()PkCjhN{kMuw+=9TZvL&V<@)w;G@Fkmfz!URRU+3xN=~mE%(y=6(nCwwA z_vWTTpHkfxd~q8ehLZW;x$kyJPO4~#dhrr+{2+iGgr zC8+iZ3P;5aA^oP~BuOvu9GanaiDbr;T+%<<{eCU!FeN4CW(I>xm#4j0!Pa;`C)hk# zIrV=I!xlFpSTlOQN6owk?BX{jm0|5QHI}-ktNj2{5`77dd7HkT&u9Hh=nL}8Ply~A znu*inC4QQL%^tXjO+Dcv6_<$Q4f^9+Qhd?iYUd#arRUpR7Phm=ar$u8#AfSxbb zmD7GrCO(RhiGW+_N)$JMdwc{NS-ezy7UZWR&%2nqwqs#wfzV{rofF`a&Ug<=GB8Z4 z_SCedS>-U4aNx~Nc%HVdlFzYK5}UsHFJ2Pl0d!@Al%jgBrh)D{k(?hraR(_;j`M9Q zG&kRXnc5U9+uHO~AvGXF=jk@7PM2qMr#y==3R^*ZJoy^l-9F-+ej~A4B3@$w#~pOM zZOH~Xf;D>Wdgy8F(9)I}+bX@5gJivMwzi5YDO>7FmBpXjFm}4B$>t^k2d>tqTF+%1 zY4Lj%sq(eO%y&DLs)Z%P^kcI1zyg^|1BuPKLzz%5S;h>{>m`v7y39cT052+vh)7nD z6)5DBqEjZHv7AXn2jqIMqxD<}RWg6uQ{I#HezIn}@;Gm}UE?lb5C&jypv@6`rZtWYOtlRk$;Z|8 zCEBp&3VVAsuC%_LlJHWA(4S9W@@o4ll!ByzI!$KC;!>4!$+gz7K~3)9n#D6>d3O#f zefI0`37&X#lFvTdC(fbb8sHP+s=kR(uNejPeru_7=luxPmxE9#MIK92K97J41?~!& z>`ZIz_BLI^+LKK1<@j2X1)f`1EU28A+|qvoai`=NkDh#Xg0V?}KRGQ~)GYL_Q$g0P zV&mhJBl(unrtTq-! zqcZDd!#!rTt!;k@s)wB_*mky!R&av*PXgBbcPcM(orf8iiRXPp=#pT|mYq|FKUpfa zs1Pj4Mi@(#-Pp)%GIPi_iRYv7DQe98Lo2^KGqlSP)o!6jGkE@e}9c*NPUZW={r+E24}r%~)0u zs_ZhvUu~)*k%?+Uty#rH4p0KhblrYVPDV@FJgCk%U?`E$yNS4myAXP_4HHzSd3-5q@g*UiYsB)P<6Rtl4JBUD zecjwP!&MnCzvSoHZgk)QnLlw9Y_aJMcB=Kfu8G>Y#UwqC`vx0MCw32rwfxl*i8ZC9{hrBP zNnGj?OsV##VUY>G4Wh3ms&F+&-6Od%rIBXi4RUa5VuWtjID@IAK4pPHI};e6gv@hq zJ_HnTnPBhr2x@&;Z?Zf|m;zyTpW%#l{z3fs<^=2J>DpzAfQ(BL77zuG0qyBBJLStWEzBG)ek3HsCJ zL$bd;>FO-^9S^Enn&LLM^o@Zp$Hfl%SBGm7l28J(U(2slnzrD`S`XUcv)#d8pGE$t zbWw!1ABVEs_TOI*8}aXt>nCc~9IbWK8VX@|0G=%6!sNG?j=0r~`pM)Hf!u>IJ% z`x(Rdjw^e=7bN^8!V41wl0hp=v+W9jCvzy^?ot4$f4ixG?_d-RlWSYs+U$XbrvCuy zt(-*v0BY9G;$0wKF&eH7`jAqb?{Ad{E~<4D%PqlNA?m2qtqdNi9voq4PpgG;kk6Xk z+U>NpIPfN@qP~pr2JjR^xl1{L%guqgp80U_53U$dUH(DLRmp71nSg!-8_#Ch3)5xa=|Hk42D(Flp;tZZ3uP8cWgeC$0o!aQ6!J(~9# z`*s@E7`z4eu0je@9wS@pMR{_Bp&~jiH=HLfAFK@MCe1?9x zR%iGK;9NNzr(u@2U2Y!oYs|14O~wEcIQ+*KTI#3BDXkT(5e*F{gIf8_XV>4%Tn(c0 z2~R1oct#0-%fiOOKYNBAMv{CN*``+!ZXB0BgURRASY&%eJ#&4x3N?nAr{{TKp^@})fr;hJt;2`cQ=oQLoogyXbCVo{KW*0ZwM}vPjpHg{puXBm zODIVh%afuVY_uads4@kV%Ic01=Yd)?J^Lo5Dml)ELg{^IbL)%KMB*s{4+~d_Vr#N| zPF;7Tl2dB~qJ`0^L4*0`eX2Ed8c>w>Y9~vU4UM zVa^{Z%zz<~9AOoFb7Vo1uOdj+nH4YcG2up1Sr^_&+foGB^NRFl2av|46r zyj+_|!jPY4wxEw8D>T6{7FK5JC9Nc}!+_STN|eaitChfT{AWn16tq-sD>Y#zdL<6> zTo{#r51%M;h69(-{g5HfSo1Hid+tr$&>Dd7y~TJUIeHuMwdYmxs7&0xI_i?v5t)fP zwp;d1XW*CRpO^{spXxGrT@1m+L@Bkh5MZ*eHM&RLMB(jlYttNlj+13|MU(pfQp8u~qc342onug<-XUP8m>!x%M zfW?&x2f|n?nJLOXk&rh1&L>7YK|~sz$}6cR0BjchHSTT|<}hZJ7;;HX>ZO7p0%qK- z57|Jsn=tc&*2dqz6J12WG62tu{lwNmnN12tt6DCcFRaZ>i!H&F*8upnu#fz{+<86K z{!NZf2bw?@z3=>e3~6if%q<2D9oVW z>QElWMYTi-a#tnRp)`|m)b~_qu9s1cU3Cx{p}-CJHRwI2ylo!3C;iHEEO8K?xoC+F zDV38C)NJ4v4SAy(0g07mPUrL=w%0f)mHek6UtYb=NP6s}5^!>z`BqSD9aSHPbQL|I zAmv~b%T4J1g<~E%9j3R9aok=feMK4Le7rKSoL&r4zM;EL>MEcnZ%Br(aHvGtYk22d zXsq2sPdV3b89U8jf%;0(mABd+>Se@Mu6edf`%>rC%8vNdkt-yIssZ7{?z4s1D%UwI zLjDdZ`IAowHsqe>k1)j&CF;NLJ|i}nBw8UNt6mkJ97BWNxljK9j+4Szkmx;YNELQ* zKOqkS*QeEM6b%}-y|sHSp94et8^{bx0|1pkYQNI)!nioFdBt}ul>L?s(%9+1BX=CN z??gt^uAC@>^j6MO4{~;{VM=8lQs9VR z5I*u~>z~%~%V$SAYY_9A#{k7U$FE~ndK4gLw(Uin0P^wSBFzxkL10#8?`Cpug_HPE>=26%&A>RP7| znX9PeRQVuf88uY*Lpb#oGECWR$ur{;0kt8qxnk;Dk(?mAzKZq@?riZm(p3;;A?#(W zQW!zaCs5!_TZ}swuzP!WB-w7Ze8P5RYwE5z$d5`%$2RIKxz7422Y+p-CyMVL~?-*!r-G*Eyx1qW_p=ftcq^Va?i2U7*FZ0nKy2Bci=J;;ri!Q>vWlU0AZlka_TRhF4XQV zGOc2l+d@`Bf*@#9QIL_J;tY2Wqa25kT=T1_z`?4_LsYNf`Tc<#c>$Yp3vNKU5Mjna zScbjWG0v}^29a;|V+&FPm*L_zH&F7#!XhzY7cz`yzMmL@ZYBCPkmU(!xj{iKNLug> zQBF)wS^SfLI2=+?9DZrwUR3 z0INRea&YPt!ajn*N!lFetrP(Qh%l{{XSI zT7W{cM~3t%m_AAXU@nZgV5SCQ*s;zjpD#y;S2veWGf*)Ja4!jOurIo>u6k9I@HR54 zQB$fD$ZtgOYDAz)M#kHT&J`b3+asApO`C2R*KKF6RG&$zoYz(yGpu9w?PdwW4x^cT zZ{*=z8umILw$Zh?sG*#I1`{_h*~sv(k!y6@4K=aeCpVuUg1vo1tuts%u5x{(o=5su zwAiWrFPxB+eQcOuW%xTA9bl-@BV16ZtU zDk{|FB@zmm_a!^}suCvpCu_+4<{yjrj+lPK7rjVy~r0x53QCS@UAbfX62&Ij@o(&s9%X(ADuI z1Jpw1ECX9u1c$AnZ#^e;Hn$~y$Zj@(vi|@#wARY2Y=xSW%CUh+Yt}!EtJP4F0uu(a z3ZDaV#+wGFBD_Q>lly&&2Bj{h^E2FnpTWk}yFa-&n!v3@bsMmNnTOlsJL{HruHFK% z%d%%D^p+vE>Rm|e011}L+s+tCzOgs&!8dX>31%()yw}+F_J*%PUtxQ+aWp`BClFF)D)5%Jh(l)T@05DT= z=CvoV?g~}-<&i@}ha>%{sdSrC1(cN)?6td6T3QWDFF`DM2(({-cz`D)v8i%v<@Rj+ z+l`hj%>86$I@#vnE+|1&?P|`piOr6|PhHP*%p;&0kV_7bbNM5}xC9;Nrs7m(Y_TYO#{4)XoPqrR-FDAxfQ$^A}f@VI}SH zOPwQMD%KgN%8FL!t%sF)F1t14usk`ME>;Ls3NY&hWELfrc>SyskOO}q{mBhKU)UCb z=MBfu^W&4uxJb-j)ls2Gut`szr>zHx&~5&76ZLN4O_vCHE2;)o%sAQ+T}xP|u`k9y zSEN5Dh@`a@m@c^|8= z#ic1azR$zWwY{_}pHbqylGK5(vVlh6SL-xB!3Po`AzycCLy^xM5SZa>N`I3!gEojY z^91LU?%1^>k5C1yx~FglWbkXP#_v(qfC@FSIA~h&)8opTDB(BRI(;5n$SjeJKiS*E z0Ge(5nxv`>N<6R!yq2GN!A#T3$A zM|1FeKE&{?6 z(QFE32B?4y3rwrG04oF9UsIOsg;?Y9${)c=z1e4s*wrHi)d;lLU%QYb)rLDTI=g5f zkn6}#{J1IXM~i$r2DBQMgI@a7l}$2}nlVQdm~a9*C0ynvbT*QfFOgL%Tzx4hwN*8Q z>j`5+;D=$CGh;Yqy?j=wfg}k!5ja-F0}NQk9OH#Ix?}|4l=O>o>h~YEA70Tt15e2$ zQbjXc-rBd4PR5&C!2bZ{Ybvw!P%;qetq#0y-c{KRR5@@f6NufJv zW~Zt}shLnY533@{%#>>OswB$R@clL1GH|ZdyO-A9@Iut9TZ5PZ{Hez)Wm zBR`beE_*g5X;wUEWRK&Xc^z(ddtA5tap}mjXWhVZ30w>W42GaFeNL9Xb1MxX3(9g{ zCCbe@d*lSUO%)z8kj{E(|~cDFJxy+Pno9m4mbvC6A@5}cPg$S79kS?D$>jYDqMy600yf3n4?G^h62 zI;f*BmPIkW4^;9(OE}}8g{7^HL)gJQw+zXd3Cg65sJCZF-B?K^C81RkWFZA+@`>iU z)C)NnWWq~;IDXxQ0dY_fGJGQ>3H!>Ov4qwLa5NPTS0)4;Wbv$S*Wt2sk8Nws%O||K zcnnX{jJrtXhAT_7$%B`@QNF-tx<1oEbkAnia(q=|u;`CR6y)9QecqAjep&I~lG$9n|pTGIS+ zhcqRu%RN<9QRK4m1-IG|d?qGNn-$=g0Fh@r8z|zTR&rqQH`Wr&Dr+a93?KSUD!v`A z9UW~T4t2wT3EPA5bLs9|b*!g7&eZy=xg2rzRS+s)@x|@Ou~ePiP9+W(Z0;gUame#u zS#WDlA*}|WT3mgYootL49MqC-V;sAbNdql(@dxHKI%3SVZV=ZuYL^o+Myk~lr8SCo z4n9~)M1e1$S^ogS%BFsaos~JJeBxP>9GkXE6?<^xFqVgL=FFCA{{Y)~wkU}CJ!jgS zE(I{A0}}=zbRx{#N&pKWaTHCQB{`@p`ECQC8~r&n>#0t0fNwF&-Z>&|SrP=70PL}@H|;HvfGbgp zQB_qht|fI68AEDmdZo(SV^0~TRvSjTc}!YIzycG~RXGAv%ywHB4qG(Rc}K@KHj0|s z2ueuNsfn{VJDr_wYj*i8l@DhMrmiG-v|q6))mtbzfh+Ranizw_(-Lsz4m!Q@@uCsnGTIHpbo zu|uc8a3b=4O=Vz`Y5CX$aup}}TN5F|jE9n4Jhk;6e}nk4-lzs@Z6ono*Lp4`QQY6v zO>Z`7>Fzf9t)_58aLErdW9Z+_TtxYx4O~(L)MF=_+e(L%#qL=2Gz{{Wnm|!sH(}}T z=71yd_14^hgyKWlQ@us5Z~}G`Zc_TPZegq`FmzcATIvA;GIvZGtUa!Uck5Mr{{T1m z@5fVjWFixJEDW7~$g~YKFe^0XQa^PY8l;r*_!--A*7TG1Y7<2tA0~8#<}IU1Kd!Bl zD1Xv@HAZCidZ`9te!2mfY6+RY2|Qvum?>*=R|fMjW0h$&c>e&E z#MO`_K>*E?C6SztpVr z5j|k7G<^PBS^1guPrlV`Ufzu0Cq3@2RHO#q1LSeY4$YX&~rpt7pB z%-9|YCeA6_Yo@7BwAQ~Bzt<}b`k`;~{fhQ(7rj58jvs4il<~_{o|S?`ch;B=73R zHlId$xEiKm7Uot)<^gRqu{G*CO<+umKz{VoOYIaIom*aQMB|WNiYC$s#iGo!5l=jz ziPMvy95V8G;*|we^XDsFbA*b|V+0bt{=e8(SQ+`aNs48B(a}&zv1}T2`Z-HYVtBdMW{GwXu$PCR}{FCBr*aJt@5g+*PRSh`k z!MG<+WQo8T(UY{8Bf?=Eu?p{CA15s+`V2Xs6S_<{lGyTUjcA-z>wTFS=AL}Sz%p9m zoD$FWm}5$LnJ@}gRA*P&iK{U!ELAkMscD9&XAzhShqcs#Y`{jUwu>-nA|5nI&U1)W zArqf_65}wFg!OI>K%;T}6qc^)Cp=5U@VJz<3(SZs_8erasDx2XYQu2lcAZ+Yk%e(v zlPj^1N4MHud`X(^KB6epoM4vDW`EP3dy0_`J;T;Nwss<{PlK!R{a8&+pG#N)38jb( z{j5Hyw-phEXA(_It9h_R22DtLtKA?lKIFzK4a`ZkNj@wIW!CRrBs(uq@m?Xpm>wxj z+l?c!%DY*YXLTq&9E^=q+Ptl*poC25l#lvcJ*q=Zf=1_ko+iaMe zEHEk8OH;ss=H3>qkzpul7Di34t8g*BVT?-g0rjdUP8zBP*K<}>Ozc#&86;^KWvV2o z7deWTr@c;3;f$(?Uw~=lBz_*Mruu{TfK>YJimH<~06k7yLb@#J9Qe#@b{F+hSz2?W zyzXxdi403(kNJqqa{~pY4Ogt%*RG{%3poKvuIX9yyZfr#urt$Sy{Xf!YMz6Er^>CS z>+sQD3GV;{WMLGj2twn~f$PZCQcEIA*~%Wsq_CAQK9U1mr7 zlA>U5!xV2X>rs)w#559@P(|i%)kx|y>*UYhX{w{gS|-lP{eMYEaqD@C#9V9!zX8B= zEdsKa74`J9`o+(@9wY=RhMisoXJNHGVz+S$=*TPalYX|cd8$Toab?PB-eZ*t_Nj4$ zFe*@O4fSBXVG?c_=E{I*03LO-D-CJ1L(7q==ux297^xSHQr$2Rc?Q%r4&ZwCEz6k+ zKyx3mIGkqIyNL@KcXEROCZzT2DdO_MQ1(Dfe+kKsIvi_NDpo}L&bRXZJd-FVk5Tg_ zVbLy!EO}!t#TnuM0FpfNcmaV2mb2HNm$Wz*ZK5>&NjtLLbM2hVIJ>@$uKDsHoN|vX zUTxS)X6mvY2AUx;R0`=Kx zyWajqFOyZqM2MPCS38-H!y>I(9Z~K8ZG>QKj-in^;N5>7uE~~>a}Xiv(lUadK6X&P=U>#hsV}U zG=4AmRbmY&7=Lx>{zW35*G$t)-yYdmk)*M~PtxvW5)?SiW``*Fv3dK|e0zJd0czI8 z%}>U(vH&fHZ*lx$Dh;?ozcuS9*6{DoG5F+}E#yFg0c@+NKkN`EGA3gmm3i~^EtAg# zNe;twi+C^v#lUf1x+kgWw4TvNQzsaRz|LMg^Zi}5Bf4{Y0i}s8$vf5*nxsQ8PT^4Y z`BRhJWa8^BkL|9KW12%6F#}5-mL$xjq~r#$=fL3KjfWhfr3oA|M1cS!CqXZ~>EJN@ ztJSg3HF9>`PB!54k^|U^&Wd$L zb0=wuiQ@?Y@C3NrR#Z(_OKRpE{u7flk0xeKlTq}3kDI; zVx{j7SYm@vcB1(!Z05yq5zs+)8qm9nMk!@8PrAjc^vTpt>K!V(yv}yQ&T9_P)gpGK zNyv~}`o9wOTi9z0c~OZqDoK~-O>|gQMDgO_Oq1nfhY5RT#z??XA8&~T>@Z+JLFD>y zk%dJyn49qumZ34uNeo#tkNO@em}LNG9umtaxull*!~mXW-9vDztD9S{J^|Qz-QIqU zJ5?=a(Oy#OX8OqljvAeiX%WMapBOiX*NI%Ie+hsl@3av4jnk5`E76>p_x8sv8mI z8I}J4XI@%WX5HS#SrtYMtkWuD5cZ4JH-!{4_;+KGI{Nz7VlMqgk7!y- z8l?$&P0;MmUr)7<9)LXXM8Lm4XGhr?)xo*=`sAPwyADczGsD<_OF#|pp{+v;u6$`Y zEJItc?w)^*>VAVX?L*jS#ZWNXg&7(UL!wm$MXAZ*2lK z5DI=9u8L94DkjmfN68Bb!HUS>%$1DC@#ojg!jLJR4T) z_QCdPk)UI)3wftC-NjGbYK$}fQ&O6?Qs`$(tJ(dzKO)|{BH6T!_2>B=6&&tTGlf4o4AE<+)t}BmtHIfZD6+}9|}To#p;2f6~KN>w-&g4wviqag#d-sET{N6 zguf)8W!3ho%|n2-?G~sllGoq~%5YnT63GE6^4s3{enD{>za;H*MI51%tkA>gbGV19 zg=FATO)4=%r&84zbPtrV-l$3d}%q>{NaCthXBWh@o}hi%;|Kb8SW}-z~qtJk?`=jK!i&yY2XYLZfW?w z>RE&}0%}_F<_S!r5UNddovzBhn^V{T-=H2jJd8Tm7%05XP4-k~-^QfFuymnMBv808 zGpEs`J;(JHFvBb{vY8x3-r^T8WmnmwtLReMTn+A44Ip_XqylnT0&5kLgz(YKQo^z1 zp*I3woO8;E1U5Nu5NdOgU7+Xs$0rPTG0dnJDPY%^j(8dJ6UWsJq!svX0eb{Cav~(^ z>gPuXr#wD8`=WHx=aAYiQE z>dWFaR_AeRfpiH{@&WN~{k~dr8Q3XRB3f(zOJG+!*%Mu`>a{9z9@`9Dilg zK)8uqg*4QKI(3}n0_J6;CpM`3yH|NL+5sG^T`sCg1lk{N&7w?dnv(Nn6$8M5%psiD zMC6x_apx9(C0yDH1w1p;pMBf}yZC)9K44PpC>o23`Pn9;{ zG0eab6tlR0735c~U$mihVJD1nsGO|iy16-6C91424}(C2!bS@~imA zqHX8vo_zg9V;fwJ{{U|`D7$CdHxLQsfk}zV33J7nIs=U^YE-7<+E4%yg6-T?5UR%Hra(*>FZPYd0XT*PdY@A-_> zKmP!64=DLIt7Vax1k~5TTbS)qC^4OS-LAK#bqbuF!#+9#Iz&KQovI>dPP%jHN6VpT zDQ!`MkL5#G7i2-LM)5WN;0mNrZ;MAjPHr%He5Wo_)KUKc6BhSuv>)gFN2GA3suA2HF8c%3tm$B~$kufM7bK6L_o(phi@U zLKV;)XGo~%HiJTHf=u;hVGd^YRIlW@mKJ^$b-lh;#? z4T+RA`vR~7OLiyPZ!X|NgJ8vEr&x{_AY{dB#8mcF>JO%V(fggQohWWc#!0~2($M9M zJyle;k&0{1wBanuZ_B4kjR~h>-_A;%ARTBS!)K$3{{WT+!!3W6nlfwAdUOJDS6v#5#Gv?lXoDpa$liM!9!8{iFW`uf@|4gUb$T$eI{>00)> z^bsmVwX)F1LV3<}+w&!(_Dh12Y5Az16loE`xyxl;Q{^UP85uAQ%UbZrQ1{xTba$)7 z-p|0FK_n=pcLDL&ih@WW>HFgRV6|wk0{IlcrI@+7RAI0*k|bR2>87^V=6*Y_qL1#V zfOUF3bnh&-AxK5CidCs;))DzS7)(`0(fW2e%k%*+5#bWqR6wDncCV z&A;RsxqaPj5D=x(vjdd}asV&d%dd^5n~NT5r45^?*;vuQgnHuQ6KUUBeeYA03zX52 zQAgPtY7$M~Al~U{58V<0KDo=?N*BJqfmXX!wd#3Lr?eqNw;1F@D(+;I1G=z9``8*GZ*+|$`)(jS-V)-0KMm$V4IiuP!Hjru4^+N>DopbG#kYGAKnevL( zr(k=7<8{{E%z}bQJ9i{Nx+yXbTU&g)=zF!!?Va~ITogumE$#mR`{myHu`_din_WJ7 zIlSen>h$f*VfnhJwPP~21iImoV+u+0{%=gOyc*eYPn#OHwNz#VXG>TFgcv1iqhl3% zoV43_(xCTUp2|VpR8)x$gKVacFLpf$O+aVnt7M9j2waBq+P#G2nyOY5S!E0CcbK5$ zcNTeD);OW%NA&<5YZJ>u37v{k!HyF$&AHfQ(p6wQu10HWHnqe9u8#_o9f2e9-qf4~ zur3UJ+VKV$^;DfmuuKHjSK}xABkPN_O`*v)m~x!7Ta16wUyNKrlWb%7z0H6r>*j=q?ajsQPuuBH(R7eACC<9GeNz?-Dl zK91gA1xzLwAt!+&x%CcR5r|Ia6NO&Z1t83*2LMBpeq~U7QqvF$wnhQO11VzmT*sW` zepR%iS%doyBE6loFjIo+BqfzpXJKRl3IONp$Iyci$}nY(h5)u$Vx|24$HlGf_1Gtn z6d}qoz#k=MS!JuAPtoZr*z5H=_8hr1?mj^-D^$rWt-q+DcRhQ0ew4sus8E>jASOA0 zfma1$ils|LNBX_(rD%0Ds{|?5FIaG0La3cmb(dHX&f#SdK#nK`6?r4Y$hNmF+y zQ6eXEn&82z+gL830~r96?xLkihT(&;a3+S3s7c8G03IpZTZEFq$Iw1D@hr0xFbGJD zYQ*YaDdp)sQ6g41f%5W;GhIM8sF0(01mFz<$X_j9r4C)nHA$V5Zc4SaPwJ}glQKO;kqEeKr6Al?334acgOn3)zqvU%N`+s^iP(k` z;*waAk1)IX)h+Ho&weTwiLFA=b~e4qZ@dmwQrxN)Bg6oeBNV_l)){RLj#d6&SvPE? zYq%eCXkB@zm6`xNG-BL~j8tAtt6W@zSFg*ImHz;X{eRV3^=@f}ErmvT3WWvga+Ez8 z`T^YN_D^Thz#C^g)}5?W8e{a09s{#3ZWVMm876~fVNoTfuiaLk>6=<(FR#Q1vnP13 zM2he|ph!(06w&HlDPeH(uZn9WVAqo-D+gtZMIowD`B`o5QLfES z4P$&Y8os1X4taG%!7=8eICag-aml?_>$Sw?CXIOkRq@1zP188oY|w5pknS@ND%7x; z3MXM%+Uwa98j;wIC;EF;y2MWd_4&xlQVvuRsLitFgo14<4&T%#>~+5**i;k|s6JP1 z4mX%{9D23m4kZYXNP$~$_V$j+l~-(1OnFz7J1R071BIZ*Njq|x*iI~ANi$yf)^O{)E?WK`2V=nzZ!9vrt??0XHY+L{4sK?-Fjj@M-7%hqlB z4})njFU2*xIj&2bZYpH!ldeR=;qxJzvHL|fB50gx=${E9^Z(FwAKE!i&KLYse{)yDHds7w|b$hmTNYf%dI z($ux|v0CU>d7S3uVIh!bl2`U#7M<;KskmmyKWULQ3CavtKpp{;D*&o70fA+5u{3?+ zMfKmWKQ3iSVX;#3ODL*{6yOXsw4lzZ%}&A2XD_eaB!h)sf*OZ`U{d+#PY8Q*_Xa2$ zy*2{-ZpH%yl1KpNp`BrapBW#D)r7xZ{3O{zHYhAm1OAI#TB#Ho?Rcd%>}AZB`o)57 z)$G~VTi%{7sdyTX23$Ort}7JGoTz=%mnHT%$zyCpfDWeuWxFnrN4Z!me3@aAnU;vT zJ0xrYs`OWavrLYHX#Fj?`6gU#P&KLWHc7c)7#y3EuG~wwQyQikp+f^dZLDUa-*{!E zGLM#PUl!w;my+i-F0svG#XZpMn5m9(NG>icEMd9Amq-fQ1{h%0at0cZRynS-qCs;+ z94t+=QS~cK3R@GvM;{xQhOQ5XD%%om$f|q08!ye{{T1elPxY<*%EB1LVyEe%*m#i z{{XZXu`Cy}ModEtQpt`JRP@xaXEwJYY^~6uvAVXRg)KeQ}~I~Lj}a(Eh7Rh8~ogf=o+05`t>ja+}2n%Jv?UT3!&e7nEWKg0Io!%W34oOEZheVAt0+rO!lv-I! z9HpqDHTAgpq&)OxSK@6GH|(%ff09N({gh3~1yz=OT}BC&06YZmS!7H;i_duf0Q^Yv zo@=w5wEaaSLdXw@xR@dqu7WO>z*3+5Z4S zv7P~#sH_t1W~85S zO3PGZ;MQ`nsWKdOBkQUbumu>K@vw}d*|LXS|h_>nQrbfc2qK>DEyE8dDlKkqCtmyKrHO! zE+Az6YNQ;tCF@@JCjnPeWJ={@S4xY!uoFS>12L|Pr-9WnFX>;%q1XQawRtAL<^KR5 zqESUI;_UppRHgKV4`BZQ$n?Vb+^!ESr$6KLmIyT|hTG?Yw{_0&tetA*E>m5ndvX|9 zWM*S(ZfKs9Q5R+#iTXs}mP!WBU0hou}sPncUe zx3tGKL4`^(m0W4haHgq6e?V9RgJ~g$L&pjmPu>QaZXEdZw(HIs_f#Uv!! z*sGI#z(X?)G-S>{#YLQxgMi@0*<7-#x}|Ym9M!w~e}$(lV5z)$9SmyQFmmIogCw;v zmFFQwaf~ZGzWn{sE$w5KjE=k4?Bra-&hm@5JxV_=3aVm~;u4*B)5C#Z;(lhO+5*Jz z0ofwWn*m8bq>jdYB3!o*H<cMknFGmSj}C$Z3XxiikR7+TuGa4 zMWhO4XM@G~C5Abf_!}w7?X1)EfBRFHn(@GVoYdYa1dcq~gDB56HCP&%(|`amV~}jt z`nGVu4Nt3V&PI92rxi%brgdstx$8lRruPw^bs*=R2{OxZ@zHJw-NZa77dtX66)jGl zOIU6v8bzNNSWhj7TO3idTPOZ>i{VD9A>&VJug9_u4Lk`ksd_t;nX2dDYhrDoL7_n@eYG`FB4<}g2aBj1-_CPSi%)7&Y2n3)8*ttPL6@~M zNTeWKelq53=m!aMr}XFL(NN8t&!B{k>5YmmCy_Hrzy9C9KT*vC@oS#%zBTQFrGX#d zINARIM-`~B*eh_|IlR@M8QyF;up@y(Ef4YitQdqi`#L`o7rsD|MwY9R=#I1P!K=rnyf&wCuo z6!A8BR__fFRBieeT*7gl2)ste4mD#V<$IVUp9ij^FD=IK_I0`5x{{@^2P575mtm4e zth3AE`Y_qi2vXdfyGd@>&}igK4Q!sARW=K`3z!cLcy^G$XsKm%~LjyR;Fw{mG z+ZiI=5=CGqw2FBuORnZrZIKEQ#?c_Zd7Xo&XwCp|ZG}Jsfed+9$u+bhSzO`5cYF9U zgv^5{W{u6Q{BYwCP0v@~RR$g}Yq7^5_Od=NZGU$+TFmBulvflKVJg8qTHl)PAOcHU?9ZzGNS8Sj zSuvp&?c~}1Q*Cf(u~}kKt)>PDy(q~DA2EHhw+%4{G{UAN2_oF&bz4K7z{9{1RkC$& zCgxwD_zl%Vwb`jN_p2|Gike)U6f-$Y<0EP;`7X+O9tcFNSC>~V)txCK%C>>550zUB zz`-E>R+7KS=A`X(8xLL7%g7g2ws0^n=gr37C=vtHzut8=DHjn$rV zC%yV%H7W0P&%0%ndUA9ZuEZHR-Mk*`RIvX5BdK4!YP8v$=XNM2eE$FpaUK%F6l`Lm z+NlPgh4UkT8|x1$-SX|jP?ht*3itaqw7%Q!?XoSP{)b zi`QEWi2BcC@|-L82^~-qv{h-{>`Ck`wXzA#llAO@b5`v<>u`5Ua}Vhq87f?diUR z62_iP`^U;&>>^`UeAe&R-ctG{=kBj_>`D+DQa=FPBT69RcP}x!_3?^u zI5OIvYn+P$0NSluauRU^Z|Y`~TPEaAI*6-YZRilkA0=AI{<-9vMh&1C10FNSsXbFn z%Y_)kC4gs8{lBbN_s=O97J%DHTht;oK_z=?u71OyAc}>3Y}C*)PQ~?^{ip96Wv^MT zcOSs?axN(OSSN}#+Z6lcwkwg(wUt0$WEmZw$S0R14LoqW<}<)w*>Ce%k)gOBGxJ`pa%A!4M)l=RzwY;>D}_D1wv&eND=cK&|sX2B{lq?UZxKe zv`N1-c@OmocISJwZa4)6%3a3cOy=*;#BR(gkFc?SD+YYF>c~Wa$Qj0!?Hx zoqRFGSf)yzpl%v6Vbz`i3CfAn?RDKkD#4MP1%S2}6UOH%sN&=TAw=Tlm^fSH6)3s) zP%0aCzKYM*a$2f4heH5W{D;G0f-j8g2N=jFFsyQE2N;LUc2E6-ZNQAYqvW-m`9eRe zSIxQRW@qO!ERpA*pZ1saH|XkPdQb-9$B%sy154gMS>5eIF-SFFpWLY<<(%NNuK6_* z^6m^CF}>9q@_gEoyX4Av2u~jZEylo)@7g?hM(XCH2`Vsnp1M-bVA2xL${)mwpnIy? z+irig+2gADE9A<->KYQin`uL_YUhOn zlmRfSD6r5CuAJT=zycVkGqjW+igv#sN{{c`{-}OutjmQP6)@zhtq(C^M z<}nn#CZXofnsp^3GK-k}nZ^wUb`ffRNrf?>+WZUBr{=`HBB}mG70GOKH;c`9LrIaT>oY~&Gd=?y}8Ekhm z7)~Or6%XCvE)oWYL=ltxi_A~?m(g();R@z_v4LX%SR}vpWBsHL;3MWSkpBQu#SP%G#IK}BvB2@nigyhDII&i?>Dca|r4L%m$IT+VNF)RA+) zSH#*pO{SC}1M>{8%wq+H{Q&rOvUTNZabQZii~j(|m!8!Jf)b$o2T%#%CR}H+={|TY z5q|db!?=lnFMCpX1o<2*JNKST*;i=4cFGryKnpzVnf3nMyvFv?0RS(>n<`y``)+aK z=sbM~G0%)fN9*jzB0?EqWC!q{1bE@kBjY4*<&w@z9==BeS@8(KnB@Ne)7?aXKWS4* zly^UpQYsS?9FLiK{&cjsyXZK5;~sFyXYl@f&NJr&^NxSlkMbD*0QCo*UzgV~$B}5Z zHHY;|XW`E28N!+JyvV00$*O3GzN!q#MC0nmFflPcL@z!Z3;6ITS$=#2&TOKv6#oDO z%CoP7rN#u^CiR-l%=gG4_g3QezN;Kq!%^}ZXXlQgGSKffBb|ZQkLmdBFP(!xD9nFU zdo=q~k*wz9U?2VrvE=*xgltiv#h)$S>^3g!p}%>bVt-r=zZdPym%z--vs=%IVDsW0 zbF9zVFm^YTjzF^9=g00gG-R{e!v@M9pXG#pdhYxG08IJTL7pf4cp;K3;1A58`QUuQ zmLc_$`zctJJ->(8(O!EC==pe?y;L7C77%Y=Iz>^3Niv%n%$cH!C-&0 zcY7w|h*6LRZFVhKhHE}JH<$kaWAh1n3;i>n7={ix{rLvRXqFBXFcinNB2v6FlI7j1F1DTaPEHCb3z!fx~J&4^)c}2h~Jfv2Yh9 zA0yMB=8T!KBBs@TuUR=S z1;x8t*i|ZmCD@IzM>ZFz9m+Zv@HM;OuHSm8ANz9 z9dGI0)$1^A06DAR8<1aUHv}i}9mp&QKH3=gZsMc*QIFgo2B?pliC;|klpAh63I%xo z0E1f7tOo7{7wNUNA0E-}(teL(i;#ELIFgS5pFm*0gXy)Gk`$J)SNw4Y+tPVbgW#U2 ziwkVbhknKynid%vj-+Qin(na2$aLfcBTv>5^GK9~P!~#<^C^DXfd2rfcNwYN4&Jb5 z?Lso}p?Cyc5~n5$a6Th*Equ}?$gympo_w<6bg&*=U_DKNh-$wOE?ZU&6dI;8Y5lx1 zKZ%E$t#&qdjO%X?K0md(O)|C2G705KHEK-G42IT!c6*SwiwAk}cWL%6nWR3pEpFG=HRPV?AS1S+e`Nljc05g#%4=kk1h~x4m&yWGnXqT8- zAO1W{PjiJT44M32^z9YIRNwqEuhY2CJoEiRAEmPOwD~x^{{Yj-40~+hgKYU9*9JCJ{vYd~CjFPfT zqa6PL_hC=i(0omA{{YF3e87f(+;fjIg_b!jo-Jer{0>LJq3Ywqmy4p={{ZTD(3|^M z(`VBPJvPT^Ur3z(pQPByhZ7U{;#%9ly+)9?T|kfem>w4Y0KOt6@iD^jzBPaXh=U8+ z7EP>|A}3n~VB8i2SMo??>dKYDqw`Bh8-%Dh?7m2v5*@fE(4G0InBcFW&&*4Jh$|q_ z`C*r_iV|cv`Bkb}t!M!Te43I3h%1RNc>2$uzL{j2Kt)D&77LBbae?5`oB;Fi zEA{Yr0pu*LhxA-H6#ElaII#Zljs2l9f=`c$+}AdFr2ey?lx>NtW*hWQ-fU>eet%wK zsuhNhY52F$I6e(5d4@Q!A;fK$2pequL2_J$a9k{6BEi1KyHM@P3~E0INzu;qh;W%QEoempCx^#(U?ee}>hf z*EIx#52F77hp(9KC;`UW)U}dmG7nY_SW)K<$R0x=9DK(i{{YE(jQ;>1iFuY}up&l2eg6Oi zJzRv+7~`IK9~U|O4i=o7WYBIX$$;t1PJh#lo06k{T)9W-ug3wH1ybkuKc?ELGH&EV zaW1Ju61bA=e1lrcvJ-+-)7bnGgf1DlfjdijvUn*=&qjb@2Sa?sR5j(ocAuGwB1L}J|YqE$} zfHsy-=NrTM2G`qX`xg)681wlaIrAZs0L}v+c|85+Klmd^4$tl4qx&Dz;y=LK`7hxp69uteFW~|!JdZOZ zd`bZA??{@j_;j@}S}G){J~LWk{{V3Tey1YB43Cs)dX`QV2P4HwPe2xUg%o`$EY5nF zRzLI9S@W9@@9{kNa&bI?sQDrXHwDu(S`LBu&TtYlJ}Pj>9E8S2(DKM<)h1!VY zTk7BhvcF4?4(DAQ!2RQ|Z( zLGkpditivm4w@o70)CoI({e`v0mDKOQb13iJZrKp;!e*zNYDidq)9@AsoaB?73qT2 zk6S~wuZ-)SiWRY)MmYG+k_(y>jyoNRnGS=s7AaZJr&0LOX z18I=DN$Z~^u!lW261UhoMMSM%#lAfweaU6w*~&wdS4|((nRTm3s!H4g3Qk5DxUgP) z^W(VO_PS>h34agX(SrM(i}4=;cUwu$$rT>~tXAxY*%bc(rT+jVY6aLx5P#|R*9XKp ze)Zp_LTB|=-I;&s#=cf4n>b}p{VEG(Ya=YD%zlr;GzK%Z&OrYFPChJaoht?Tt@wtX z8o=ZL4AtPdjv<^qX+KXjDqw$vuA}%4kl1fbLZjIJ zoqT_wy|BvUPB;OiLYX!NdB=?4&Y;TY%k3Labnw|_i`%hJyCH3;~fY=DNj zt`a9|`EcOgDxq^L1Su>Zg1Km5HK(36NI{-y)_yweZUJRWNAJpX`gYW>bMidsU~Qr& zAQ5Ndkt(8cr0gH~{5G3R^+EyrCY-7SfPQoQc5|zV$@UvBgJ)-LT_8#eeh+Ny6p!WS z{4Z<%zmEX;O~eW_<&0zW($e9PZcoZTPxeY@Qp=Z;{+Vo?Vi{=oAEroFKns^Few-wk z&+9!-{XOl*a*-dscj+bDCKwGuvuDDn!{}J{7lHb7mZh#5_yr#d+Wi^GJ>ZXnZW^*C z2#1sW9LuDbOv1zT>a{rXVf|A6p7LwCePhgipR7~&z_~l%Z~PRp&n$kPJ0bQbocR9$ z)7lmHp5LHHz$5uHhQNWX}O0p(u z9;fKg>>6`EJYI=yHm52c8n`n!2{2E!8t0HWkgR9K$!K9sS6M3>h%nzu>tM z*tD;a59YVxf)go7PY2u0Lq87!RvQcPJQC%dB3Tjo@biz%IR5}uQ>Jtg0jR?Ik+L#q zLeCMiXi+GK2ZHvlKGEp{@s&oT5!wRQ(2Pjr9jY4O%_@<1D*L31S6MWU^^zeanMUHh&u}|U2 zS+&$B0fj5O!($0*09F9qv}F7X_ICFmj-~ZfuCFRyxKf{`8$~l~fnwtz!BH%`0F*g! zRJt^!kC-SX3Ur!h6GdvqJZH!C&ByvDh&oLBk~N2W!OgLxoj5N~_n&U_4`?=AlvjrE+TOU@SQ22Mpl0^$}sO)i6eI zFd-_mk@Fw{U!U=9SRVu6elz0Qv40^xWS@sdVjZdv5A^>4RwmNN;(Bj`Yij{`fnZng z4Lev_D7bi!io-aP5*$bVISP>3g`>m%8yl7aD&gZk4>zbCWC|)i7b=oY{Bk;WxNP{k4_DrE)x(cr8(TzgGho^{{SJM>sWe)$qrpILd_=r{0R}}zo1iJ91zN9@YF?Ou|ygsD?G~Ta#11eXsq0MHzSW}Feoo4f36AuE+<_txq#Ynkn$-&3`l?KCK{2* zKDnEQfDl*LZr3jW&*S72nt(E)A~&83iyTA+p2sXtr|ht4l?EC6$u5lEpZdQh!zzHA z%!|WbM})M_lATgO8Js6@nybinjwX;YHEHrD2=&*2KaMNBSVS4}y&BbnAV7gLRjw2( z`iRsYA6d|(W^u&wXaY~iq!>2nWvd^5h?)FsF!Z0J;A!QbJ!x0s{VX49&j11amL{>d zIYX9yH?2@K`j_G9roD7|<1xhJ&Kp8zyWeSla^i}G#p1O{i6`v>7=!-4D%fMBx z*9?j|-dE*;U!6iVVYV&+KF*ynD z2kfoGzO_ThwRLuJZ3E9NEq`byRfZOJJ3`uYD*E#h;&A-m#0?8+P_Stj<4&1ytQrrL=*C&dev8cKmJ12ME&wL*8vHd`)+d7 zITBvC9bi)@87ykE);N6pe4iSsD>=U`xAxg)LtXyiKC~!7vj@O2q6ej1IDscB>`<#; zlcCP!e_|O4&27)H&%6+>p&Y9wuM>orA9vsj`aksg;uQ@U{#(G2)~StMzeJZ{v-gIG z39*0*`sc?X?Ew9T2NTZeSWH7m$%w;$FJK5AE)$grT53E9B*|W5fV-YP`hXTMz=DL& zW%0~xC%9lfrp54zrFoIJxux-k`{S36JxDb0>&WL^_%A(PDgM;p&Qwtj15*sU`ntALwFn|to`S}z1ErawXHgS_V8o>fS^KUcF(6Vl z714K21%?zN?`R3L@*CZdc_W5RvN`W@gQ4IzurOv4_4C&x8#u0$2096PmNVlR>Iu*Q zQwV(vJ~0g$OMQlTdSr$aDRuzYBhv4tHymx$tg>JB06*e-fnW!F(o5E+ek#Rz4=T~8 z=uT$+c$pnT0S^IC!|{cQl9G~dn{7Q>(hLKC6iDKfKOxBB2P=%oe-*`5R454Ypw6ud zKkjY>rPHEZwc=*-_96CxRQ~|JWC>F*1p@_-%Bn~lqnQ}IH~X3W!8D6%3BUu8bO>wc za7)10hbRZM3%L(uk0dqXLSU0HIMc`#DUkmFY~}?0IEyDRNSB2@Kl3Ty(H+Ek0J$ZF8@ZWDeOibs>~J)`2>yVed*rvHOI& zWvVZ^k=6^G4m_Cdh6m|DUL_!- z`VbB=>rsWY!6(TpNn^FR5FD5_WT3(#iSVnMp|E&<~U#G;t=~TA6dYV3Ak3lS%{7c&q0E|0@F6F51$~G znHe}-rV#Z108-eMA8UkiK!g#IthoiqH82Q2l?EJ0KkouM{cw~y6Ei{5#_?dM=vMSm zg)!flVP`%R=|}){{K7*{)=nmNybxT(@He%BnMjB1tD!9(lR@#G20BKIa!c|B=l;@3 z8+JO`DRCAD#iK3As0>x%BQBsw4<z%PuC2mmx=n%`WKHp<%t1T*{nGMa}Gm*;sQ!&jwFR{3QZ$@WF-!BluB@4TM7h!#FHHdh}tdaCau32;E9%m+87+P*KaybK&B(oU= z*(G5YBd_@r7P<+xZ0u`(i7%a6a9h~AL=bKb0K-Nk2P_`4xc;>1I)ug;IMAu zIfDeRw|+&5LAf9iAvMRJ_E7$RX0Be^SHZ=K9sqy!0T`RWR9<@QR(olnu$2KOagQ%4F-N#}!>swjUqD4Q$q6JX{9mS^RD1+npqJ>zKB#jz*?H;}+ID8N307zg) zEmkD{N{s!T=-1*;Ww`1NhN4#klt}@Uz}z2^g5XOB20RZhm8>ZmkIOj1m>ECE&!w~o zxepMcB3T%K@mkP)aG?IyAozdhA6+HZKZoCrS^EC~LB(bWfk1rg{GFJ{Km5NXTy08v z$0{OR{{YIGVol6A9P$AWDbW!FvCAE#i5!jsSRW{lg8+XMA3+%62zCLvg@0-e-2KrJ zlGK+s7*IkA=6Ng-Vk`~4S^og25U@96Bthm5RV;ujEcp4?uu&F6^Uj-EthKol;V!f& zNmBt1RerUDT&QI{$&$G7IO70iUXf*xYpo(HexzTmH2(nAR9I{zra1}?bm2aRSnlSi$ES2~a}qxBn3o-bL4R9`ZJrV|)mRr0h*EqhP6Hs3OW0G|&~yTbWO zHlZyzx7P8S%^N~fO}!;f&q;(N)o5f7k9f9zf$yiNAWdQ{{S{WtBARZ2Wcr% zruj1I*LM$0)9U_HJ6G1gQ+(e1`FfyhW=OR3f2ioYEh?cD%m-@A?9hPQe5YDQpfev~ zY?j*FNy;mxcgU^-%{gw{HA%sOVN5ex_XFjEa;F)nSb?#NXI8RkA&( z$FPw}^W^^kAbgLB0_4aGACOk*DS~wfR2WEXGVJB9fE?@8>77Y7ENgarCc(EfuUzPO z;3((h_-mLZ@8*1JS6UjbBmC!e9r7)`CNvARvim$Kl0ZGcrnGoSt}s4ME!XC`E&@HMgZeN?xf$k#lA1DK#NP zsvw+#boc zq8dJZCDj_xFEG3HA6BSNnFXH2zp0vPB%j#^3$yd@j1uJ+QIwm$X|9)O*^7q;e9Khc z+{`7#e=drQW!!%k{NLB(#K$8i$+cFlg&oTaW%-tp;mYV0gYFP;HR{}HzQjjW)g&LV_RH_GY<*)0y zlbFwvsG=xL&6SV}D-3`77jmDr(J8{PPx&$YpFroFVtB(}wv|Z!=7PqHVxfxrB|8hN zQa~He zkJrl#v;m;~R|jC5_9}j^)_n_>(8~~~3dlo;(gsq&@DarN(MXsiKmuJoP9-(G+T9Mg zTq^!}fNQl*p~bKa1-~ZvZoW|lZ2N^jsDBQuKJ!B`CG&rYH!T9Yi7#uSt0P#{qX+E1 zKXd9o+yMoRuf_r~NPLN7;(kS=4uCy^NS2g+IKjB-37b<3BnsdVl3C4sfU=HhQDIpu z(hDitqc5@zTR+*PLIbHvvPI7s2V~@DEC?T&t!U;f>*Nv@VqI!a5(LbV?i>?%u-31` zkeU)0{y|?^og%_eejXONm_Qymd5ushWVTV9iR;$jBy%izjcJnq02BN0HP1k99}{_z(1iHrMMk=H1*>CEGwb?;V_Lapc7VaR*@Iqr%MGtxF>}b>r=?V_#rK}t2k4=zsl+2DM8OK;}fmiS|&UWRDO8& zvB@&5%*9j-O_6cQet00n7%(m-Jf8%Ep49MZJ6gKdTnIXuE6#+7s~uJPygA^q2Bbwg z#|>cg250x-{JZ1TPf?mlARjQ5tNQ|t1rN)r+R;6$9Ilyiy7j_iQkiqMvdXaT56&Nu zYOP%kz>tFXx_T<9nK8uW^9@_1aq79a=J^u7rg%TBv+_+-jC(2!6M1|`LAPN>}7Hs-C=gGqpUFwh%@P)|dWOP7)ZqN8Y41Rp@hefWjR_iP^1 zfmqr)CICNQ?4_F-b@6w4r-9BY+iIIgv{c>Azb4k}lpvl&jmj&CDcebpHr4HD+7ZC= zpAY%YZ32+hmr<*T#Z-0=*t!{#^)b>QPN;j)_ZwE<7MjyX<;X?M4sFI7CE-K0Zxp! zah4NuIroD@phk2!x( zwnar{hX^-m^9)V3HsgDbZur0CdG=}A<>xQPrv#C=XJ3%dfS?DL7i=-H$Kl(6JYTtY zt`1i@=c#R}rm!&bea7cd#WG#5XO{k@?p2dHHS=Jz^ZmspEUP`?vS-J(Z?^OJ>l;MB zC$~_9%^u?@pZ-Msvl30U$~l>sXFpqT@C1DS0BQ#O%-M|p0QD!Sf}6D`flul;#$KuH7^>crzU0@cZovr<1`H1D9?XutD{>Kcy{YzV2qWp&MmSXljBeuoEdKiV%&10?krW4_DD8gKhjoe zPPztGosY^{RPCO65Q4LF@>L*E?~xJBKg;%7^^zgjc7~7j9pgZ^YHV=se^hf)Y9Q zo1N9P^Oiyn4IeA_0Y63J*|;tuUwrku+>J&#PeZe@C1G4B6K*KQvX)apV3>*&W>^7f z)$f%h>ko^gX&0`uAMT3%YhFP}3ARm6t9M@mX|K(U+T|@14aU)U05h}<#(eH{PDl0_ zH_NR$@CuAn3aGtP6KhK(^TS?P5&BW;Ycn7ptSH&U$Vd;*gnWZ~?PFN#l<?9HCrv-^69!&x@yL{EmjnHyO)mKRNjyha>W;H zn}I&&kU7gHD6rG#=wQ|^Z$3LaZHw9O(_2ZZ_=c)w9i zP&g~KL{)yMJiSzE1I<^@HlN#8*Jsj5{ZOO*#VT^PU#j<1$vQ+8a-$s7{{qHy8kGetvggdA39xRo7kt z%h~pYb-Hvk%)=_zZdRt3EIF zA9vVUGf8=0>Pr2k7=r+H->ch3)yWRaykF|QyB6@9QnWVz0M+fRs{G_o(C^icmr%1! zDFYh6Qn#EMU}nE6`QOOv$#hoZRyRL4BqWn*0Q_6!%GEm$vZaZ``jx6`M7Z{{A$2F#`AMag>{`&n>V|eTr5$wiapN9X7g$P03K_$x6zS4 zWNJN^)7oKJszv;p*T!b{+`>K1^|&k*4DdJq04{cA=WEPYyWRdzJ=yqwCcUm`1x^n& zUnbf`Z?g`^myG>K`5hg>`-(YH^DmaE3J-gb?w!N_>)BZKuO>FU|sI@e^rIrAs{ zg<|UnVV`5UmM$qO@OWi!lPV4;i6zdub(D2hyi(2Hwt77ZT8UDRkxJ{O)yryJI7F_< zFKXhMtcyBV+T>No%D#WKtTl<#>+)VoWYd0j0-B5b2 zOOG+EgNSo#o8zd4yxK&dn47asrVUYJY=$PUo#Ga3)9UgpeBKg#jCQ<_#OK&yn>vNu zTr3_^s0iywL|~-<0CI1CsL_3G!*xF+da@<0+02x_*0RHDYR{e{pQe&+7>c3ID~B-iJna1bzK#5;=KH1-_p=VOZ^mf|3CrXR7FGnh4g_+*nmuMstg{{Rpi zwMc)S1Xg`UA=Tm4kit(eo+$mMDy91)N*e7oUu2*XB-D=9D2y9|^c`sRej*y}Ho9~L zt#CWdY$&2Cg3Mjr)`+GgaN~%Xy`jWl2sm?@LL$@EOn;(&`u5HZICgrK&z?h*t z&-ilX$qt5mhI1$wVPRfdUn~gZDiaKogjIHl4yz8BxT{L7D}9a=dag#|sIotM2M3ki zZvDezYGaD6MQxSO{ySw|aImJj-1MmEGjcnK)Oy?k`6P=og8fBW)Q)^i)A#=X)O>x1 zg(_BBZXW$u)^Meyf_}v#nh|{&Z^ z`&el=XRlxoeoFZM#UvfdwBA6*PIMES?RcDkA8GOs`Hum1s~+A7J(9_qpaTah>sul5 zKE7CHxm~oWT+Vw#@n{-zJyYu1@P2DNVfR%l0bbMCGT|3%N|2+KA=cb}yQ0dn zH8Uk9*JEfj@{`Atp@!tv`ai^V$JpMPKc*&iERwPg4#VgIBsYUn$#^s<6Ez;2J1K-_ zYmhW*u{0m71$9coJcl5YWX7H>mN zAOw`_W2+{e996c?zZ|j(={4E}W11Q!UkmvWwsInCfHPvpk+Q6tX}Y*|t-K-yDKP4G zU950{6R3k!1X4ngJmr7>%L=Dz{m24dCzJ-qR`nk$g~U-*%GqjCD&#Rfr_b%UzS*bB zkVT5J=OK@tT9eJ=OA)eeaHq5+4PLozbquTqna(CkzEen}8L@Gosc;q=$zM|h`I(oi zgt(2{GBsVa&ZL8&@WYC&tsl}F^~|H3@|p*|^1_T=06KM77l`$R&ITtMh;1Z5H{=`D~RL(6_a&<#R${{Us0 zJ-l}eS?zUumaw_hN-U1;yk2JPhef+3oe!)!Syspxq|NkY7dF*7Tv#EM8Yw0$JUSKw6amO&uFoXfdjv_Drq-PmjOQ*bcm{X(g`(_&3569l;#X~woj98^&pUF1I^zmhQHi{GSU^ry4tAP zh7*ZZe44SB9<$iphUe#hCJZ zGR_!Vzf_zr+*RE|bE3Q^@yzAD{_+6O)=#JD$v`4gWkAOaU; zygcBLJ<9GRC3CP_#PA1Ju6HP1Mp#iCE=rxppxE>^je2$;k|(N%H0A~5&4_IIwT;WX z_&?9w6OXt<=+A0)1{syf_41937@yq0byO@aMo|m#t}WuZhojj#>P@^r0qFC0cq=_G z2dHiN{?||P3W#Fq4d=<%y1uQ9gTUfyRBCN4FaQbq3o87>E`hHzI>()PkTOcg=4{nV zQX;~ByQ0N%L$Z@^EryXE!4pa=& zy9x*;c|84UxVIVAy#>yoGda+lkyM_K7?UT7q(OrtpCLJGBNYTLxTSqFt~v8Att=t! z=I-O~p`sr|b@8k2nZbY+YRibVAmPTVT1VgO_8a1y7Jb_OLoAC7w+<2ER=H(I4`TwS zMBrk$${bLXa1mga86r=hbLI@ReM(!*_6=AxjU8!? zaHXz(nmY2q;u#g_06m;vj%IqfMFtDtC+o9B^>&yi$T}*J%&HSBU=4UB$*eG>-L#(y zz)nCX?$^v!QGuM|S8{ydx+~8TRH#syGF!35^eYCX>y)LbsYr93EIc$D)GZ1SAL(#* zlO$FQLDTu!I*hUHC`T1fI2)a6dYsJ_KgMVrcmTr4=3X34CquhTzqOBGBfo%=XE`~^ z+>eVWwsfodzo{oy%0TN@78aNyLTC{A*M~4bsK;r&tz7c5UebKh>(?V5?5#3h5K7V? zwkk*JHagmq`#YCONYAimA@*OY%(4qW1IYKMK12py9zSe#Fj@I3b~P$?T$~#lnL>}? z)PBMvk=ZFyp+!eLnx`Z<;+C^opQ$O!NCJ5wO6PT0YYmZ3cswblk=E)_utrCCd<~Fm zWk@Gm3UDdj$$fYX_#0joHDsoFik8~NV4tx)Xu10V>g03nHyYO(dP%3M+FiI1g3s** z=6POA00G2@sYJ?It?7N<)ce}gJR512~=X< z6oo~^T}V_IUdXc7CUcodgJtv{)(3&HAPp=T^2S+4MLfQWuUvTn2p^SHxh2X{0t5O^ zFxLUz&OqAEad7(F2f#`PKV&7JKU655Enca~Qq8)p`>Lw8HCP!g`4`9SWb&>;U|C+a ziqdOq5SA}n%ais7HEHG94PaSzFcM}#$fl@)&NHlg+P*DVsCIe}_Qn?)mXyZ9|@?s($Qam`PAD6ZvdalXp=T%PMlR1P&H%AwDYw7jRY- zWXZ}>yjIuMpaA6@25&`KDOw2;uM&j@l!&N*ODowoHlR2JPhw09n^XnzXU{*!Z+3b4 zE<(IZTyz>+gNEz~ekt=_hEB2xsP_D1m7ZK8UFEoOy!`;7r&vW+z96Z}R{(uLuuMh6 zz+S|~ugQCv2e>l}5TR+;qMgV0{j8={u6anr%#ItKE-qkxO0J8Q)DG8&EPeq)eYF!} zm)bB45=7{g6XJ3Z>#Mey;mO+-+~x+f_N4*Y*Xz*(GI)6U3n2&=h@Bf#q)ghM1e1$H;1Rcq|zP zRhh9j!Jwf^$U?WjXI<35Wo_=Jqrn4=FtMHK(frIPvkk3 zaAK6C@W~*Q>R+R;C1jYH!NWhRmzge7Fdjrhi)+?k$tqSy`Wu1A69T|QGMVwigFBsZ zhE(6MQYdvyYY2k}i7=It9%(Nt)~+Rt`r5|;;D%Nx+$PU0leNK7)z(?7k~nK<>nGQC zy=8#Zt%RlR8s5mZ8({Xl2c_%l|Ry~PKg2Zd);{o9s;l+!ElziBD#KIl^j2~?PRX>hB~%I zROw2fs}3Aoy{$*yhkDYv=75Ar4_4zvJRvG2-i_WqRw{>DO=5i2BVJYZJDy81LY7rp z&#f$sIOBtOf*(Yg>2gSboZ1$ypRNn4wJoe1tbRy` zDSN3jh$)hRG1OOYKM|_MW|RWD!o6$t_YxKvX|W8r2`r=NHL{|4>WtNfg)I42rZl5M z+&B~Z)${TO$)v&|$2lxK~ z`6Z)ue3y+{RWSfjg@PrE)(nxf#OHdLK)yuS&V0F6xmisM%K5f>OPD@%>Y4P8c=Hbm zjOkAW22uTvbLYUDEn7p@S^14+NvJ7chZ&dOAz6SZ-Yb^a!C?HC6H4CuFQo`DR_>5y~2rocTV>L};pI z6N$!}Cn8ha83J9mbvPS?7b7#;)=@hI?b@SRpX}Ww{x8>Z^7?M+6AUz}OHv3`rIjuq zIsv6QvgM%GCMNt&UC(lb)N88Ph*BB<0Kip960k?p;4bQ?_FFD`rOt>S_W8*C#E8$Z zYoK`IOtthW6k`Fhws~g^ne(GFjnbK>jHuD7!Qe1FN6%wj4TgudGxSv`Po>Myx=o5XtuuZZ>HZ$fYDD z_>91}F~^n=%QQ(cNV~+q`iSw%iKFAeL10-}{o~_CmNe;EbxKym@3rzUm*mk90M|cA zy`!|04mRV3S0Oku#aMGv>}&#lkq(fR=3-Kpn@v5Vr>4qGJd0b;38V}OG)X{$O<&4& z(PoE&oB0NQEv{=ns=kqdk?OWGr969fvPv?lwTPQgziG-y0rJ^tAq+XV$Z=k$A9J|!thzz&{-nA}tWwD2$K#U!04R*85++@MLy1ie z3{E7sUUdf|m6&qNxPXDFF6T_?Nc;=Eq=~ts$0bTKujDf>F)*qLy* zUj+w(DU#3@Bn^rspRq@;zM*CU)fCuEp21#z`m>#qm%>Ky86e&!vN~;0jkjeS)?)MvxyF;z~kgtB~R8nhV%h?@!V8Xa<_?Ez0V zYINqos}TsLdfi|9&#V(6Th*Mo(JTRsggGMulJYDEaQgyy^9Qt*bP4NNWu0mpLTs#> zlbq<-T0jPAOe=A%xurl}bmL))f}N40%xS2=b3K8ZVAWT%PgPqrO;XVgkW z`RfxKMv_DYPohq8{cx^CB$6Om7HpSm67)!Ytj%GH0U#!N)NVG)0h&b^Visv@qDv}I zlq4tZL7J&IqGe?IzwPvp=#*z^OxpC%^~3T@2sE?1D(#n%*DC5@NhGI(U&ek+r2Z{V zR1oY#Xs+cDfx{!DEaZ(oX||#EWn7CC?30jX9ZFkOT!u`P64F0D7b4{NqGTz|n>o(h z3H1OU%0TM)=GJVG2>f+6NQ9Yd!=&@BCn#o2~!IHKUWWC>Q!u-+KKvrhKL8S2@(c0q9 zRQ;6pwE;VG7M=5j54XC#3V20AX{BRP57svd*FZl;z}elTuwZ8m(J zN{~s3_@e-%DSlNY)JlDTzgq=3-d~^sL;Xp;(xzggi!~RZiBai8pXHUSNB~sp# zXa^U;KmKuDIUMVB4$RZc*Bz{`N zgLhHkJt}Kw`Tqdz)m^H{iqBx}JneDQRbW0vGZ2)i%Kn$$x$-%AD307Yu}_rNu6VcD zV115xpgpzDn@^Pitxz!3qA*r8(sFklg-7I4qh0_$sprMZD9&c_AisrNafAWYcx*Rbb@Wx!;}R%YVuvu^G+fl{gcWly!17Bz?5O_tUGmOyF0T*>HpaR=!q zZYZU#M5V5wabUHe9i)V)a7M57p^0_FG{P8CXv(EOwyZ{{PE=LgAvo=2tuNP+f%1zu zZ&FHTIGs}gg&JzeiS&%trB#D`*Klm@dJE{_q2`C=OZWy#;>L2N5mgqtcdMA^kaa|` zq?|^o@jY*KDg1^^7=>90zqOxafuuGJ$BIkhrP)JrCePkZ*>N`k8WNMsQ(xNKooR~P zUeSpmWi6s3Um?J1n^@yEoiOJxOC?E|SRQV^UAUZrWKIbfw+2g;5noZF@Nco4I|Ohq z8Hr9^0o}Cqc2o3K_8v(s(BOwvL7dk*{{Xb)TG=alHphX+e-S;*0%V%f=J_SsGFgDm z>6QDAi6MgqxyI{-{{Z#Meq9ue%0b+KX!TUQDHNFmP-cwq!F?-Fq}Db{If3-9855b( zN5{{Sjj^m2dmeIV;=v+${h<*UKML z)NUW4Gr@>Gu>un!@N@t*q6K@&uRp+6>%PkZUEhc4{RlZ~5l`U9uc$BpSTtO*&j3jE ze68v9TKBZjtgSWdYV`WK$~GK&}OUVh1%XPR85RZI#cDetN(8py@2@~z|z#Oo4fDVJpG zf^Le{$PMzbqHRekYNFUNNxwW2w;{LCr3is$7$N|Ds=#?t7bgN#>%fzxt22^0gI?h~ zo7$ri2SKmEIM0;wpSF~ok_aV<$=W+qtDrHh!mzA^M2lq(6Gc-vk}Yz*Y)JZ=Tx7eJ zRF1v|v_(70#MVvoJCszDGD>iz?O^~_2CNf>;!z)SW!AOD@!6DGq^=>VdS!e{J z-xEUXtDpxccD7u}u8C`}CJe$WVUbb9@640yb{qtpTBlCu7-o);o>Ter9CV#(b2Yi*Uj=F9xMb=jSjsV9;nI+G_!5rVRtVwQIWd}4kc+?lkyff-zhl@Crj zWqt+xl8!@d>@1pC?^weV$aA5_>RUj-=2wMR`KL{z3lz&}Bl5i;Is%b1z=o~K#|H5t z#+ejka>+O)+L_`2>72M(mm2xxh!vaQC4W@>+X;k8pdOGBPRh}?h0>s3o`ke|_@`@@ z6E?c(UescKP5sguzm@)eCl3{Wcp*eXB0`1Pr4mA2b z9x^0J4lGMem8mSk;grRU@bxSzs0=wkP17Gf{&>Qm*)Y}p;2@J_Rp2`s2pF{>9YDn% zLz?F^b`)*ISWOsdJCeg1sEeN9ADH!pB+IisBnSM{W*f&TzulV}*?Rr4ZvhZ;X_BQU@p2y|8K*7X+? zblGB@3#B+Ai{iT1bz72s2@Gc=wJfI0IQ%L_Pk_@1`mtrm&- zKh*_7LA*q#FlThiTfD0-9Jd4l4fUQ-8^hUfIWiDdr>Fd%-9cFY0P|IC41}A8aa(Y1 zhFz5R(K)D#%AuBoG!CFh)g%7FD}-4lw_Lqs?xg@CD;Nd>Bape>s z&UNF5AIp31PlA9Ckn49eWIw;`v#i>M%q%tCWwDUkpIezT#5fRu*Ef@0jXOX01P?DL z*1mi;l$&XZn^W0qns*Q^ec0{0D0GAI?KG>O zn7g+GoQVpjp#XG@ytvwmOcMQ7;r)_T{x#X7Upl$OB2BuE$wb5K<>@376F)ZGLG;>XZWQZT z3a6HjN$heq$in6867830hXo0*uRdZ|%3~RcEzc_|kSQtEGN5+LSzPW7hXJL*uX$kI zk)iZfS!p;31~;<-IjvYxkp>3DQYknmdY)>3SRCvB03c~_ z{u?N5Cz3(lvqKanu1;1Kq3N)1-He+M<9XS9MD#Vg~JKe1V5gT%K8V^}7j`VWAIt|ahj zfiaG1+xZX#lF-(7D7hwQrOGvxK_@h#AZ|f&LLlrt0QRF|CZ^ta?w240D$X%1;8>I~nv;IZ@+vq6yIW8N zRI{{(L|f|Az)DR+Q|Dyy`n^L}MN*Q_uZ*VoTzq6mjo&83y}YMwZk2U5u1;%Gr=qf~ zMb8(s2V|v>0p_apb;~@xl^r1|F68DO-&Ao)D{YSGHuM7 zN}wj@N8qHRYqi3dk_9Q<`zHn&E(9tjYIZU_{>#sfX4>_0l%T-zhnAv%2-sj)$6@7#|%+-!z{xOhVG6g1o)6N@W zsQ42@7O&OlM6K<`71x29n!(|=haJJ|DJ&#KT(2ia@9~*^vQ*X_xiOz>C}AyKN?(^+ z^I_y<>_6Q0B`qGLpr0x$L-^;8RlbN(li)KJyX9^qQQ0W+MU_`8nx_8%XaijC(1?9_ zU`E4Sr4jWCAw)4y2SD_>;4J2zOY;}t-b*%%0_yJ!DG&*OoHEXYl}hC z>y?|A6ILzvrTFe~kahKk9qhP-K9NRRm~>gKKW$b-;ngB{7u4V$SGABUHP=D;s>Mf# z4%S@En6JW4bnB%j6dBmsik{?hri$NQ0~l=F8K%DK5y&zkiOf2c%^++%0>ED|jlgYJ~`VXA?(R=>@ot6c! zL-pX>ENQq{gatohC65_2g~cf^!WLi{NcIdTV=5yMl5t>TWd8ta6tp>oY-JBKOoouo zrS)Kq)tNNYd`dQ%^8ni>7pUBLc)kQy?`D^ZJbN}f2Tn|X^;?sb)65MLuUnmsu_rM9 z04FGI6bFK62EsEBBef3Pg<)Jl!vex6sEem5s*`JJs) zF!`(S`HLQ}itVJVe3GCTIzo)B4|c73D8s|-gK)Yt7x`a}8&H=e#E6?Mhw6fB`u6>) zXy(=^nA6U=iGQfO9AXU+&Lzvc&8njSoTnzWE7+vHEb{nNwAc9rR(AV>dr{k%-f&9#Mv!n+G?Me>zSUh1_1%v zZCdbutdlVWS4Ib-jP}cV@?*~j%2n!312Rpb+%H(CmR&z;S+0XsLF}1m6p}d`-LGMp zp*l%=kfSpKDZ?EN0X9+ME41CgKpbC;Y%1l!tWq|{rXp8se!Rs3tP6Op$xTrXWoNaN zH#-+78ZU2U7wnLvV#NWNrt;nPoXPdoS8!#sX-uh~8_<#JL%EP)^HAopWg6Vfs8&SD zmD+?N)X3-IN9SW2z)NfHAWp>5axAF@JK^?&um>q=;^VYIhGL{n*;1i32NR)^ER&kn zoVMUVAw7GKB(7BLvHFV= z&ErFxNz~Te8mAfwUZ9}$HNXdoXyV+G!)D9jq;T84_-L4=_dhcij z&FpG5(}O;oM!`h!BVtD9ACBQuYJA*7z&l1#D$ff~tFjstO_^mdRKmm6nLh>2xUu~+ zlAA0yR`~>!GZQ2Q3`1n{CZ5U5GnFA*l|-FeMz>VfdY06zvG(@A~+oCk9CH*i3AG{dhtTH&jFUL)oE0Sys1ZHL#JmYgDvu6{x!@5R zXkco!>{1?CD_{fNNV(+RNI_MgiHVdh!TzrUE4X&5%JI$`(&nc2lr8Oa3G6 zNJ^kZL;=^aHWApR5LZ$~6i}BUF{C8eE#BNjMhTx<60uDIp4(BdKyt4v8mcV3KqUZc5T7!g?*QDwCE$ zqa;)Z`JrPxqbiC*KU0*5wpkbb(vEW%?RKo`{j?ISvOT*(|#nY3Y`=b6kL zWWk1v6<(*@rV?BjbdEfDimO%*GL%z3E5HeNPm(TO+3Ue@@ZN##ZchvcWllU&)d&vs zAF@d(1Ee#u#HZBR@WRojB8o8ODNP1S-T_~6&xvIa6p!R6a};7}K1F9|NH>5D3EPRC zO{G0eDx$j+_o=HZyRm}e(J=M@0Ln|5-HGbH`PhwWFqimg{lAwy{ZNTy_7vbUGnCSn z5^JDYeZPn*Rl|GEv!m8cNeU9CApZP4YX01ApYi>>9fi|D%rAm5 z%WxYZH9B@y^a6=kbK;=!5n_cI=Vb&-#o24DwLcr#Z1xX++i2za9=BVns~xf#o$}J# zgw;o9fvt6?S5)R6Y2?KG5Xbk;mu%&Hrg8zrx}vCdH&PVw2%hU!rsP2Y{dR7UVcG1- zO~n|8f@YEU^EEf?n*_yxK5r8U6mwDtB|eaD2OTKUqID=yhufLLS``D*Ce zPelib@L;QOs0oV1-)BMV5ii`Q)mlA=D;Wb7Y>>@Vzuf@7$=uDF4+G6~`VTlL?Q6cX ztH`E6O&K9v1`_jzd;uC9tPnZ4KQOu651hEtX0rvTDUph!62a{YUhi6jz9!|uYRQGJ z$ZUd5Wld<3GSHKvu`)yMy0Sa?b95`VQ3FsHlg4uWBEK_2JjtqQs*F&Pa?=9trBl6wnlvH0RX+p75MC1aZ2{53VL-K_&}fei-s*z)|}R`X`nNP*xhl2+wO7*vAV zU%8d$rD~hS7SIr?&6;@7ot8q<13o@S?(;$=<~5Gr#!)v6lc!n0_BW)dWq! z1PELr?vUaNcS^|XcQdyVY^OeaRtVOvQERboR%~+{RDgR99xrO}Lu2Hh9r4|9u+EZe zTj(C8?l^fpNz9{%A12F1yAn1@kfSxJn|NufzJw$Z#@>dyoPYzxv8Oeg9J2W zhN0fS!3aIW@Q)=tuJ)m?SDPz-M(nB%CUGi#$ag2J4HRs4DPVA9JuxcRhc5zXV zxwtMm)L!h7C0zpjb;XjRn?Y*flF4+L6#oFWzh}p^(v-)i)`ApBl|5IlU0aHbf`P7m zqd+O#8e+B+sB^6r&5!d}LDU$Z%SS(4oB^LEL;+Bl2hc9Om2;e7*gaAvQc2;BGU>suMf=x<v_8XDCV)qAE07`aQR7zlo86DQkB9sCiy&DzkdA&2`l)q)2gXt5Ucg9Dx3r&k0M|$tV+LN07@H))#Uz zJ{d(g(bf4;*_>b|z_h4ZZ8e3G5VhAOj$Al87QYfxgM~bYwk*0DDA*)>4`Ro;Z9^0Z z1a?pTX7UWfBlW+xldUsTl7mkdm*w&YtoOF`mRsbks;r8LRDnoozd3`bYxhuC5Kh3r z7qq&7Q-Y-{$?z4jic-=gJ7ngVsm3@AS3Ml?=8{JgW?#TEMx@F!u5(37T`zMg%|IoA z1%uC@chIJV`$@uyujDdXmm$u@S)kYUViII?$edtKmmf+%wg&S*>0Z|j**QYSKK_+Y2=XJ zD+WvWDzG)5j+84zn8~fw*M0iUlrvK%8{-xiA6UY$`IJ6QoIkruO}kG-659 zF`2ZP3;yaeE^3R1)d2RGnBUu$s$GZMLG0K*)RIP))9~$`+&#^LljPbMbSQR1lU-g-q+1fD*Z zr8+Rv;p4VH^?f&}*+itqwm-&my6gg#OF)4Do0FEMsvl`G zna?#K{(xlm00f#~XOje{gRleBB3bq97X{0ovr4%D0wydZ@Z8|)^~^u4@FKOKme(1M zNi27&A0wxua_G3_ogf zp@m6GT)n#6f;A-lf79GKvbBNRz#ft??3c+@`m^1ipd7v7jH9b0ua#62=qt^dhAg#q z?KQ>{Oaa`sQBjn;3Bvg@jaMW0v?`hslk_jpRiEEg(O@%?o9=|~f4pIXn%!cU+*Y9b7q+mj}nFoO&vdvQetl`TQo zPorpUP=ivhEY)VXfu$f}->@yLCYU`Q5Yai#H0%Ac{kC^uLFlCXL~EUVtgKX5?zJdS zPOqEYzWG&^kad|d%C_6o$Q{h-@|}g%s8r` z7?-74Nhzg0M53Sp%WIO-%^z>n)KBVD^9@FHQ1-Q{7_S0SLH-j^FH!YTd7TlQE9*j@+7kv!)b zq{)i*$!;iVT5c9UPbLY|8wioS(hTjwwqz8uc|m~i`!#BJlIBA8=TXs|a-1B#k3G66 zStTdV(d=$skRbD=l5^=fd^viS9?Q6hE~jVc==D6DE4JNa1~Yx_7WwG9M>!5AIcKsW zOgSmv7RPOq%3;EMmsKioA+nQ&4;+?85C!#DqT0G>Qy=xEb^4QZn3tB~t7nrFNFblu zjSl-IH2lQ$CUZJ@tu!9ipyf%-nK14EU2wE9mHPw&%D@QzE5+&uxXHQFBVNfe1P-G6 zZZs&SpgFv#2xxPtBOsOADbsn^l!#(bT?C-#JzkXR5PCwIZ`PmG_(*-VFx3R5V?;CO zu7kBM3I7168(dXO=2EzM*u72!mSK<#!EFGQAJczrYf%1^40-#k)8JGDUCfHNU|oFx z0K{M_lmG?gp1PLNNbsRr*D4>kxvFo-HO|!hlV;SGSWD4Mu*~kdf-fqIOg~{ZwMXGk zwV~qk5M2174Mgj&);}kEol&dodrzQTP8OCtH>cP?u3lrUt7(NGWO+_jDeo*5pnpKX zv|OdsV}nybNDY7)10N25XgQLzlfVG_;E=$1j+(fuo_t+ait0B@%&^3o_?doYNp!7V zd3Mp9Yt2kfGs3q!VE0l2WN}*b%00^D7{iH)cn{LMD@~;57C=~cQHHyt@^l~mIEc@{ z20IGJEOM2L9GYBzn;h$>`wGT?5z0^yGw$(bCVZt814>s>o^*Yv@U}UH-d}_goVck; zS2cd>;7AVv^Qx-QpKi2+Otr+|XK?pVwSwHWe6sH+e4`fCQx5^l&bAH)b842F44UCF z!k7wlXK%c96DVlI~jHb@*f zqYYcREAd`sCE#(*$$4^FA*x!XT~gP;6rwT;D*H#Lk@cC0U6a*(yifhKUEOBrV+EON&wX0SQgny9E+dyR5U16Zr_)9q_U zR2YazWmNlFD5xZG(I#ouQ1vTbPbO=PEBD;zDtw!PVz8=jF9BNzz8!5T2stTLKC+HN)iwN$glpO$husJk(8r?AV4VE9D<0; zwsXmodvcZ^B58n))Gi#GTAth@d3Fl|Dc*%uvIMwLLyumz8$qfUA4}s!jnCvloM+cr zg6I!E57r+XQVcM!8LG~`leHvyb1(g|YVHTH;kKn(a^MYt^BdgN&mI&@CokJEceYre zTI=L+q1B5)Y=JLJNiWZvi)3;C0EjaU7(BXwfq6H1p^){F0ToFHZFe{tfd-T53_RI8 zu~~6m*DcvrghEw#@W#O^Q#I`1y#}{l_T-hwdgYcP2{?z0UR1sT$2qx{wyxmpP~juc zB2P4)GhRQ%QLV);fzEoC*L61(GJG0vtbn78w2O-XbnPd6@$3wPu5>eNLyJ8mGqd7? z0X^%i$H`J-l7+$u1)B3(R&ObX4GZGk-Nv?cqnQ||KO+lSYG6?v4Ay+3X3SGt^VGuKWc?(mVCXbU z*P%y~%k23a6^pU>nd48UJ8BNk;1Y$(0iWc2sliSN7#vGEL1KAPDEl7`l_rV%l-!FP zmYK|e>hlat+UlMv<^ipBvQX)Zl>wTD1vt!ojg^ksn^GAhn(^(k`^n1ky^;^uMU$Ad z^W;#c!*AJYcOKX%jlA1!>s3il1$k~!)_vkYa_gWs^PW>#e}ouMbfwkmkaO$*08Ngo zwekoUIQ80`B?WVv&P<&2GqFIZzH2=i&_1^ zSTyeVWYUOxK^q(@GweYm`&chFlZe!W&sZt=b_XCHsZgX_jt7YkJW!LxCoM`g$!1R^ z=_UC3`c*$L&e1Jd^vbq7Yo=jcnq4UyWLc70sCXr`I)I~tAbw42PEpbTB|Eh||+4<(kQ zn}eUwW4PAYiQVV=rjDD^YDkK;zWNdvK6z7-b67_};{+Ppn}KyiS@MOFr&B~w4Y!dQ zxoOJIef<}817}~eDmgNTe^UdR+K=nzSws6n5%xK#K7`BJ{{U8EpfYzn2!S)1^LGLSnn<#m@yQ9J@9->S7msPioG6RT z9u<^`2j*-Xha+!~JhvP_k^nWzzrb>0`*FiG0k6fnf&^u<53%ec*bjGF+EtnI9mh7k zs~C2-J;v1O5T6dS+VO5{`e-Z=6a?J4!7lNzw8DXBt=HbS?Dh2 zunF74O4PMZ1~{s^pd*$=;gUbvLyq|{Cx`&>mjNUdYnUM|K~S&|R;o$tC!?Z zD;$LPV4NSqr`I7h9Vz=@hqXl}p-F;pxKlaE@>8gyC}fqz-2Qs)eG`Y)M;ubi=SrGl zqaBW6AW%|iFE!JmK;~oir=zsR9oRY9pq7Qm>8r|JpO9{}nWIM^{wL1zDOBNb;%*GO zs>xRqD8d3H0@Z|pzdqk1p}EVLWjhtcUM;}Z{{U);aG$ohyfMfWoXLR-KahT{adC28 z((h>d0o5y!VF@I2mfSVVh4bXW&J31ZiBA!Q992O=4wH>S!3@Q)d9Y;4j_Dpr>Fog@ zKoL1AV!;amrH`xz7&S#)omhYMcp1-02jzlUiHBGI6`9FAdq{Y&GNUm9{2ahMamWcP zv4xT3{v?(#*g#)=vi1-1P01Enf-uPt@*MG5WAfop~fdp#=e#dp3-FU{8p+RD?Mzd zEzCMm5L#30h0KIUS@d2dfkq-gEm1$JC9B#6v~#Rvh0CXdkdrN`oY*~ zEBg-J%)0a_c1^|`M$b+U2WpzO1zW%TMI;6u;X(IX~sK{T#aVhI2O8M()^)m~U?OWsfpexFWmyQ*Md%zFBdkELLzNJ#-tQeguM!(+ zc$W>6y1!Q#sHo>-54N4@w=LQ=p zp;v(5Z!Uk5QGIopM}(RvwTlT<^As+GUk26$@rWjKB{rnaU_k@-9;Bkws*z|@d$Tx| z;IzFJC5du*n@={WJud*{6a0>cilk^D-7eNHCEB4mKC3sIoCFM(3BgE?d?DMIc5QJg zVf*nKt&&}aRoH0+E@@QiXTlXkFf<9MFyseNBk3}IHwk{>10}PG(Us8>WgZ`COj&m` z*(E@p2=+TeiOz7;=5*4puyl;pU@#PaQ};Pn0Gx@fOZH0q$6Luserm-^&*z+GdNK+i z9;M{~ZUB=fBEfT*@P)4+zPd0e{8TKr0u(LcY$ZJ*AFWB_r>;i4LlPQC?^>Huj5UT^ zU0q(l`o1Gq>!AMtFzpC&wl>r|_g2-G+CSkc&Yjz@xb9l zpCmCX22Hrfft(NtA0okLD$7JTkd3#fhVDe{8veuR0gK@E7y;mo{11r_ zCWU}5F5w|1?AP{YqsaIbbtKRK0L5e1F)}pgf+(N6y|UmGgG#OTaIB=O$u}e!Rxnb- zDLAn9iIoN_zlu+#E5iC)oRFcVYlwj`keukRB|!CkfY7?T8&|frD=EuCL;x7@!xVBC zeP_dz&n~Ch$SbcNuU1;}$zU78V-6mE+~loBpo`I(U~+QmvuT49M<7kh41ck{X{^v%F&oI-zEP5;!t}DII8V;DhFg$ zj}xv9)?rIEK*FhLpbc{fH_t-ZS_L=QB{Ez&Hok!+VGigZ1I7ULHy%{X8I}SJhD;ep zF-(gdMn7OFzp|PwiMDWRS}u4W>C)UZnWVk7N>$S z3%RADF7Am(Kln@+GUe9P%78LXQE-@aic)3_>k`95K0ef!;z7;1b2FYF{cvt>Tm1fi zTse{RGD(wp@;?)&*zB=!$U%m(Tf-ph9E_=LXZ{HD#B=_HW%uG_UT5ad$G~BpK!ILt zu(W}5p!_jK0H6tfIVy=+3^X(5Z%DGf*~^2T%BLlnfj4q;lxj?Yfi>ci%!EOZSI5I! zUac(8QjC`AFiho_PbF1a@FePMKrH~(nz6}8y`o*N&|LZXm9Gd>frfLzURx`zBSMdk zkK(s|CdN1v)@`3UePV7;6+&squ_N4C?P;lf_G}Ce-OS*(sSO9;;hG_A9%~eo1}IAd~?Eu|P|%iKj_9$l2_tLlTw{gdZN*ZFoNR64x{k zM}ruqUOdh3%?1KSK4;_@QT4IhNtGLYrah)dJxu#nT+=msvCo>a6NU<=8W-I)1KOIW zr3XtxD?P6562_z@UuCVUYgPpMdXmlR!-7Ne@hrixazq4MS}UI_Gge%yQVlTRAKR~$ zDnO9QhK1GS@+;~Po%Y4p+~b#$-=$L9!a;Qp_NZcW%J4xwy#aC4gKu)9$ z=TetiMnVCPBC8uQsoLCFdh zXg3n1bEm?oDR$RR;#DKm)a`RZE0DD66s?;X0+4_4J3c`K?Dx)~A*$ma}TyK2>Je=p0KYPHOkgQnU40LOmTB;%`&N5gt={_`^N zhk`X9q8#tdQlgIMG)r4lqTy+^oN{>|qa^(aybB3pWh9_eRd0}t(|J5_>l62PUQ zrskzHzJe;01-Kqy6*jQ~YaQoAH7%$nnGk$+n${iZxmlhHCY4#nrSD&t7K+bap5}V zfRPecwLIagC-wNZ8m&>`S*52?&c1FBppv3SOb6C`XxV46q~e)A1|_O~#j2jH=P7a6 z>J4=2^WBG2#k8r_u6&QItjbxJXQS}$_QJ*N_Edn|roZAKSQ+ih~5sc>^+bIG*2&(`1q+Ef=Trf}Z~`-8TAY(15kI+EfWdwFgmOTNlma-M$%TLp zWRVUv99hvt~kjyRCWThHc8&mkG3E{1kbAR z_8ju;-Vn|L@2*SPGEh+dW#%pZ=9`)+UaHYLSZ=K2yH#&Y(l z_sR*N8`wT7h)Bi$);O>HJ6k-j z;3k~l{91GMivIwL4RgBY5)Hz$4RsLE?`F~Bip{GZ$1L*+e`2tuBn9k1VMud9;&%T4 zB)s5qOIrc_T0f8=A(6TFkbZlHXj7IQW3IuOxgZ2iS;A=(1z<=RZO`JNBEA)Z{=z~9 zaAH`XU(gLup}x+nR~(Se}hIOh`v9uT!Kuph}Y=s7eR0#C*X89&HK z5CQ^hXy9Fir|{%h^KE-2d@Bk601WJqteyqH-w{*!H8b%)BD*4i42kk<(bxtJ5%G`1 zSJ#pNC-?hJ0uu4;Kqh#~c6PHKxO9Q}ekru_bnr<#IUE;AWJ~y<0j?Jtej`iB#3$h2 zCwDxH>6a;M-%-pT+8lk{s#@F62j!G(TKi>=zL>RL;_?79abWe@el0q)mi%{rimsp< z4kd2t#dVD^7jVnH`3yYYHmJ!}{H!Ped&51nXZNU-^(PCOO(D79+_ml+zCHzOYRQmI zcK-ldsMkdbQqdIAR^vJ7GJ0gjyICS;$s|?3bde#V+BuHLW`QiCT8!tuu&38rMSxi* z4t}|3$mc2uGD|-f6+-$xrxEi%7kzgii||kEkn8^du^=Wmm2W~!>inn1WePo>D)HE( z63XtLYM`W{>Ss#N#ny@P{(pQI@+8{9Q3wW8xY;L}1h{a-%g6X!r{gxYs&JPgOBfTY zOB~l2y||K~U^zr6m3rv|xUu+*J!%3O#EUiBpEae0YGeXGvO?${>UneVon-?|!=IG1PYxP& z7Z*{4>?ap-0S#^FD(4^`V!+p2{gAFwP{^remx!s2&9S=E#po4)PbEsn3o9(OaqTOs zE}2+wn3HNe#$f)~f~|OT(}TlM{8VnuNswIn=#q|yNGc9;ooxpwnc}w06p9@ZxYWHX zh}}gWocceHh?YO$@x8Q*Pq)Yd6p8o6C})qrd51qQ=stH^E#(o`2-{WmP=Sp>V2+5=%#5}gvcs{gQ))0F^L$EQLhc@>~3*2W$OxSp6DWH%Mp?iaI zqyzE6Q8*R?gtW5EY#2&oghIVOnMPSq1Dx$y(V69TI1p;9RYZUfx$cJBkSN6e0Mv$1 z+_kGGbmI}xmm3Yror_&bk;xpItHN8%WuTpp+o%K^t-I+vKwtG|T%WO>d%E~WNEUhO zPp{;kcm=?nQFQlIE~1L13EUv1D8+kC!xb14Qm@)KF;?EAzzr9Uw8a3^KrFvfMS)f} zE);$^EVY|S{{V3TNRgA@tD<7-?Fur8t6ZUKj7jL$o&~zRyr|B*c;(MsfMMn(Ir0FA zLXpO-;&8XyDSXDa1DYh*wEcVlPMiU2GGgs+f7^%%%N3&cp(bq&lh%rbFQ12>?0wms zNx5~~T+hxfxvRq~KAm!TVn~rb5Eqd>RarEtZ5)Ft#SZ@5B`2JG14eq?BwvwarEn`D z%_D_=quPyDv?Gd=6L#5!;;D8oQK@?&p|TD&_^Uoz3nMY567p0Mk`9)rL)Y!D|6AlF{T~ zop`k0C<%V%gTNLt8Ev6u%TtH2!}d9%4`--SQR3Q!jc7#E?17S`Yi{5%;6rn;=cc?6 zEtF9sLX$4ginSkC0ykq@aa6DB1y057B?4$q!n3WOsA2yA(CD;Ju72c!s20io>RpH8 zyN;E8iF%2{-N{*_AR%3F@GQs&;q2brk;^#`i^kVwQh_ZV+OB-)0weA5d!9c}atu`^ z*{&+^!@!=pcpI4-2G6@_EfKTjGjt;tX&?>01Y0P;((_I9^$ZMtM?UuFW;~v5)D>ciewyWmLW4C>03$4uoaCouiyG?ibMo2cO*gJgB-5<|ZTl#Hac)9< z5WO={24Fm$_7b0FUCipr%>uyV+MSj7!+G`OaEa%Ew7Xy&v98mpX156oj`wREN>K7l zRC6ghP8VT3dX3nl-`b3X{-40`i?fbep>siJ z4o-Djkc{^aIl?9D)|E4Mh*Lo*a7TXbdsoRaG>cVc)==V@`Uhk32jM2N4D-t?t)Ffp zX-o0uTF<0o&3DEyrzwVb&x!c%sZa0q3BF(qGtv@ZRT4k4fFLXjDh9o#9Q#M#9M>d7co=BYV$ zy(PtdbYy3rlewjD^tH9nA6)CzOSmO1rPxx#Zkkfo@>3N3JcB3${(zn=QLCg9KkY-U4#=H4N=L3=-xt{i@9jqYO5DeTU2Z;m?k% z8uWV34`o^0B7^1C_2aXup(&=t04fyfp?@)Hk!}uMk&RO8`oT2J3u$YTeb|X(46ev? zCF_1avyrJKWe(WycG|*dDLwvdcfTXtR-^)nC8_vD?s{KKa$ZXYwpTaVkuDj-Q$57P zQIm19(okegkbJrg7S-)wWN_Skd|NY4L+kMKTrcXu6FgquChYe~hbD*XT9e^(R%yez z&URr$IMTEHhN9oa_3G$w_w4z!;fti3iU7_!pDsv_q>qQPVu&)@0EzouYnB33)yg0={CFjVC3i?hO@YgB9K&+9mp{DLbgcxQaUm%`h zbxUJs1c>xDe1m{!y`h{ldXh<+zpYrk=9v#N35+;ktjUso5#<{Nlfp*h%C?!Ebbi!% zriL$S~ed0`pG6pr4R=mxtg==oDE^5Gn94qvw(we16| zlUYh=gI_gtsHQJ?@E{}wI%A+#UFDuK*7Ve@Iu&6%V?|lF-{OUBqMj%J0B_z?mt*c@ zK`2k)d$w$}QlkwZDi*>Z27&YaMUW`hMN1MO49+CkDV;xw+!8o{0Rl)(S*VWUA27zs z;SuUHkqJF<0oB9JzS2>_LNXYH8b#Y9h&CB1>V{sq(4yinF1>uM5pu9{*PByRgr|5C z!Td64ahB1&o^Vu%kb9ZFZLVmqfO#|P*ep`WfV_qcyssdfk<&xyFr%GefvXm$3K(P> zQpahK@Kd5Ec=DaJ7{_fn*9JAF?5V;4bvswBe^5?N^CtSIYmbH}f{EI(ShZLu-_+uv zz>_Gxn?ceo=9k^ARc**fN99$njBsf<)Rsb&G=_d2K8&hgq~D*XSh;!-%FVt+$3>6? z2l0S`wf_K1dptGZ-RlV)=UV6kpFc(9uC3e->VFnv_Y4Hn0hf=ve=n~viYWotI;IWp zsdR<3Z8hizp}1#=f45l?n*Q)3|~dFZ{XQv;c*BhO&}07#Vya!gb_S<7OUt0YML z{I$*oIM0_Db|FPcK0=Y)uRu0L&1It1E-G7wkbY{abd3K1^#%$H>r;po{JLDaMd82w zW!g!P?&?`Kt8$6R(%@rr@+1<$Lf(@90Flb2h&dSo#dDqql0%%QQfg~g^z|;gTE@AO z0SRq&$*5mmpCYDF5hWM`Kn75X^O2>f=Y}9tgqbY$_QhtyBhhXIC0!Q05cw2NW|tB$ zr>=ClOxHPBqc2iJz`BJluj&P-U2mj)8TtaZMeJr#yM}zk43jEElePX!w8`dn9Q+42 zKrqzqElm~g)<5I9z^vivwLH&{EM+aoy&q#a-6Qba;aL?s1}zy<(D2CO3WU9mhN%T1sr7=LIa(?JFn^ZGWp z$H2NOxTE&a4+)R-Yo2NeQoZ#{kK^+t(L}rqrvfc+#%l%x(B3K5=_HdXcj1G^0l&)P zR~yd`lBuqr?MCg#$F|m@T8V=uD)bX!(CO+8!cyXH45=w+*>7mbl3ReUqeu#8S0UK^ zrq<`x>IQfl`jnS($Jd%o!W)7Lb>)KG@AYZ|5YP6rYa^Hj?sy6J@WO%!WhQZtN0$O>ySPRjJ`zaQ?VC_$r;4!rCM1y=fs%Gpq|YJ(dC1V|%JicQP9G~# zIL)@=DVBtTPXtbK@(%UOn}n~v5yw^|#{oI=UY^AqzS)0IEjM6HYI9s@*8|mq zlpE!4U<*$P;pA9(b2DkH%oaybZTBZ%k81mu&&OL40X4n)kvYx@Tf8p@`cvBM2c zC|17|XFt!9yEW8ybudm_zipSWhXQV|_gZC^YP@!ir*RHMqh7cL#oJhUbHiJJ`g2?6 zx_9lLD68zefh?5@;9s1$VzOL|@z}O>=(cQNmnyGFOBZZkhpNX^0Xg>)>oa0r)5H8` zHg3s=B?Yw^wMh>X+VA4jk)pr~=FX4Ol`7irOw>Pd1vk9#VO#>vx|HO)C!9Yj7q zixs0v$E;PjypYf{^}JQQ#gbtwUMd%Fd!{b^z@%R2m_t* z=hZ_(n};*(wI>Yos%K@%ujBbT0|0>l$HpE10Ef_hQG9K+pqhtd+6D(98o_SpYmzD2ElFwL_Z6yP>|mx~+8hUx!sxXY)T)S!e(ZfS_`|n4IS`O7xVUWi0`kI!cH;vXiH4 z)8ZL~WQ+o;b8gGpVS3V^kjfL!_wMuyH((r!G?yjpgQ#Y(`hhzrgZhXW=684@?3R0{W~1nnWd`SKRV>liF2pO)c{{SfgIcr+XNOSMMpGmaXh3n7=drk$_kxfnBzCt9)@*w*0Y3c-iAy7GL05-g%q zSf`dqSHIB<0#p9K8FsBP3&20A_Q!S=)%Ln`vjFBPocYSIJWuUc{kXOc9rUy~)v|zC zu1>?!ovx~ko&<}6>so-;CZ&0eifcJm0;2O5uM8QgYe3HDv|27V@H>qw5=%qJZDb!+ z@knZF_a`~j7yvL2lR+pqJV^YL7C@=jL@(IOl?=R0)@@Tuq zED|wh(^r!QsW?$jxnUToE)y`O3c8Zv;!OD!O{XX65czd!y544CF|PS~jd*jgoNZS) zRHU_JTJ4rq!Pu+>@omioFWXleR$Yx@mPgND*!;}Ls4|f;;L`Ff?QvvAeoP$ghSm@j zcmmB>ih%oWOUG9gSrbd&+Lmg9pvwO6?`~NPvBwonU9F1_@3mX)z+6v%{V3a~w;TO4H&FQu3MG_-pgT z9}&E;b!Py{Us}ZRU)V7>CDZXpu#M4BflEUvCD%NZCFwjkJ3_z7pj@J_s}4WNjR&NZKDF}gRuID%s zM!D$rKvM!0hj@)0{=%{<`z-g`=L1I>@prLPtLdZK{49AlE&QlZrT_03=_2J0{jB*rHoQ05~iqtuF!2PCnVh{D&y6)T@~awMd0C&S|ZJ0hoZqmf`kF z)^ku0k9N@R2x(Fq!KgkiI}ZcE_O;v9UqRtA z0mR~Bm6I}kbpBmJv9EZ+P@-eU+WJ)D9^iAM)gf5Nv;5@<*9TMmAT-I3juREyA5CAS zIde?wSZ4VrU<-rA;rm*oTFm=vm4tV-!$tLTbm5BG~HHWl#J_Ow`H}~*MT{wBsxp~0CP1h z{{Vn|WHI}ZFC~>F7{RZM?czwO2bCBLL0>6yQ}OpFx9qL5spwQbz?X=tcMS@q6Y%my zrX`JCzvN2vS49TnYWKm8o z`gsNRfE_iQ0ySq{5(&;1`TMG2sZRwk)V-E#!$&*;Rb0goCJ@OC7T6!;*K3IOM=Mi6 z!`;=5p2#u)sra6+U7LDs+KV_}vD9jCm^0WEY?mclECkkwhBnYcK?P=R7wok5qks_; zb0k9k8M{5Sb*n0I57&%j-|LkLf*TB`E<9%?E%WS;`FBu2{iNf=faEczZAZmGl=)V= z!Xm)yKvb79a1YyZYi@UY>Hh$XH=DKBQ0!0?xP5@$rlu)iJkI zk`TJ+OgRf0m)^o;?g{!qYhlO_eZcX<|LD?PZIpq6_VpVmn+lrUl9C`2_$n032a8c$LEj00GST z6FVB;OAROO!hjV7tr{hLT+HgIvq6GeQ&Zc`HR-NuIk8Fv=SFg)nAM*Va`pGSq)o() zt>grzRpr+ma>Gvr0nt@Ty*Zgeeq#G5co~{gI6l3GC^Z&K$TLDrCg51|t);PEPz-^R zOe1s5>He&(da-*`gEk90$$r8N1x&3X;XBLB?=@bf3!YwnRcFYyOzm^J!Icb7B#jw) zNwy^{{{Re()9hJZ3Avn5ocx+5{{T{DR!08-kUrjA4}i1fI@5(nIsX95M7g5{gR8kO z#lq%~)ydf}a z#z98*spl7w;{yGbxbT{ZLLOgVZx9g-5I>8**nmC}wq~)zhsYU+6+dA=5FQ?UiF73i z;z5;fJ~xP(*M>5|lDqZn?&=o!>hk2b4vVbL6uE83{{VtqzJH=uZvpueha{HFd=Ydb zL10MTMzSyehhKN0x|(w88%XR^i?T%CE#R_y)&oRclg`pRW{qQo)FE0X%Gv z3C0v$-xlYA8~*^&YpuB8D&>Ypd1P|o{IezEf=Wy{OO4$833LyQe#x#pw1gU*Y-Tbg zw1n7=lU6*0iwoAhtl(#m@gExi$h4jLSFPC^Q~+J7^sk>Buw{b5*w9gN5GPA>av{g^ z&YNgvc_D8j(p&ZS$0OiqYia&G`G$_QWP3B7U-A1}{lC~MXU8pWNdEw{CI0{&xuB(s zTqJsG;N)u~!BG`qkG!8U9a$>^Oi|^l`0sM^XK0s!@PKXzJ9E!J1gtVZ20c`KR|>#$ zAm&;uc6MX(1Z!45L+YsfN5@iV?qYy^&&3zTtP;iyzB=(T!8u+t;*YlpKXeRJ@MBBI zyFX&TkDyS{^#pN8#}O$gd$^PI4?oE+&n)ToQ-K$0_|0v=U_RS<7P|4r^4`(TiIgz8 zsDr@xsrD#Y~yh*w0^Dyj^JwRN7iEjfYnfU(zcye4whrms(Xa4|)K6*QkzpNR3 zb9{zCM1CEwECw=X#BZ%x9<$Gi+TKPyNQkn{l??j{xC(!F9D(IH^C5o@YLJAU%7RzZ zOrL%)a>36N0pN|qu3+Fnxpp@hP;oe(K>g+$fF`BK<333s7xhSdm%l>4@Z5;e@+nIS z;afcY{{U0W7oEcLCcOlPb!!uvUqu)k-*R)FfvXykp_7Jm4W{NlTHM#B6w3b zn&RSOW+LyACACU^-{D5*Pq5^&X)DR=T~5gn_=}J${#+cEzzmLE^~#{+A3)rPg;f)R zru=-DEx9Bn-jysh+V(l=pb41W;k`xMfg6Yk;wT;g^lG@rD*RHgZFu8aRpo9MCUTT=gK{yiW4^Db9 z+<4?USSCd^Y4U`kgf*o6h;L!qYK-_RE}pHm8OIS;5?I>R^wI6|b9ojsiU4ryp$vw3 zb8Gh5fASM&Cz|#IU6@zbnFlvH{xV)_AUd9Z{Yeax5+P$ih#YxmYpPJG`~7dMNosM* zeXLWUKq&f9ZbGaRe-ZJ2B3zjhO&Rf@F1et6pIIdAKta!APqiD=#FB6i+gI|L>4h^e zavm?`jJAbLbpT9_tJ*boR$NQu>zoG(5HU{w04i93axXLT(`>VXQ8E3w zi(E-lmH8H@V!^shAJC4rmNzQqL*x^@Za1A6#Qy*}e?MF>So2-7MIX2u;c-z_Pv}g- z1ZA#8!IP2FyxPUlBFw)78@8A1#YR1#41tEe&ug2f&^&S`!T#2NYH65f9(iQy*Et7L z6Xt$Nr`MVg&#F!x-m`FYJGm$j%o`xtShH4UUJ!XR8N|yv?9K&-h>=MZL6(}w=p9yP zG_3Xfn!Lk3O?4(@Z21%HXr4Y3NO=* zt>I5-(R-u<^=tYHufmJ4&zGLrR&$BBA{ca~#S_#*tnDp(3y~H9PhI#|vPvVV3r$LR z&Y&tbDJ7)~oO_;sC3i}k&_Z#nN}f(=F#OKTPOgwzzJTh|nJMZwnKR^LgEh^qQo^0p zZNMuH!-LzosA_>6ihVxLu;Y(6qHpeH&F z>A*D*WploGr*m@qnVNN5Eoh_qW#dCF*zBqS?Z`-lx{AtEyZV`o6zz5#eYma}5+DQK z;Mkf{Vx!~WY^((c4PS^}zsTBOmUi?v0rf%g50G99$TjOQmuotCH7zVrU&!B63xSVl z{EhOw$cG2x_Z1#z{{S?wEUqKNNwbSahb*wFQ$Z+Sef5IB%KJ<9oM;vVU0}V~1^_WO zIMKZA(ng2H@HB-|iOM zw4;c!f1yjZg0_eN5Uzcbaz*@kKy9eNe{PGF`{{V_> zY9kJi<&TQanw$POAC!E5y8sEB^2fziX3%`=;3>dv+*1sESQEoN5y3f7ijYFe;7gGL)2a~ z;^Wxl*&f>=qGUCWip&zFZgY;}89#8Oe_%2`Dkr{PW zv~m- zUU=gtoRDgmNA;W^CF?L*3>cpz>yyLz9v*((Q3vqS;rneFSq594NrCFe{{V+RGvnx@ zQ8FJL@oW$O0E*;av$0qV5D_ zAFFV~A{As(mQW@RoILbEvS3nUz=B-k?4=xtE-Cn@(pTB);xDr)KD@+oj(bcp81!Ql z5{x*8b+HOsSpy?a$BeRlwD=kweBsHMGsPbtkW7VUYs&N%I%0UvM6MS{{{UEL?tcE> znn;#7fo;G58%xR)c%DQ9kn8oEs_FxO(S_&=@R$o*$*%aU?U$_OTAB-;PgKDeaew6h z0AOn#G-YP)&&!GpRABiR5+1v!`Er7XEzJUF053L@fM$QQ6Y{K5>>05^^|Scm zokLnOaTa`I3gl&v7pVft@%!ZzJyZz!>t#&*oA?~2EB=4dd1v)RmZITSwFH)$jJ%gX zn{q5J(F@>{iKst=hg4>uK__|G03y7sXEKg+~KvljDd27MHMSmpU*DMe&mx%M#J$xB-$4h7cL+3ii-p6D%{v1-7&@G3G_3vhB6WMQ31rw7yL5 zuf&Lr`!`a;EZTo=J$5i1G8b(beoyI1`tUUNw}EjH^FJGKgG@+Fbzd8*vLkYX3SY)h z3={l}cCeV_`lRHp$IhM@Q&f0k34-Gf$M=U51b{ynx0NXB`)ToB%iA;dYvN94NdW~| z5zgCWrST&c5_YFSh&F%7?Rg$QAR)~MpZe!77g>e}1SjFIUq*SEv&rnKM1LC@c|D4XBIyB z506$)0rp@bj7}K920pPP>h!a0KKfHf*gRb4z#u@SWaBVz1hUN8SG%2N5?AQT$Iu# zd~L}A{{ZYV{C6U9k7h zHsj-LHhmB*0e>0p8j>ASM6|6$N?&R!*;MlsY?M>Z%mkul)AEJ9DF6zD zJZww0ui)?}e7SS-0<5pfwkVeqBL+S*WwQGr0pOzC2h+_{i8Xr{^!7N2)e|Q)@o=x} z_bqaV==J6UJVy2NSue%v_$@-k2Wyr|=E5#TC?c~WubGt?Rw*G@CAZZMwQ}R19*~Cw z(NOWDZxPffa)=bUB{@y0Zz0S5LlMd2J|i&~6L4qDv$w0L3x>PYLMY3PVnfhu;F7`l zjbE^C!d9J5#F=%jfp2k`VT9FNue7wOh(GBo3o<(*j|QnBOo>pYJM z{B#RGVh9|THK{fNdVoL?po*le$#M&L_f2nKuJOX4%c9q zW7Uo;(j-y!)%D?MXHp05atxl5as?hkBs6?{IP)|5@tS0x0>ZK8bZPrOC626VGxf&_ z&m;KzKk#bK3Hl=rN5|-c&gBoVom!W z7x88pfDrQW{{R&+G9F@Lzl?#bf#e=1;<=FojDOO;VCevoa?e()gf2Y6Jrh#!hd;sSKbmX#i zd;-JbK(1ad^xr8yTz>q=>9YZi%XxJt;q!(Q*TarJD2F(mUoh}KCEU-kQHam+Bz|9p zPbm1LpZN}0^B)$J@IcStr1-%eKn+KcN5z&*5sLX{vOYr67N4-1%=~=EC6N(7F8Jd3e_FoFKOg#8 zXXw1o$KEE<9$b${PzTT#i_tUkJePr~4_LBc$iq)p(1CynJL9Z8o(zi^4~{UNf9;<$ zpyq(b{{Vr19Khs^$HCLFSPbzmDAGKdJO{*SII{v|T-U7po6SXn4O!)et{;A9McdEw z@N|q0(*ASfHML2CJO|h#R>H^S{{Vy2JFxM~9CN4SlFuGK29GAs!4|sAKdLD zAz~WZm(H_x~_1&Q+J~@`;x=j4X#!R!r*e*)bggko8`924OKNHD# zfXbyM1~RbqPIZybLoiI%o16e*!|^&s0sjE;e--Hu^U9Juk*CO$Ov4A_K0aS2e-3)b@H zSXUCxvx>|5za~Osf-)QriH&W?(2f*L(%^DGWF|?|huEy~<~}%f|dj!1#i)K2h-FC7XS`3a9vQEGs78 z>Sx9f09;gN)_hv7W8(fZvL&g!TYzWAuO;O0OfY_%a*@a6JQt?go_`KRS@@>Kxg6!k zfnK+E2o!<=;XlLoElHPG4?p4EOLJV_L?0M^0In)NRcX-H%Ain~-=UP&1(hj9h%hJg zvI6pmy|?f%`#E*J`QquzCY>MhLMj{!{ywrHSSLJR@!3Z*D8mNV{AN+j95MN$<2nB3 z3b>U&9|L%XJkQ7CYXWop0pA@+^sQ6i{71*v6C8X13Yc+sJO^%C*cPAv02CavsLEve zN<5Z#@=#(?z|XAyKpn#YM!Oj@1b$v^HJ~{oT)F2qss8|K^%Ilwzl|MFQ!u7r=h1|V z5X|}UnstiH)&BrP)*QH>bb$0U z1x3`fV1OC^;(mc(SPkO!*{&Sd?uyPvxwED{rT*`X|1p7%Ua`8hExeAX2aE^K|dmjE3Wh6$Se*gxA;t1t~bohmk$LC&C&Wj7)tsRc%U{d{2E zuE{%@2`s*c9j2-~iz~xiPGDpjng0Nucxh+Dgc`*eWW&d55kZNTSR}N&@(w&aD6nQM zCjLy7#PLxXc#T>J=fx$AVbaSfkzmNo^}+dPi4fyX!eOHl=L-F?oYgS+5H1{KN0IrM zjMzMsCMusGW&=2KIXaRZ{{TR5lRahxABJVfU=+dO<`%?cgAfnF3V;pjo zar4!{a}ribsMg?C8515(ikb(k!^~=x*q*$XkCO-{t)t1Qk>5wyuChuv;6J3fGJK6i zkWdf=s62=e3HWfBWV6exXkRK406%8Ec0|cX%Oc2@Utk19W>ju^Tj$B3>hxClK`{(Q^;PiggjN!4XQSTXzY8ho{w z?EXCTWh?-XE?L!q{&}DA{k10kVw`da7ekAZxOt5shzXp$ysK4%$nX!K50Bwl52Nwg zbg6AyzntSw$x3j|$T6m0;y@pMJ4eL$^!_sIavXmW@bpU@ix2$+QUm!Ce+Fr|@M{C< zTJ1kn;N|`JxoCcVl9IqKH2r@G;167$&jyk4YC*t!2)OQa)7q0XtDl+p*q*MSFh5de}@z5rY0ObX3p*I+}XkZ7m-E=g~T)1{zGY`hCy z@n}7R6r=N#0o^3RXs)gzjI+83!vEK+13 zbLr&!X@G~1`1(&Kcp&ASGl>Kr)#5Z6YUS)wN5%Yb2QL2rNBF%gg^Z)9FnH7I(tr#r zh)V{vXh?#;H0t3tWo%H8vq>*UZf67Wni<*(dR_TrU72!g0S;Rz+&K{-;o@~nQ?d2} zUIw=YAAAJLi4Xl&1U`DW<|=6O^Y-Wc8IyCLKW)Icos#+!ULBvHAs-nN3j(ld^9?zx zE$7UK8s`d4sQU48VDfn-V~e0$)5+XgS<-U+G9F2zl}<8z--Jiv%moFPsg4jg!i7T1sn ze^X_ZC)I|IJa?*(#f9{#F^V#y2KISIXFRx8V~+w{k&qF9h-$yAfCr@C3t~sJ>H~*a zi@rlWzQ#EC6P}@DEu6%s-|8-PsF=?d;egs9ka|f?L)1p!+g7Xre;u@6AR3P% zW8xoOatr2|zUZI?>P*~nXG8JpmmHX_btQCDg$`P}_SEG$ALejl8EC(@%5r2b63?}+Qox$jTAA4;6&*AVJm37M<3Al@Q&LYQuK6~zZ8_MZ z%&CKRosocNYOh&$B7R<`v8JhZH;o_V>jTg6P=kFf=*sSftoF@7U?SN;vwa4po_xKL z6NNJv8(Efh@WkVS!vHeUKleJNmjT?O^A!LvyA{ZPtbZ{O9}NrpBL{v{%7Hg?6E@Kl zt;&cJI1|L;^<%Vqu$*C^&(|x0PzL)oeHv*^Su~w$0$IW8lR=>63#V_=WBj~bce=3U zA$rGv2at4$Ho!O{b+dxI_H$!3Y*BO~O|L4GH_!FLXDg+fZCvm*uB-8b7w!(c1*D*V$2Ppx z>udq7+au;MfGFvd+^v=BGXA3DGV1RLE-u+`N60LvR#h8f+5 zFCKp6vKMi1AAzt~WcdJOdn2K9yV$@IaKEDZ9ArHNIpM&MjrzF_0DYuo=@}TL!|;5W z=1Vgm64k7zRUpyAy=lMPe)Hve?qU6@`XgUZeYgx~!!UT@0wNQwgvPh{FCC2K!Iewr z?WQO!xHF-w3+GI!g`G{CqRtzv9I$v`L2s%lctWS}YP zj@~%IgzWnhX>;>B;d!)-#a?DyspNnlKN&6z3ymC48tysCnGb6H$Qx(A5^d+=&umbg~3N0bOYVtB50Xga_lQ0kPjWNJ2 zE~60e;hb_N;NnLg6_3|GGRO6iaim-0waxzAb%t;uEe$@u_4A@tbtkEYL9EBL(f~d=g9h%C0>E0d0?Pv@*sc)g z#{hg#fJfrdBl9!loT1_PmPJST{{ZI*rgJmtPy-j-!8Zv9fjWyM+!5o#pCs;hX>m@r zgLiIREiA62ng0OPuP_u_{{Yj9tAQOH!M~Gzub=}EA0U?i0=)48d_JKrgln*;S@yowJ6G1mEer$eX8s(NfwLQQ3jlBNQ*w6$! zAD`{2pvFKICEHEpOb_zOUSoNBmOwPWC93(V!&^8}4m)%5y_egE*8&uL%l7;rD##a_ z@0RPhR_CPHTR)NBm(gA;rez1t_S*c7Icr`L{GP3;jsEDHgXEtiqM@+%9!c_M0_bZD z6HC8P7^SE`?rp!Ro72hVJd-{?UAAh@(b+c&N6V}1EsXnTc<-HjwDj&+?hKU8+@Vvg z4&u2VBKcKRA?VpRhNtJ-opTEx)bBs$JBq5c(9URTKTtOkSA)C~(s$3~+QdmY@J)Zp zYxP{CkObFhNN7Lg$o9033}$zbe8(`#$I3i+6R8*GxZzxeLPfr34UGd4kq zY7^F;16?o5>yz&?B3bnMJbfQ+Yi$qNV^x&QKbhBPZ=830gt&$|Fy?Fw>)aP4i8)R-$ zZMhoOCHGpjQID5t!!?*&+&KBhwVeDs>q59RC2S7ZSv!lt`=nPTt8cBAf+N{-WOs~gP`5P=@%p?ztSVL16W$eAv9S!f5B{PRr!1EYi<;Qd0? zHT4sx;U>%V8%SQd6ZelX^H38u%+O$LetpZO{*Dvj{-IjdnK3PaaN)uCn)ABoFc&FZPax!AU zvosb-d(V(*=qH85VUL`Aw(QZ+D^7FsefZ>>>hs&C`4%n$C%XjPBBNr7jZltGg3D(q z*40$(YEj4)+vEO5y^<6yoWPBN=qa2-iZ#-h4J05yd6ThSRiJ{`!r&Ki;pDdhaMv)z z)1Q&+tz$z2#YcD>1yXezg%vlv^FP?Bj%yW_sk1h(kS-GiJw@X_K(?@QgZvM0z#$)B zhlsuP2#Bah#is>=z&9jI70X8x53o68ZV0&ZJY%T?`1s9>%Jx z67j`?o=5xGB3t{J{RflsgX53`ZUfBMDp`)lVE)f=R3)v&Xdf|mEC4I0orJgzO*W1^W34rwf2Ah#dX{;0 zLEEX*)DwlDxn+%JGs>^NAW2%t&)QeevPBt(FUSvDC-n-PK5)$zpX4XwAx#TbTJE8T zT$aw%rQeWiU-sXj@^s|+;QsswgZ-OEND#aj5r_J|ED@=g{tKOF!|#U-=3k>~$T-f! zGY(9PdeV*062ckwcT8EkSCD zVgSB_nE8ZfpYQ{pItQ%JiRaFY0Jo7DfTCuIi2(p1awzg-e?q>B5=4O$OJhJ}bN<M8PIga94u}-_^`U?1?kqxW)%o_*E z9JAr=yK|jaLtFjFEm^MwY)GY2In*E(gTao+aE)p8XN1K60Fgs3JFjj85OP-Z^;b7- zK}P`@hdC}8JP@X~E!EU>^DO>t3s*bB%dPEK$o^XvmD9l?i|B{t+w+FGwoM*a-WGx( z#aRGuK#{-V5YVhBz{?|;aNHg#AnuhZmjl*D!@>5-Kn0M>b~`L3ILtz6X5yy4a8$iO zip)=}C^d}rB)MSE4Ig!l0#t+w8~^=ke6$fdxiP0 zGp0o@12LQd5ze zERD(_EO#WtMZO}ZnjOs{kOw-TXb1Kh4v#_`csRoX*{3y4L5Ohj zs?JrkOnmtl>UDaZ>Oq?D1%K+^PX$Y&Fe$!i@%raUQ_n50i+;9=j?m=duNFc;nakt*CgfX9t3?|v1@%bhHsC?S z@s=ecVrs*D1D;I8(buNNS8=N#5Q^%iY+ zSjRH3131u!6R)oi@}R4%%zoB$W`=`UWIk%P*GS;VtMSjz_m$Dp!-`?~J>J9mXu%MC z(+%4WHva%dJ1>)%B$Fo`DE2i``5Uu>4ej%zsT4Q`_xylyL*rHCJAt*ObioW>SxF5%X3LFURC<7tsZ#5 zH->*yq$Po*4+Wo}C)I0ZNcA7jkd!o-u13$)#f*Y;>x5fZ>YmeTvCcJ#o5XzcYZB#f zc41pDoL@wl1(~={_rgd20Gtm1hF=Z^{=%K**Uc z%ETUmcdP~Y+ROgWqH#YHco!h)=1G1_69~`DAMG}PawQNPY0tPG(N`iycphFu$!}qB z4j^RvRy<78kt|MoG@8UZ#}KA;;0?GR7INnyD1CD@F`!Fxc?&akt33O&l*+U?VUdi*VNc(+>irlQk*HZgFzsLMAkb5 zvNRC*d!29?{{WHnL!9)Bg+gS%TP*8cWCnX!JBb9)@~fep@g zDNvDy!NzJK5J_8J4F1Xyq;+vb8F2uXTKwir&xHqXl`nCy%5s+yRq{RF&r%bsip9V4 zN5}-zotY*6sy$35yo-n+ISF0;zzyMpwxC;^T9f;zXvCDd~trtUI8}@mOfkZGIZ`?m>WJ_ zyH7L@_|`HeD*0iPg1n+cNs*u{Z-8`8z{Cv|_!#W$iOk5@{i94G{hjx|)F)Sr(lA!^Sjs=uP zA4#bRBT#ZKNRW@XvfN|C#sfdWol&T`id)uOx{gPME=>BWD(3u%G z6-A)=DEyTzvSgkV_2d?z3GyMrk63s+0DC)RR3>fUO8KRzuXRVNU9+U#Z{#J+YR@lhxKV03qzpnWZXlhpwXW)Gp%%0B|*f=s@Qcsaa{zc|Yl1tNV60xtf|XtjSNe~*p9#o=8{|K! z0Nmx&$U;u}{<>5PI+`9s`jWQsW&=G;{YuwPZTkRXk@~lz*)yd|aCy7=k|;8n6l6{v z%#zfXCBjr}zG8_MrqhCL5q_bs*)wqqRkZy{flKw3JC8H|r6h`UsweS>=YJh^ic9M> zv_5t5_X|+dczLq<+zCmPH80rK{NrO)B8nQGGJK0j70}XZnLfwoC_D{1q>4*_@(MRq z7)m*h$Zf__xj(r_=u0 zI`w5+EK$0k?4;^HHZp$(F}YnX&1wMWCRCtZ2haFCCp9dbC~y~)A-eVnV~#}gQDDdO zh?PFXq68_c=u$-61}S+A|7nh=2{h-1lHHD zj#T`PL0?HMo=ia0h2_{&+$Mf*HxR3XkSEokxyrz0A;Zkq%*=Xo^u3dX6-)#QIwamJ zk(~bkNl(Y+Y#gcn*6X#hNX|z_apuX0EYzu!np>^H+VD;LAzNFfnB3CELaGpxO37VH z$BDNxu8g{X_0GL-tIaC z*UELhAh*ig8uaNJp-L3Ym8hQ%Fr_37k(#kng#Q2`&QaFhlFoA>-(Ekb=&(2la9v}` zMU3zxhne}0@o=BB5Dd$nzoyh}o$lgF8e4-T-wSX6w6B8!Gr7jI9&DV|l$vM-c=kG% zyPCOqR<`Qb{0LxHnPtHRKat|Nb&e@%pij*o%IZ^zP)g-ft_q>m#VvJr($8E_WM#lt z43r{-1cSoWp#DW%Ymn$SYL)<5{8~%OHVKg}Q^P$IxorhI2^y0uK8@Y(fo$j|R_K!Xz>9}#^vP8A5wQ%Q?20<@)a{k{inO@EcR}j}r z!)OY0qU%a3ARtW1H%3>k zgyE*@2$H>uHI#FuC*{9JvL@C7G#s|EDP3lwIgu((oEMs{rJ~9sTsd)L+@8PUR+|`n7WUj)egVoX#!}w$usVphJyMV z<*ivK0cFbQdz5cM2{-ppf@<&^F-W6jy#pOr25~YM4!0zPS5F+!V8tjcH zT8L%CI4iSX+75TL&N!d?t011DcM@W7>FZIn6x?`j#b^wG4{6#7?nux+8zoZI-cI6+ zLXJS5e6})P7;aeBH98=xg)Ty~N4P1ngjtM7@IjwB$KT*7ic*2a5 z^$3no0A=b`%6AG90`i?oJTT4t)59f!K4Xj*lY>1ffCvcQ{;C8(KLyt*ha{d&#u@DH z_6Lt(P7RU4+7ui!45&tUwQ{7EY>0aa=HWFF&z{%gWLTj{NTqNl}Mbp2tXpN+bLte1?R(e zU^`UBNSTZC5G;FW!8H!bc%BQiI1!ZTaRDoF@&nTBt_i=iGxM8v6Z5BDZ4`XtX`+5f zO8W?ZQ+_~0m*v2@^YhKw!s0rFOg~Y6M;3o4Vg6V8oxQeGT#ZS!e<}GOLz>DPtJsFCWf5!}h7DJ{Q(1rcXSLvfrC&nd zhSrahY;{qO&pmHl4iul} zNm=_{G|%=wwPC0%;Qs(6;5*E_OSc%zj~{3}&c@Ro_bpF-N;PzT~5wJ(r~ zWKi`Q+MitcO1hM>1>`V!SO+Rh43(GQ*De7cURMRxp(>8y;lbj@_YOsWI9Fp3kKIZ1OiJIj;^X_td#;2-vR=)2(6y)oEN30r% zT$(egEPvI8kV}qkHpD8M^=`DOnkNE;L6w*R7#Mv^X!A+-@Mvsjp~l-9!yH`ld6>#3 zn)2#$Tod*cTz!+RSaPvVaW8Nz=u(2v33tOy^3*e`cv#W9{l%?h8&x-?0^P z1Cg#6kp7Y+-GzB-C^_nKiKbL;B5V4LOlyLJPy>(y>>}q2QW!`9qM&o#+b<-8!oFQ} z87hoUKa^k~Nqpu_?h`U7jqDtl2r01 z-In&)0hTuia6QNg+RATQYu8sb;$7dOvb|Rgpw+f@fD`J@N9>+6&dE$tM%FVa1I;un zJm31Q`4!p8Vr~9_lr|%7Wve*2I zqe_V9&KmEKY(*b(AOyDdU(x;I9{WCxxuB84Ca%es&g>2ShZ$k z)?+3LKBEM)pRQ!qu$7GFpx_+c;`QAaozdFvV5h}Y<|T~y$5x=J-++0L>N8T>Bp2l09h-RS#=Ve7~Ch-y)^MUCz{=r>Rz`h9s z$gz?PiWZkYBG9|)wiRI6*Pf&LFy;#kl}Spc;p6pPtUebOTJ$hbtaiKE*-pJyXEr#E zE4vtSf&~|?LfKo32`u$wC=AY!v~sGfMENw$CK}y!8%pp=66+kX;A#qgIx2Z7YW0Lf z9=Fi5>pXI{s?7?7M6yel1iUnZnX$_#h~BILV{6nI4vdL1dK}>Zlya6%wuK4>2pvvi z!}|cTGO!{%bVzi!;R$>|3bJ*mv!3hCnI1~Zl!gXclVI9u=zW0G%c^?XX-j^(pSxnS z6wnDIpO+fQoF+!LW3ePbl?H2xFA0`xV_w8iBtM#p4L+w{!{B}9hDdY&09VYjda?sLgY$BAu?yHK;VVNbbr@-w3w-@K zT?*dm9W?;FGIRlR=k|MEACaWXm+DSx)99w-cUO{Zu?-Cgozxfm8Z%fpiNJ~sKvS1br2dr4hM@! z#pT!M(DE}-@He|6#San5;-uP|gR7AGjEUJx2P*PdSkN*ipN>Q5Vv9e0%Vh(Q%ZNh{ za_h-pOAQ6fn|pW$OqZIcSz|Ku6z1IWQ$B=Wj7wN8+;}cqWyNmigEP8I=$x&n)>vd! zTHH0Ik_H_ggsS=sPPzJs-X3QdkR{@ve~*b9Ha8-!CuXZES#`C&H7=oFtZmON6q&m8 zryCHIGzW)%$jUlA|#DZ|!nTl=QSbWFg!FKxEt@ zA{-w^NVb(SaHFrZ{P^To>>#>&oq+@tv#wapMUNJQ2~^riylBR{L8A_lZlhbPmv^?7 zV>cyR9bRIXl+=b(D~+^7@QVf*)9b6j`>I)GEVoaSnWQ9^TPgnlGb=a?zvxqD>R4-> z$^ey$(!z7-*SH!AF)7}{V157%{=_fyHmR^PWhML`K~t`rCpr~0vn?gHl=4ezyAt#z zsXV4}z=5*R^^haL(X!J#4%UxSYDHP0)s(^(>b1Mj0YV4a)g_uka%xFrrP!HbTxC4r zeiA4lPbLEWD_Knpp-2>GTRrriUc4n$VSs4OfD)V#+#1O&6fmM(Xw zJ*>4-;4NJaNEj)ax1DNz{{V0BH9@CKR&cIYMTndRoT~!DaTzqfOPz`SPtE@TZp#fI0#1|7{mG%7>C~`8^;UwDS+C~f zz-wW}XrR-~DNf_2S=(W&rJJ>z-Rdd5F(zG-LSQjVQ>*6&wN%z1R-5)dx#MsBx~ANc4qD_k0*N2kjLNIFJsk#LzBR& zuU1EpRQbwH!)y(3G|L+1RFue|Bgn1$M*d50GF_Ke$~k?AW-X}?YQDiU+pUQMI=F!x z=nkXBVZZ_urOrRh4vaaOd7cNyQfWET6)2Awp0#$gyB$(HXH@)zTDdZu*6fh+p6D{g z5VwbwUZ&7Kgv#+g?QaSVz_WFx88tCH1vN@|H};D>_qh84f%|SYmi?7EPv*+g>UIbg z4vfy=oC>Z$`V2p?oI^jiP;!#~-UXnsOd7_oprDZ{tNq znbS+%)=#RpG2c!6e@z{h>~?q?#5_)LauA`SO=ZS7FljkWiTSQ1R&6{5&@*P5r3R8+ zZFoG3g&k!rr>v>f)PHW=@Az7v%|_oXW~_AaapBa%o;M^7Bbs)yykCmAU}z1)yBo<} zK1Cp$;X*1Q3s-GufHOZ-=vpFRtY846JBiOA1Iv=?%@efNK(nv+Gt9XCv(|N3ws0bM z+XF`e8p=KWNGfVHX%Ii#TZazUQuj|J3Lci@YfiAqeMCh&)36CS>&P1Oxl~Wc1FL1N zw%(S&01nODO=YSpCBX{!3!&}$i55?`PN>*ybe&`I{OQB;mV9+P()le^bWmv-;Go_L zd@1I=J0iuY`!++c(6LneI@%h;lnhY}-1C;M7wjnS34f+~L+(NeUU-ubT!STvAYXf= zp6P;ce2dy%>~r)?4!w!QZE&7wBi+Iss<^>UyHL8`*EG6Rdc=HwA}>)DtM;(la*bac zBWk}*cAsv1)%6ShIk=X<$F7Q7`faG%$+t^u^^9wN#ubM?Ed*MM`8+G<=jz?>7_^N! zL4=NXJFx!%#;*2$*ni5S~yYd4jd^nYZUJo>F2>rTJ?oD%feCy&^!}v zHH%W{X%PFMbEpY8?aKfo>@glexzW_Lqt)v1J1trbLF@xm&33Mr3xf55*Qs$aH;D6- z6XC2#808*Twbt=+9GnwiW8o0(9&ALQ2%V%^@oP$|Bh2H1_L(aWka0DXy`I+Pi$Lw+6uXqRK@L6E^mlDkBRN#Da4aJ})Jt2S$RvwI@ z#cjdngyGNOoQw;}*3hLmYJqs1&zQ6hoM&e%lEnvzg#$}n9|NI!?TAM@HYvc#_7miD zG@`wGo(baRKm$Yi#lzjLV3H!=pxsC{CL1kOksE4tIU@MBY9Etnata)Q+d=g!Dd2CZ z;_!nK8_(wU@72Av7mHS5DanSV;AS~u2P2dyj2`4jWELOwFYdI?-0}pu`Bp=rD&dL( zPNQ%KJW-KjyP`S*RqIv$zsWKg4JsOH4lGJFhyMWM%~t%GHGrj%hcKYVbr=Et;u;%+ zG;k!E*FO}SveOhi<-$Z5ki?-TJ)d9=HtTRMpJcZ1%JwDqnfi#^iSL}v$}q~c5bZux z>Lf0dr+clhG*-bx-|H#lkZDtu zfOgk9`h_5_prZ|I5npI~a=aC6SB6Oxp^0)~bBGA?g!LKcjvey4?vvs>j$fCb9G>IT z53C#$cd}aMwIISUm6swwb4N5A<)Lkl)ghvN2lt0InfaB=H42S-{F8CE#R;`%vai5n z5``8e>`}2bbiD?mI;!<>4N#~Cy`$SInIwc~Djb}J%^)+0pV@}MN=1I^=%S?IUEuw0 zRQbY+5;NL_I@Y!+)Z+H_#N#maCpCnV{i|CqwoiQ$ddm`5u4}~zaRB9FmMk@d?@`Nk zA(Pr_lx`Y6tZ~GO<^9HfmV9-<>AREX?vR%sZn9*RIs3LA!Shdvlxu;q)C{AH^Y8HHJ;6fcP~z zgXD5JC@)-bEfO_7>L5K*+QX0AAoKN4Nf+$;%QHquqF!Oo6i`ccgGnXOY<-stp$%;b zhyMVDoC+XDyba+$D)v%J-Dw2e+DM;JGPoLlb?s7`>JFtIe9}(MWn?30=0^q^@H|@X zo8oZ9Mgj^v!)chF$kLA&A`2K+Xd^G$zk;TReG3+r<0iTn$1H+;fn^8HZ+zTQWAm7? zyAG3yty!wLAfb5SM+HAQGzxJ>aM~dbN=V2gN3KSA^czjEVTrU_EyxSyIzJZ3P4V&^ zIc(ENd?Pghi%s86aWc10Vqha}PO7IEGw6JD;(wXX$Yg%2pVY))VRWF3FzWkPW#Z56 z;(F>Oi6{nvuRcoreK)K`om~v<9*@3ZtYDjII`fwLjOgT|UzY1~)u^3Ax}k{Vx0yJz zgL#Ol%AW?LxoydvHD!*kL_-T{3it#%+?XiYSB8Tp)Z~45I9+zBOiA;@*bHzfOzp|6 z{{Xed+&41h97o5CYQ4e~Be$Dnc1?{ZD?V(Si+D^QnsW|5kAdDhj@%$r;C zv`+A^4lEwUYoO91Ku4~`fTF;N=gq60smmQ$9M!kf1}9S#O$pK)8E13UmQk_Ou6l)y zAi(L7^@I8{G8^P-#SB+JAC3!@06zuv%dw*d9K2)XNODn#t3M)gYK1h5UY(7hxS#;Z zVLPUFyoGTFAL8u>zt*SttSbp%X-quM-`?((RLABa-dmLWcL8~w7Rah6_S452y^D=U z)zIyhse9>vZ>&uP7P)$ufoi+B^Yq;FCW8+-br}XvUjd>=>)H1`YNO7Kx)$~+GK3Q9 zlNEM8yx8nTC8)=yNObFc7v3-iodE_ChK%UdbC3D0qxJCuyKG9ERlw%F|FOK|dC~xvk`e3vkrxw;Ii` zy_JIj%#*N{Oyz){0ZgRlZ~%vEJrfO@ZI%S(RjLkxb~$g>%I+^f@`L>^F|T$4_OV5o z=erz~1;-Le{{ToU3Ln)RAZ6Aom*R?$oHy12KNjb^0uMYb)JZPStJ_w1>EhK+Ql1Dw zPpO3W0@aTr)oPRLp2mUaz1c}3e%XDsQRcg2e1|)&Y5I=ZBWh-ug=E%3xfr8va0Czh%>dFh9sK8&9C)1> zoM;Ta!{H?8}DinXvs>J zod?(|50AfHnm}8Jo)MFkq7)br#UbJ&ZuClt_FB-*sH8o@hU%iBEe7Dy#l>>+*@P2` zU}WntBVXGppyMUD71fP4xi*GkpOtG`J=Zogn*5>+nt|4SetzldvAomy4GY*xS$VWl zilCp0Sn%`rTn!FM$-@PwsN6xV0Tid)m5Jm9%R#u>>(EroH*xH~O-91BV$tj*OIw#y z=Avw46YN8zR2+_79awk28H@bI1`hQclTtt(s!08PGsg06M>ZB|8STWmp`M_!ckHSs z0K;A;m?5FR`JqNE)xkasHRm`bd~Op+Jv0_aVi4wjoHqeRb~ZFWnbs5H)LTTbW`XXi ztZD5PF0ZcwtkQxclDl19bv!}N5-p^%mmZwso@E7p6HAlx_OWZFtlX~FRYbV_#cfx^ z-zML8(|jWNrrSY6r$J2A_{7`R3}^$B@`8DMXKJHY`4K^yI$Jiz~gV$Xpt=svp3`@sWq4u4a}+*9Nd42R=Ltv8nCc) zVJ0h)HvP>jEw_rQUG>}2Z;$zY;TpOxWou;4?1iewcFLbrB; zYS`DaazZl?R_ttN_heeSWWElm39y(fB$sG#@;NbwYLaQg{r0Hn&Si&aqm=&uAB@qB zuf?V`lBS`IT($6XTuS{|>z`Y!1_${U&dp`&bp@V!uU4g@@zsJFEMs^jN;S~WkvLv5 z+&_K>a4b=vjWxR{?kc*RLY%U278`npE1ulTOwA0GtLk-1rKK>@eqEIqla0&Mn|N08 z{u$8htEspj82hE2%*l~}sii(v2R8+qr^M`UG4t;`Rj4Bzbk~f!rlcg|FJd9cuPqV` z?D0k#tdHASvZM_llrx%A$R6pPJG{lo7AOEj#J4Y>CexD)^BWq}L=IOJrJC!j$N>_Y zor|^a^@IhJqDshKuV9+dYEHc zu$Kw@+#8Vf7H5hC$zhzhS_AY@kQO!yc13<&vRTgz3MP3jiPPknk`{U2UK2v`K#cHo zJko&>Yoy9e&LZK)t%wX&s%2-WIkv7+9}fh=E<6h@BwJcp_sF@_Y3OOVM2@6~Lb4Qc zI_j28iF&2%9)hik8-!7wnRQExRp`0jnk7P>Jd`T)XM}qrgFKpL&lYk5`d7v#PUBRf ze4+xqR9f~1C8O@NP{F&WtC0Mw^zsDmI+7|sF8w%U?o`Ow5RIP_b|@-oq;oqWf?h2} zcri#AY#%CgQJPkz|=qhiztmd`SFG)W?P`m3d7P>Gl)4lTnMS z(c-Lw>D}eY&&TvmTYWj)moD78a**mt&bV1=aHU9O`&H&z1#?O%CBGAcW^Ct@im3|( zr^M_xX|WrgKe+u&A0F3hHC?{1CZA^IwJDDrU~-ISEdx<0zZBVKJ*8}Rv<8C~G+Cl=e0Wt1s zx=&pB&CU0DN&9R{;!3Qrl_QB8?u3XD`H;h$3mAA@xU&o{6?N`%lDQUR6P);HOyP5^T~2}wOZZIL}` z{{5*Se{RI}kLGyC#WiaUJh@d^a*=L8O~*MczpT|VkC19oE#)?;ZJjp0M-q%EEjn9; z(U#%cBppVi_a=sF=(->aT%;uaA`12~D^%|lI|nMupy2JZtso4mUIF7C#HvE3FRvlp z)oMsNO@yvfu2B@!pd{+0(qLFLX0I8syicXt*5SZ)DAFeu8r(x^u(Ij?ysA&gfsGRf z;z>V{a0u4-?6sitYRZpo@-IAtDkQk5bpbSsKE+hfgBG5-L7?%oa+DppdIZy)w0 znFp3AwyM;b?jF`0zhfno78Q)IxNxx^tMv2GzDXcAEIvU$H70~7$LN-QtvWgzi4jxD zYCg{wI{i@e)79pp1j|KCHxuYwxS=lUh`Hegm6DhuUNBOuaHr_}y!){s%p5$?dg}Q; zv~Dyn!mC{&sd+EUZGURO)CNl3)|j=mP;PDk8oj6kRu=OKK0C75Gu@|+Ar>p<*_YMi zEXd`f%RN^Z3v4zUzCaQ~KoEmumMxG<4 zo|d$HMs_DVNWjQs#paB*z!6pfCSt`H3UjjAR*L3GOtN{JU96SPTgH8J8{@iNq0`s^4FM7B#~KyG8vcJl-5UC z)YO=k!{|`3`w6F#M>eX?sR_x};Ua$Z4^yNCB;~#gzPn9Cg63;mAh?jE2s@$7DKg?S6FtDPnJn-cA139zE}E4Nca!xU>BG1SeHNwmu- z#0Ee!^KZY30I(G>2Me#PKew=L1~nwtQT#;f?Z>FR2qfs)PP4~o_%T}}iTMoV5micX zfyLX2Z>n6mV<~ZxC)C9Bo)9nDGDaB6kYK~Ry4q(}ezWDZ=d-2!0aNAU>-tC$R5_@S zoc&-ku^C2DbHLh5-0JpxK|%^Gi|us!@B$tz*sfCFFK zc^7WStDN=YpHj~}E4D6VK;FV@;xJ1VS-|Y1T?-HjxSz#7FdIFppuVxh@*!yj1dhNe zj6wEhKtN}HBt=&%Ug~GwSD?3ZKI%5p?4HrVioKq(JC~h^dWI#^h$9?O4sy-g9X7b9 z*Wvb>C$CnBVFt*5W1X(hdGI3PdlIF_&Z-f!>DTxT@Kc|h}+Pycg8?!!JP+^ z4LhE}10fO!Q!092#pJk zq#jwt5U^DZ9Yk>MYM^?!5zC#DVW6(L6f~&WPb4lmFm@lwNy5~*$?gs18vM!+azG#Q zXaC!nY5TA*cT@^z3C&`T%lC;jm+BkD1^=BywMrDc)ET&bEi37%<<~#?& zO4=OH1Z}HLX}w1_z;K+tiFEQf>%&vHwxeXiP2v;mYf@UwG>^}O-9mLzv0_H7GLFt| zPtbm^MMF`qyDb%C8yq(xJ-EpCxhnx-^9>{S4z)^)UNMDQHMM;2-MZ&7GRruG$>}JW zu80e+ibk2?+U=OE9O*+)5@?X@xH-1_ui2RZNGeptIr^eC8kG0r*fyF}L=hoeX$~jj z>SW*@xgqkLM^H76arS}?SS~T-D_vjH)5)p^1dQZC_IcT5NFHE*1<6C&<5A{$^2>#| z0$~K0mS8g~zJTb0jxHr}^1Wy-mmwhW`LTHeWt}AzZqJJkp-3jH+Kn{woohS| z!(bWur>yJOg-T+MM+(r`h`~U|Cs(c6-8tiDmAiJ7Nr@!wC!D&O{{U&(HeH`+VFnp+ zB(bhe5)Fyi^;?x3fjSG>{{X9MnW)vzGR$#{Vv-6yK?OYZs6BpNPRQ`Wz6f?&lIooK z3R(6*-dHb=$r3(4q7}$|Pw7Bq>JuIF>p@>FuadsXM4b;WupTRdX5>|c8E^-Qk93qaGtGnwx;z+7PpR6cTT{ZYp zOaM^k%Zy!;M@}jb(VJVk4HT5HvXdz7YfCkvsYh^ zzI|l+{uT3XCu&m#gR`1G>YB}pZVR@JuUYf#>8_{9fSs!!Y{ zZ?Rrc_S4B8Rr-N>#qo;Pg(;?l-l(;O?xc!M$OOO4>;MeV0OutcGe(|@%yRWTZ5$*F zu(|~6e$KbbpnJIEFU+xj4(t!G*io-KRG}=g5?Sk%{G>66$qEc>ULID*0tH@@Ti|nQ z4AWAPBP4&B>tfcVIXVzzkL7{w z4T~}}$dEA%{BBFD*3j`EpuxN{8Mr>22}P-qH#w^ntabRUJf2=Hbx&{7szTLs#*9w5 zD(|BSG0rTtIY~-**eqVZ$ggMZuM}(|&uu`rVMJxa#D-+z0HqpJX^WhIPbjvwPgb=! z0dKB~>XqP1=IFlG_X{Ry5xgAJ?d|+447VT9AK<5N%n5oreL`(@jR~PfiSvNClXzc;=E1{vze5j6J zv#Q#z%8p%VrgnBpvugObQM_ihpvuRGp9@1Bri#q9*%oILrP*+c6}YdrTG`SZ^RcS? zZ>Z9LV6>sR8-oV_05&@+2<7!5=@r8i`z2dV4QU+dJ+oZLd4^S%ss85AuH?5*erf%m40S3#08rUaYMcUur< zZl_Q8Ql6$VU!`MX@(Qv%lpdy#XE31`bro{Us7@+-q3SB#D_%>NR1Ql!B$j}sAoqZm5aCVPYNW08rtUn4;Mk*@QMlyiew=M|;mW5ehd;$OvWjoTNC-8lT=H>=2i{5pO5c$?;hsTl`l-lyH7MJ z2S(O-s0>H+1y;l^xvwX2c6K*4#qKplZl_}rR5apc8M$-UStYXlDRZ2^(xFr5sqZ|N zN0wB|HN}uCs{Eo|RpwKWzOZsVN5i-48HgS#AW0Iiq;=4|{{XSdi7+eR1h21AZ8@j_ z2byVT)uLbvVW$Tp933ToXa!8#I3*~8Lm)Z`!8b*xFf{fOoc`;&(K-6+vTnzuVifsH zE2(mtKrneoP{FTWKZI9$fy$k3dE;W!tdf~BAj7j^wBjW1VT+fm`we9?o*MOyfaAo= ze7jfF=7@H(A6inSsmQ1gU4Vqt)f0h`ol~c)CTO%AdjKte4-IwHg#ZC@G&6(ye!EG> z6AObx61ROK6wlxBmcRmCzJ=lBGd1j=(zhME5U?1IZvv=}Tz_hm)dN(;?(?9$$57NB;n0 z^Bvh_<;#bf*Tr>hI{1wTMEpB~aAdC9n3)eR?e$q)Rd7LPVTA6*=G>}h67d$j3Trk3`=7*u4*ePOMzB;)Mc|)AaZJQ_7R7u(g=Kx8b94;yf2g!vS#DZ;e-wD-} z6S3e?J8a|%Asytq-(MYIIw)HbH%n^r>fn$^huCAp|8pjVK|RZ8kd@I24wW_9V@ zzyjbKylgW+w>;SK!7N==GzO((Vrfjkf*etsQ}-?P&>&8sVE+JVCPYr73RqGK4qnm} z&fx|mB6R9U2kbpy2Fj#5<;wCfz*=>@=pZd?rJic$ZO%F^!@`eZMumd=wQ(4_ObU(J z!(7)ohC9QqUVsoL(oCOJD`=;asKOUU0i#jl#Yro168+-EDWXXwwMzWmv5WUGiP?yR zHF!jii`nE;TmJxhZReg_6~Vam=KfQRd|EAg8#LQ8vCswOYgP~$mhKI%l6g`ZbeV$A zdG+mfwCwXPws51?A(bh&HOx*?yoqqZ*cnx1O}4B`pq7$(2xP@HB}xuhiE7BLEouh~ zFsRF9({a9|PEy1m%`+k$t~;rS*sHa*Pb9c#Ev`2u(NFuVz1~qSHTL&vsw@Cjx>Q2h zQ|zJ!Dg6D_v>3Urc^DYvLw{446Ce857ALP{me5KU&bc@VeTc34?St*bLz8Ybv?&c^ zkUHBGP0Zw$tv(); z^WYy?Z^qEbGe-))8jzR7+CYQ}2wGm+W(63_n6AeXaI%cbhTzeF%E4H}^3t1Xr3|<_ z=bfEQT>BlRu$Xjb>A1Lks;SDIO>R}Kl-HU*iE!SOjuA#hxCCqFY_GfQwc6|?3gD>P z3v>097q*BBX9kTr+YfU%+VD+kVFV1Dw8XcWFf_4qDUeV{u@cwhcaT{N26wa-oxq~{5j zUa|KLW~^IcBN<0CQyT?H+2^EPaKUb0$a%T(q$O3Vq#Kql$}^kdtyvOUsfa z{sqjSgrL)=uY0<(7XJXpflntE*Yjp%5AYZt+PMQ+$JRc^;tT6x8@|~^uGvK?$%SQZ z*L;unGCg%acylyZ`!lDTJYJark$K7h8Ae=Sc`+%N&1mJUT;Nziyq4NoI?36uX$exiQ&h{If%LZa0E(<)uytP=D*gAlfgt$H}wkkOdVU(=(p&_W9g^8_| zVOf}znb%$iCtK<+E=H$jXMt%DVbJ7iT1JxwTZ$wNcq^mFOR`cv>A2~g49k+$5U0dx z*4N8b!N7Bmj*K7!Izoyt^)XFPBOP%3j$HSxLJCd0YMg8T0Cy)ovyC%QAQ`J-caf?= zH38bDPS(y|J4j($s>d&5T$=T{pj@M%jVV(v}{weLaK0eG%D4#ithnaU(-_$Tt)(PMEzD;{C)x#ro1|pL}J}z z)@yN`;-Iydh{ZBUqx1CW=aX$fQ_ZDZh@euQ(=gs#a_RQX?P(jWmmIQfBX)0|j5V&8 zi?y;_wd%pChB0b%+V|{?685%FlkFdpm|c!cr)c%s_GH{&NVz#R(7#ht3#KOEb`PMqlB>xQ62JmdE8|ADSGZFeLSkp1j{8hHY!GX8aOQANchGrm z@f^)dpV*=MMZ=Gv4&O8KDJOW~AvSpD;)jnom?H%tcAY47(YdzWfo_ac7@>2 zVuN^aCx5y&*d^oqkIfC2ubZgAlrYqsa&1_A<2ovNeV%=T>{R53)IH4nJwZdj28!2G z2mm>`Eq!pBRHIq@NRtIh!NNT86bY-?0&iQ0PGqzgTG)`MNin!iiZM#7YDHXWU3rro zRtFQmZKtA2ph*zXsh?y089K6$HZ0j!Z*mPCrpL6}IW-YNxNCT?HGKuCN7L0a*r^w^ zKrGs<7De?r*iamq5q4H-%A)(s=oLw| zpw>s!^*0w^KnsDV)Vl5miPEQ(;E6U<_7*cS=Gaw|nu6$4+1k}6Z?jd~U8`~lz~ofB zZ-)e?)%_^xsbZ$9uyapk zZ^s5U+!u(~Jeb~FAs1i~4-jL2IyZ>moDi{R@(ZBcJ6cKBaiA;Ms;MS8u&)zrhbwYs zB--|=O;mB&cO!O zYO3^GRWZ%4B%JAsrm1r&gPE&D_o>VzdkYI{?L2bor#7D2}Cr@7q@X|tBmshGO zWNm3MohF(I(zQU{%GgpLp~Xk^+4Bh$ze(3%fuDcD`RF=I8bPuG3YNlny)DC&JXH&j zcveK|7EA7{CuzNwq^aFp9#BSzC(Tb4B>36A)#uG%(E zwN2`Fscr?9a@;haN_Gk$JZG2c_9BeIl^qk%FPZkA0C~LyXzsM-!bw1bqpL*tSYuHa9$eFDnsP^EOnw_ z4&OC!7@<`0`nOiMsfuqS7hUpdgWj1yDh$t>6Ujmj8P;>%=~Kxbe&P>vU@;sjr|W?e zyMZmNaDv+~2WTT-l|`IlwR4kIEUNv^V-oNgcEbih(`SsIs!=vb9Cq6nHTac73c0?d z&XDf`BSzU5cLTwm$=+p;{tq=}99QiNdm5(gYRU7oz+=_nCnIb#<9?sp!HUB@Qv6#_ zI)2{lVc)w+6&wV_RU`9jGI%oQZB=YJhHzc9>B5{R{O+vj;CM)Cu!9Y{+y+0mczIK( zqJ9btPSD(%u+YE=jzU^ouH^O$57%fJh#50)duj#iq#_@Z?(lge6IkyK2r9_4i%=R( zZWB96mbAj#ZEGkVqENyWT^DxG}YKskj(HejZj2R|Wy^ChxRIXRgcFB(WX`lcltsI&m zJnz!uUMUs4xraGi*;u2OE7`TGT0otBc9;It(BSXdbcu+UW154B0C`Y0j^#63TYtE1 zYGTH269ko@_PizfYMdf%1YlQ1wmGRAb~)D0mOoN>o{e6RkM~OmWoqqOr2}dUDN50} z!6gGg0^nqsQl=c!LmA3X%0pS}wX1c`vD-H)7D|j5B5Dbzv}W3;O3&!Wk3*8qf~!0Y zX6tpXO$O%Czmk7p4+A~VwFk;5Kf?M^K6YmbnD%Cnwb z7O0q9Ow8E@s$eIy2|$paDHk3~%z`!a0vt_O*kGNd#IqY33n+&7Ja>QyQl>tyu zMsUk-!JTyR{V#ZI-9;=?@#EQ^jlVcy`d!rAApK>`Bjq}CY;dU7bw{IvTYMTG;d?c{;30bN9EGmY$|rQrO2n z^in~(1px^O-|_tY3$?-vD0Xj>A~i|(<0yuFDz=EM(D`nCZ1n*rwWA>*fvY@P%0D1- zIe9LK&DEO?ZE_{GvWXY^ORBmUJ+Wz!X)1Z0&Zdrp`Vj4eTFUYYWK7q~T0NoRqTlKC zu^1AC+eAL5)*~F8W?e$3sCuw1DKS$b<TpQjmF*A` z{{Wvy1h?Y>R?56*WL{zWIFd46;d-ZBsXi{FAl1vu)GtW@6zym45in7CObfQNFldbU z*Lv>~rA7g0JXq3Wx<@(WElhNoy5t;7Ap*}$KQ~!-_%q~FUTu# z)tu1{A_^l_1MDu;If8fb<%`0G^1`y&>4|5>!q%)3%_~H`n267CYc?qw^oW$DZm_s# z1x*-scsVOe7JM$&L|GQ)zB4-?$gxoN$?=P}bPpi>N*_gGB*a*Bk|0)WVSSzx4H#Em zzbzMiiF!r^lTMAw$bMnUAz3<>K5%g3YlN7-Lt0Ks>&_c@6b;q1v$EnZSdCl za@lKAu~Ve4@6t0n=Gdeqb)K_IDf6&g?k0{;NIUFy4vn&&(@kpsW2ooF{} zks=yv`e7{BKU0|j`BUU-L9tHoEbBt#VeO-nScX*M5HS?=wsT9@og3(?NyQ?s5@~8MmWL3^ z>rP11DKL%csfMP*lRTIuQ-DvvWw$jrS`u+>0BW;ZCQA`w(d;F4m;_ejO~(Mx9ZyB~ z0A4!+1vyx96Jsi+)LU(HuJ6RWU3v6jQw_u8GGvEPXM&v=VWFc$hDXm8SX_5-dqN;nv#uiWE?$d}5K`#IW0>OM zFUjip5E(jx0vAlM{@AB)nAdvbm(gi*N+L6${{X8LXDqY=J(u{&24t#|U`c-A(?QR{ z&d7NnY-cqbg_gT7VX}wES7`+mV1d*q7;B@16n#>lFVmA&$_r|7Ev>lnL|?TJ(dwU3 zF&MZ~mwv8mStjjMGKZg<=<;)hKKfFgVvqnK$Z5AZ)l{nerRAqxRpqQpa3fW3;FEf> zk1I^6iW}r>fH6h|P|~XL>`HWVcd`QVqX3&hiTX-|0TN6ol|ZaI33BX&*gFowl1bl)9D1N)C^}|zAc!7~HR+CKa9Hb2K z4lUP8_>E*QT~SfhFcObA+H5Lly+1&gnp1=v{rBy(ny90YbLk*&AV7d=>kX( zmg3-HtT+%$qGecXpR!EeM}YcL7UBlII^uC5!ac#OHrxf=B&Hsyu;~8)5(Y9;T9UZ{ z6NE)Z4XjBJvV&F#rEfx)m_4Hag{>Sz?Yt>D@|o(|PgYupIUA?;s;k+vi_2pC6F4r= z6P793k>%294CIVau9uM2ZrQ(TdWbyO+Wzra)Cd*qo~ub=$IpXchvX8{@py;X2y#M| ziRHEGs8ZlBUaX{^<|(;RulGVboR*7~oFnPW?Z8RxtqxJv)r^#uRhHP&ER6MLN3~M| zX;a?zu|(Fb?se;}^cKu_VqX6HaSore<^kJdp)cD21&|2Us-6j;Cdk)~fKGXBE3hcA@HV zJR0>kh*X9*9=&o-IztdAPhLJjmi2z_E)uH|P{0WGMrEnh{FoeW8XJ*4Zpwf*x!>H) z8rlT%-6>v7{d6b-j#oWFdekZZ00;QC`E`dqDa4ubhH9Gm>?!aK%&)$w-_?Wi*(D}K zLlCI2jZ|1{Vyu8ks@k-Ye~VJN5A55O7gY$5nG#D<=N{U)tXmAF(G7DR+6*4?2T5RQnxWRbSTb zuPBk`0FV-)kR1^=bQ3|$L*rjAe zS0L8AcPjyQ>(9-mD?G@cBE7N>VVpbKwJ&RgN}myGTn#r6VAd0sKlu0n$}>Mp@_Ze7c316cvov#as(kXb6MkNP z!Cq$M0@e86jmy#vWl9780FIy>r7gzNhe?Q*OIPCBF!6O#{@_mW8!ENtKp%s5Yd(F( zUw%-qHOq~9zQvPQAPGGCK`+VRdt}BHE?y>~ImN1nYLvc-eNG-N)K;--KL-Bf60eK9 z6ica&MF8?Zf@?_Pe^iX;zP16@q7FVohEXW5*dR~UR>-HNtP+!CBKkT~hK6f#1DMvW zJ|wWCFJu6*Le^`eAV3XBR@_mC)H!riJ*bq;IRn1UZoQc&ANJ>Hg*`Yj3=U=Ie!o={ zaN2RMMzSSLlOa~iGuNrvCZaB{j-DEZ%_U7(g;;9Dj&}0K*i!OrF&X&E9Nd;L(KjB+ zLut+F9x}9BJLqwmFbkpexy#I)C!z$C+k&BKYXf989ZfL2TK$!4k*8QWAx3ou*`&+6 zYXJ3q?_G!G4n2j(Nfg~C7Teny)FGTO;+|O$MuBx0GX%C=EmhAWkf_mi9M`>Yu=YZ3 zX>6rTSrcago-8ESJ`&?Nge41#g?n8t21|klNbEGn5n5!*-mbhvK*!F0DIKI`XK5506kZU zg#h7R+45{l?(P83MkS`6(K;uK4ns>d0z$oXp;+c+XA>_N35-t-AWYZWi;q`AfN@u~ zB7k^tJ!-(mFv=;XYq8^n9yPt*ev^{jq;3sZ<-1#yX>bS_Yj&t?LOTK$tM!lLTb-H% zFp;z62bgxMs5OVQS!R--Aam3q5 zVkQxeFsjWtZmA*K;qhomGJ{ca8BwyeDiAdjS)=;i+io1g<{yaX(&@6(pDka#w z=H;?)QDVi;mo8?shu5m753<~H1W?qqUf2LGU2?J3sUB`?KSDR=OkXmXy1$<56#jARCk3o99!gap2mJ%w#%cH%m zGo-R3Y?nRegtT%P&^@!28Q2Ko130oK@_VkJ*IsDsJOfR@0XvOF)r=Wr3O0^MY@xux6VlkRN)Z4Qjl^wm6rT) z7OI`t>~`hxMMGF}XSEn{nbvAkr2haE7ZOp1@Mblw$M$o;X5;!LdM09(yPsjm({?Cy z_$LEM{9e;7e^R^fmOcuaapI+NVYmiaqLaVH$+V(Y&FlKksUI?uUKrS7>F}SGZE6Iv zS79<}zieP_Dx9gU`%0#8`a0DhD%$T!BXw~Cq0MKr$of<@DO|8nGrXtH8*P8I{{Zk5 zhxncD65uZgPL3szx#3AMxpcd3V?^> zWC3fK+-#F3In(~*u}{&Mk5KfJK)@V7OlB1iPvio_v{6S>e9!K*aZ^lq$t*2W!MgSu0bxwl49ubz(+roYjCF z=110ddihZ#Jk8fMF~L(GpSfm=6oyO-Z9y#))&5$;$>)5P(cN#~nX*&JMj+vH7`B1( z1El3^#(B}J_H&$uB(0>XALencZbp)JIbXYey%&G&#^ICXbp+#rQ%t+rUr>z#n)Tl! za+udN6=PxCYmLgLs7;|o(hdaGb8wq?A+JDxlm@Kt^kyJGy73*gS=n_4v~XwfNO7n5 z&bK={fE$!*Xn(kymft^D^;;{pv~7zD@uU$U$z#98FZ&8+RPkAp9PtDcxZnrmF`NH(2+QCG2|j43(iiTk9jJW4Jn zEUzRameAveWhN@_430tn0B&OSBG&dWPH;@1L_%La1WKx6IA z0R`e(K!kEHD|SPw#S;mW3uUx@2GbP&M`!i{)kIENzQ|!r5$pn*3*rq%1gaeM-FgKk;RHrygvcef}@ zAwJf+yKlu(o0LL@ew$42(rbN`iu~IqeZtA8uY;jZ6;$Sb+MkzfaVNq)Ow=A&UmxtD zR00nw95O6OAT2!k75JcqOHuVmwjU(8a9%a}Q=*&jFB7#i+p{pMiKBjW22sjyVtZ78 zo7n;4bivHH9zzARNd+S@1_L)$B10;Zn2ylH1nh?sO&;1ioUg~@n~61nS%N{nY_>U} z)=EkJl0^=L#OLIR>`a%WO0ep zZBIg$3RX#A?wSRrI23HEodhdBw6cI}1al8hf(Ygu#1;VzKh4#iMX8_-K(%I238!$>Ud2qIF5oo@9aI==rf_#P^qN$E>_n|={m#Q6^k_OrEsx>Pi|?v=;I z>f)wRiCiZ#uyg*J!LFn&**t)&id2PS=^fArg&*`)P!JZmBDG|c250IBH-w4>Zb2cx z+3RSW&&k3Dhi6klgq@}ptkRx3+3jv86P$7~vq-7vRWHfV?QTj+FF*>(Gl0?j^ry#F zRQU{3IPi$(p}?Rp5M|xWB(Gj4=2nAPrL8Qw2W)F$h{&a?oXS`hsOU3)wkAYPOTtt> ziZW0iYN6FdK1oe6r^@d}s;<3%5%4OnYleq!1fwCSsX+SL-z2?tEvro*ZNEELV0jSp zTh6G7Ee<0^PMz%oQFR09x+LK(Rvfr$QRgq+E6u5#r_b2IHF`u)wz&BRnms0B*429G z0P{DVvn6m(!P30kT#_S9 zzKoJ#CNoNifdkO$iQ7uBbEa0Av?%qbz=l*RoF9`~y=8tiL2s~lpI|LKK^NmOYBJz{ zt&K~`=8;p_mZU+>O9%9WTaIpg%`5{D#+c{0I=)?|gLm=!<*B(q?GCSxyyG*$(st21 z`G@3aqr3&a!Q}GAj};yHFhE3A0(-kgi9xHMAR?to71qK+{{X85x5#Ac{{SaRopG+C zL6-+?RW>?;fj=f>D6Lol0S4lNK51?~jnGbqH~m^)XD2rc40DGb6k^pSSc`*&=6t}B zBXT)M9(deOFeoXX>8#;$Jzzs3KL3P#W9%nrp#r5B>v=bn}eiX0`i(PZ&;PU%q5K#AX3cBdQ48f2~)_v!J z63?Fn)@!kZvB|*I@%%83a3T*~b!6zFAVHkQfxI&l4PpG3MH%B{_9-9 zzGE(=rX=uwi3Dk-lriepYq4_eq|Cv~t7xyq^O37E)vcgRy4~W?_O41(%`V7nlR|^v z5h|CS>A9yAiz;HCBtWC{p2uN(PE_!mD)fNKrtvJ_r~8qu7U#&9Lybc*{{U)obE9B> z=$okC(b8J0hmVWRMwFj1eh_NkK3*felTeAS5cBN7c^BYC%%b zT1xMnAx!50ILzO@*)($ZxV-r8p6bm}#sW)x=waL?fCEs*>V(itT)Uj78XFm&cA$Smt z742&lHIb_ze<1lJ>elT+D*9H6yy{Mnf7;cm`95t1$J9CS8IrrLEn2+IvYpbc6{x7& zZ)Ax@Nq$t{xW48!iwr3vcFKR?1Ba1qc2h8bt1c_~2AZ{jQk5smzDEj@IYD+g531Sw zZMnTh#o>54sx0`rDljgR{=!r zq#kGGbXy8#bn6k-ZeSOXh<*7uiO||kl0P-l&(oLKEe6*10|%(ds>3olaCI!y$GlO- zN;{^a8oS9({{Z4lom}fA{{ZDUy$xqdKt(RuPwMo5;YIKN00){=?3cE(0T&++DBFUt zq_{-*;Lxa zY)bH$BniN1QXvr zE@t4)wqjXKu%HhSn5akD2`-DcLLEsyZd?5xKu#8hs9&|-NTK>^X|%{KJor>I@s-(e zocJ_>>hkjf!MJ%a>bsnz-j!xb;zLGDyF=uACN}z(ALCJ*ZKGF^RZ7g7)JolKS+bA1 z9S5W9p*vg$n9jE4&P?FB*vO%_fGU>KS{8ET$5gUZG$M-4eYx`(oPuydl9r0t4lrDbfkY6aBcbWz)m03Ih}t5#7Nkehx+47S-B2{po>jNh_ibDH>08ohMY zSFL@ZndG)@ZUG+d4tHx`h=G$SG{}|*qmVErQ4LpC#ZvbQq8fmf+Hf3$+OCR~)h|$0 zhn@^^`bWHPsJFbaU1#l}A%ofX|ffN~gSBn6H*{S&eukn#E#vbKlhL&IHp#e9vx{T9Zz zfPJ3BjOV?eb39N;f8Jfb4X(-LjGRe{lWcOlId=Js)SW4`7@^fS+d8T-qATC8tG+hm z9G{!)h8g7&;pWHWJB^uy);E%WXWBMZa5ji+SwDFDAUoHnC$2GCYlgGy9YcQ$&bmi&NyOxw0vO==njKja4UCV?@fLa*LeQbk5W zN1u@DL7#@Tem~^8GC*LzFF)k+sbUVGPt1IuTp0Wt`8(!0N=34eXN6ZpYd-jsrOHYyr>rA1^1X*yH%)&x~sEiG8M$kI8;F46@L#%7*Nx`Bi5w zFwus8iBNK|zjCjU{-f-d75aUO{)JQgjsdR@_AyB_-k+1^zWLu z7j9O6n0(qqpfITm$9(?)RDRZ3tSq*VoT8@-8?QWzerWPQ0_G4U{J$A;sX2^;WwNhp zS0?8mDTQ3aCg0~(Qcv(|ivK`)sUDW;#X?=d`rG887@gE?xO-7rV zvTw<^AY;a`@qa1VDtV2~t90qicmVxXu>!zlL*x$jE1U2l9dF6gt)g&xT-m-WxtC?6 zxj3v4(3tihlU~6-Urw+!tvXbuH+%7KmHcMYZrfN`1m3c!oyfVrX*y8RNt-jB`vLv3 z$;1w(Wb^(ZmzcSMpUp?Yn(;##-_Oi98Np|tnWqdsW*9Fgx^)2OtNT;3Pi7lPlYx5| z0Zzq#teaXTbDWmr2Th{fk>v6xHS3j_Jb^dFS6fmhnFNO?RR_heIeLgHG{U84m`&kr=iY&*(ijWQxxJ>Xc7!;Ox%*O zS>Z>>GBR~%{iV4jDY+kbb2eYld2@T3oW-&MThAO(syX&}WNqmdGe;?@NN|l6Z5cb8 zO(v{`Um#zo6r@R1L9z-LRgJ8Y*X;tVt0)q1L#t-ni(1o0YuW%mqXw>`-=bF7aM@ShqFKIJXvq4*$a4CG)NgMnR{04nG|F5v z((dQJOvns*LyxDW3^s4>oo$B_{UrC9iH3RLbwRmvgW0Br_c2!M&RU*LXOCJ5ozo6M z*`<_8JhdnT#p&*=iMUh0?Z!Jqh{3wX@yRZme)FXrTF=; zW;aQKIcu#(pfGVxluFu)=ypb@T6F{Bn-w9xXJvt^q~@b=S6R>$C0B56Ex%t!u9b7~ z+Zky#<`Vorc)CZo>VD-O_PbsVT=*Y~u3&0GJ@K+~hvIpM07Ni|7y;cApua1a!2RRPKH_UcX9#VDFG? zZm7Cw1dP8T3DVYffe?J&B$%@$fi(QO0jb4HC)Dhinn-ZEDBZH< z@N;pA9kSTYg9)qc1^ka>tbH<3rK|Z`8on*o@NRx$g-;G#0^(oHp?R6S^T!*x!PGiQ z1hbv63ngt;fTf#-$nvQn&9mK-oO4a7!KVFKnK4{xEZXL$TMM1g9Ay#0c) zVG}<2%c3$c?GeZ$;{ibZf{Y3ej4iky@vuH8;z<;>KiEW{hN088YGqNR{v9l+N|O>X zKFi?do<$>i)kng&wP1{ZFsl9|your-q4{6O_PYFloQ1{kY(Z-6mBK4zq67p*uDta0H_wmt)+^(z%}o8_5*~*Q!wP0AMnSchaNnDXQBT9PVN+~ z*koMrw)66er93NxON+iidr(L={wdt-)Ur}uVytd!K7HJ>VZFQpbqjOGjiuEvnDfb! z_Em;{!Nrd~`iK7j#^*TAjuQS1yv^0+eSNv($(jB>^XCSS{{US0EpYz;;Irb{pTDx= zUS!y;mNE68C)(_%0tD7z3g7OPJ7--5!IWS0IObk`Gw=#ZJ_pW*aZllH{Gbzc%x)3!9U(xvKdl?_s;?NTv%q=nB>0X`e5NjcSU z50DqfE0%Z$rkc0fbt=;I#F(13S4;eyr;tx#uwlf+hdlAg#q?RW@56xSl0#}-6p?8b zej~l$EN@!;&%}1dw&##%H2gGXm>RozoIeuU8ccvg2eSBv+g_4;sz?exKeQz|=B@(G z2F1hpsPbR&J;(rK(&i4D=&{mrvjv&z5X(+;PZ(v*^DeGXhxPJWv>y(UvjfzxevYe!EVL_!(k*Z%<9moGZ;_x+xIe>nVbBa~qO0GyYGpd9(@=jgNl0M{tUukQvv z576MTlJkyF{{X}05uf8F;V=IH!=K|hUI!oV_2xq*{{W8#L`C)dW6Xg8@$&#=&N;?> z6|g`0XCv|bR>s$hrj>%EX}(0KhzBJOAYvCIy{@V!^eTFVH)IJ9l_Ba{-{6B;0h2SKwGx11?j|}n=f5s3j{{XA; zf5w)0#~J)Tj7~-$hvWNhQ#m1IKqn;tu@%vtHm%~~<;#*b43P~2X`hF(V1S+*`JJ!G zo_@>B>Go7HUsC7DJ`!ZbGMY2$TdAW;`Z~VND7Fb#A?2hkcg+(B1{8eTpOzp)v5Eq2 zepe}n(QrKMeoV_&r8LE4^TiATks+!o42U+4Iog*G+2?T2RAw~?k9qz5_u#yW z_bA%1!4OXN8wdg?AB_1O)5>zMUJDwxR=hsVrS(1T5Xs|~OfNl#eynkkzN(rEPi``= zVQvLuh>1(R#5v_0{7*ORjLkqT$BrGVmw;z7^E%pyI|U`jI;w{}nkC2fYg@wtKa9T? z7a!TTkk9dFO27q9E)71q^#%hR0Xl7MT7RUbcD*|7R?2nId;tRv_fi-MT|kZ1pbsLh zCa)*eWwZ&>L`CyNW*?C?FLHQL#7Uk3Q$*pAHW?#v67yXdiHhKs2Z_DS*BHA$XIAcB zDq7IeCSKyokBD-fRMk}m-bPyHv(Z;btCK5ixKh8LV_i_EHJG>%Z227GfzJ;5Gx9Bo zBv9HIVi&#>={td{sqQDF_09ZQjKs2YI#0^Cjw5b(4~fJs)ndllVM7^(II_A0PGhQj zi1AGOiL%z8fsKon-rJ3VKINMHH4j&8_w8kFD0+DVQSy@#7dV^je&H$PIkmtr z-o0+Jw;f1uvZPTsvm^@g{A+~OleaicTg@V>HsHjSSIO|%MrB$>HoIj7L%|CE+$|tt z?@J9%GY|oVBh;pD-S~nzB{rDk#~l+_n{bN8|_8XF3t#evbt3&waaw@h{V*xrzfO;4A$)T~_DRCa5p{I?SxX ziqgsd0O`g<@HXcrf2XS)0p&-Lx8Q&*PeC6Hex4ec{gh`uWAy5-L_~Z>uZ8UtEhL@{ z592%0Pa=!xS*zHmCC)~Vp0o3uh7@`5HJ6|I$a(WJ*puLMvmP%D442U`e3gU;{4|Hf z?0Q-BLzDA28DMw@aNN`W#By=)%nu31N9YW3%&@<&5zSa4$NPiWCJn%VleZ3_zk|q@ zZa=XCae0@I&}0kf-SP`ZA5;AYfwiHpb188VFJgnw)6^y`xu4bjL4sSVa?2EDx_K5sv z>B}V!7&A82@IAI@6tJ4-G{0HU@DAL*S+!%X%(hF{YoYdF51DPQTd9qI!YaoGNr zECc*%$V(rmmXjNdP_Co>IoSvPYY`0oo?h360?!%xYqbU#;;}y<{U{m`XI17jGxVMU zB_0}U4E~i*)}QKcBz~M}KolN{6LsGUkwzv8`WZD#YmKW{5OnyhEyu5qB$VL+2Om&A zMAy^p1AG~fVgrH6D{-TWjL%q33r&9&&*Uhe$ab0(m=b-mFAw7KvPnn%oBse9l-c&A z31j{&^5aD0C*yQ<}&ugS=nH-Yhg`ypX5kId2gfnc9CGXMR666GP$a zRt2=Uvy6Oy4KT^`KM&)X;3eC@@A$)LVx5|vCeMw8q@QJ`-xZ?m0+nB7K z`l(!$vsuH#_y&D5Ecl8(#EgteUxr~x9wGKF_(VYF{v4B6#k9n* zU#J2o_?Dcwv9piU{uihAQPm)1f8aXe%0iV2&EKawaHpSF;-81=g+E6=IPHE7t*rSY ziMBt}T}nfXutvmwp6S*2`s&GD@ZB`icP=a^%zOqKl4a`vra)Q0{!)AoS`Rs!uPoxf z(-^HIELDk{{{W@Z&J&mB?=$*e8LXalGah5~>p+wMG#k%N@NbR{UA;x07b>;r80Ju` z2%fuf(%K6Jojf!E1xX>h8lw~Y#6Y9ghB!1DlEBp({{Rwjl2pihd2^RM23ISPxCs27 z31I@I{{ZiL7xvRqzLK~=GNEAp2c%f?F(DIntd6GhFY2pShc0&|yvHzc$Jp`UdNerA z%6I3T78O4eN7?@X#`0!C#CcQk`BmB{&n+*Fti5&cgw?e19rgVRagf9~OOm+>bnQ@HA8$ z%|xM};To@@$EZeO@JI;%0O-J|KTkA5y#D}4Ca>W0{y>R;8a^AVhYC@pT#@l44n(q^ zM9+*P?D3NN8NMivvsWL#G4YfS3}i(7PsHHw`@xPpN5v-QFeBHv^zZY>Lvay;(sIf$H%@vxfQpQ>t`?N zC&8zO7^bRhZT|qKTgXp_hJbXNU(=tQwe>okXf!oHqn|F^Gn1Se&`0PdVv+4Xm4Vk^ z=)cVX{{X}(E*1Wh?{w=jGes`kOY$XPmHz-5W;`8}=K!7B8d%e+n^;n3;_c;9_Rhhn z+QZ;^y;%VLo!C5SzD`+d4@BNE9>qwnyF~2xG!U$^bF+d?lq><-(`^2a_@#-Ve|CO5 zxdeM{k%V}~aS&wn&g8nby=@fh8|16D+!w8=a8q0xRV;`#r^S-pJH*`!)GO6qW-d5t zZgDQwrTv6X!>T`&RXH}OiM})UVUY9cWqv-2`Kb@ryni2TzyY}!A zSZ)n%%4Bbki+ZJjGIw~nHlu}S33+A@f$VLZ-A%%SyY%mFrHP`TVQBvVPbkZcyK6!v z59!8{uc5fx78LJ<{APLRZ?{)1maA#3$eu}@6H~hg%CE;;r1sDRVf|XagkrRFAjHKl z#Ue?~+bu2_bv0^;@7041$PKQ|;bk_kl91PZ0X##Ua%t_r7|1#B2OH zKLg_2XL03A!Bz3pI#D9y#~&C+eByxoFVSjL1f=S42JJHWm(>3Ng&GiUNPT<}FXN~a z75Z4@e+r4N>dc@8SLv(Y$j1kfqx9;o;so>I{{W`7l7E($i~TZj8DoiL zUHWqJU-*tNC;pq%pbqNGE&l-1s+E(@T1Vpk6b->2u4CZ*DE|P{0$f?~76%dP;gk4Y zOF03-a>v7XapWAlKZugDKq1;E@ou6eeIE>baeU93xZ^(+L9h=2k@Nl^>>nhL;#wp* z-&ju(m*WX}pCKU=_~0ubANlh-plZO>O31w!43fcLlj_9a-~O%r%lRHa07(F8k@{VO zgJIx-Qly9D^QyYj9e~irbr|6|<+A`qt?K2;KsbK14pJUuw%0Fi2k{f~T?DCnd8_R3 zxj}P?tEa?}PgiMwuEf^bNWjFr#0O9m$uG+qIGv84RC4P+HLjgJ{X{TjIa`rOsz_I_ zK^M{g04fAy@&XQG`Bg?gkE~&Ot#r&WrMU_f6y{FuH4)-W8i_m@Nfd4rphO6v)6wUOu?W zg8*(YBhIPiF#*Cy0=RS8%~%i-%L|tl{xL%Ozk^p2WC4YNnSHCTHDN|6##;EX*a1F1 z{C1E)$nnQM1PY-8g8LGmMwYOaucI_-3U*GMl1zeFXJK_9nda6Bc5RT@p0Ioosvu`+ z6K&I0X;)IQ00U9s&2fMaGsLKq{{XPJ z$7I_53})-hjF+k9%nuqkL*r7VsNGa@E!=(1uS|*0sFuU_6=||LAOk)b)nKyhfaA}P>vgls z#-6h~VAg{;C!evMRtO9K0HC-ST}^t4-bkK#Xz|BW(qokRz-HTZOzr~!;A_^hRCe*n z1H&I>`4Yo1EI`hg`HChZ9zhQkT7f4P65qchLk|kUsC@NsrL@3EgDG3{{U1*9D3Cvq z&LCA|0m$$I0?)6x#xfHl*3Rb%wWZq*oWmwrOEMXVoC*gh{0$7KeIH85Hhn%zkRR9! z{yq-DDJ9Gq3nzc!{<6ZIW_k5xfjnB;FwuGPAl9OA0S^KO6~G`SYHzT4Rx(0xx1jQy8J9j#>{Xs7pe1@(9CP~4Pdep{ zUOVIKEOX`dVe$BqBs}>W{y&!`xZ{8m{$Ok{aX=eQ=RLU$H`bfx7jy zYSKtd0Q5+OI;F{wHEaI>Byc>anW{e@@yTuD+ylryKJlTagpUX`jxZ`lMJVT&0<4WP ztC(s~^pUneB>v7VU?cX$a6KZ#GO*XE4&RRRSbkX{f5%U-I4g-Bg(v?2$v|;Gj!xKA zPCg!A@q`9QIB*>NVQpX6QHZ1C5~nHy66#;Z5Dy~E{QN(Q37{S-{Il`IHT<|49)39! zxn;5*5B?pfZ)lGo6ntVrb5hj)C-LO{l0*pGSHk{0EacsKe&G0`CCD1O)T9C@$My*q zlBe*0cpq22g?=1d0F9*O)S#e1L6d@o*dXvT{0XtDCgcLNld@lx3&+|DbzqHY$S{MB zI5V0Y2Gbr+!y3l*0Ps_>*efy+6Ou&zAM?xk1+;`e9M6FQFCLHUAIpb}l6tUaW8)>v z;lnfMjT*I@%eA=i+TN+mLz3FS^-rze)=_aFK7;!-AX)|ZA0J8Xb}}Fy9<~1fkn>(V z4OzwhgWBVkp=bRe>?&9OecV9LQj!nkM}zg#sh!{bjzyCa9YR9QdJeC$9to;mE@%os zLolRFk0Z>Og@^!xhmbBi5XR^1uV~(;*Ap%g3G@(e$KP} zLQ%?}B2~$%L5ZdniV~KYpN9e(kNS&_bol6N0wNNB#`dNZ2niZf@XFlqpDH%_{{W|& zu77;n)j!8&>jb^Llm7q<(WffouTEOcR|F>s{{X;gvBUt?(mB;Io|k?+^A-yw!2ZkB zF#@v7`*G%D5~Jy)U zz=TUC9)bViwX`he0|EwupMIL>w;VY$bQ_-ZZZO^ zKEQFHXIT>4`3J`q<`**j5u;Gd99jez)oYc71_J?{PZkzIkH|e)#7_X6pNK`m#bI#{ z6nf^VWYW(S8Vs@~l>iPTVPN}PoCOx)Ual4ZV^(n9A95?j#b4W64LA7tK+MQg!}45U zlbkp3!c!!OR#PL1tX)l^s%ZWd%D@geP&5y`vfPS{3iew<(hZb|J&H-4sc%c9RjM%l zJ3(e^>tiM*RbcWUfRLtPlEe_@FU9K>2bi7gO2R9CA3Gii51g z#2=(_v#bZ69|e6W5}(FHZ|B!3c+G9&k-<)02fMHT0BKp1T>DB^(oBxwg}q5X@#$GX zuE?(>vE)^2R%<0>xe@xY2xUR+igFZMue9MKgTbuOn)`fQuRM+%0wVB4?-%8wV^(gU z3o(%+$#VMM1Bw6(Wa(#MgTE(FI!<6~lhoR%Sz26^o}>D&909pfaT64w8LRpn;Js2_ z006NLXTcb&wXUA8r2&|DxGodpjtdiAtuq{%2!cRxePQ_|sLEUU5Q=l3qREz9=5q5{ z;6w7kwDM)zL??sizzn|8E)|pI#7&sOK(m1?nWPUq#KS6B(9k2m0r+@udf?@7@$qDi zaRmUk)KKyeKQ5m$u~^4pvAO<{-*T5Mt3$Gn`F#M;- zAV7VoWIUQME4-2Ua(wfW!A5*q5-hXyCLm!W{>y<1iiAq+G!A}VU<2=vnQ}i~RuED} z(sW{{5~L=K={EfkHzXcV{EkxIEc*x1L)2==hRn5Q0r!%X=G-YvpExg58ChVszD=sQ1!3ba%ht9v{S!-F84Cc>O zrdUl1K)9mMkx6QD+;ZkQh{yXHlE_JglZbkn6aDlLaLdS3**;oskg_kSnaHRiEDG@O zK5kKRbliWEArgOB;YfaV%Hf+Ox2={14@4}1qw9^Pw7d@)sDP~cBMEU z$Cr*z;6l0w!HWZf3{jFPU+Am5ykbRpRHk7-A-(QK8>u z&7sA!(CjHEM-M#JNlJU8O6}{27gdB#z_E?=Y{m{kFF4C*E>||zf@U0YT>DAPyYa^*i^iet|qj9Rz5yp1aiBLf2xouvSF-q2A|e2 zQ%4xm@(=xH?J?u35e5FRxR3Alug6vTwiIHre1v0H>clh!DG5y!{{ZSO0`nsmkT2)X z90pmiXc&H^;QENIVsj_zDuheBWQURdtLmnI)^+6Z$Lgl8gE1Kd27lCVj5i?1DXTyE z=f*=kf0G$LMe&+2rmo;n(el5K3LBr@WM`HBq5Lv@eP+D7$9|~6I>n3Ek@=6+kB*Li zEoC9*uKjPwVJjdm`OYOPAACSh`ah@$@qnWd5Og8x@S{AY<~s@k^pcx=I}P$7T=Tw<~gU(O#Chd3Ck?Q+PK zmPNh{NBI!Z_vJegiEh9iL?CVsal^&A4@(}=8bcgtf+E3zfp}KI1;2rvEtS%3vK56~ zlP>Q_tLsipVhp!h_a!KABGq95+w|~g`X5FniZHVDliZ>941A+hvCc;p<-(azAF(}b9#(W0xTtEY)GQUpJ36XtN>665~>>+1eJs{!SWYXMEiA29)s;$}X6+J$8P zgXmQX3nHZnWOJF7*LnbrCjL5wGjm`f6a~>?!q=$gVs-!B}ll(%+o4zDJqst1|yAXGx~DE zabMuz$>K@doKu4gja$Er$eI}af=ydb)y-^+>eom|=Ck!edKO1kouH(Cr+h3jN;a?o zAE@66YYaWM@gLMbgFFez+MYu{s9zPr-U`?SG*|ku@r7h2#P2e<^*6e4=~wYz%pbC# zaxH2J`^wsbKioc@F3V(DH9n(abzdfYIGq=cDTh_NglI2KsUH{IYpK+1I!;|{orPHY zfx+^9!z5h;Cuxv;gX9S#?uEnJ{68VvvF7Y*{%l|A``$r z^^a>!Q<}A^QJ?DO?pwfKg!w1yFUDKLp0hI=K6&w4{`guTa{Qk}Xv?Oo55|1A6VPu0Bxyp}gEr9cW|Ek9?h*DkNLsT5(R-5;&3p-Q-u1 zfwHu+VXJ9AwLIzm++FkUi$nqwY!jTj=DK<1cRKMs3HgL49JHB=f&Ty|T~wD`nP=0#uQEA6Em_ixf_6e&~ZqL_C7scR_cWmEvF8g$%*W7YoQTIU(u=t*hc; z#P~{|$+d?sXHuXt#mFE&ALm0?(1@#mD~uyCg(DSMi4RD7IK43w5o; z=5?<3$}i=R7GlFizYVFA>T z9MuOf9M&ACc8;Lpoq}2zuTDAo3zB|il9oYOYD>x!1i9jOD~(%NCrIG!Nck-h9szAG zMvZG#nli@Vf$94K7JsjynjMx7T0+TOITOOT2deW=<{4pPRw{)!oA^IsfT&j9LK(E$ z&Qmu5<0@fb4=N$@K%na(0{Zg|SU47S02Q$j0f%ug7Hppw04@QRXRd-56FkjXOyI+- zfS<^q=gTyG5PYZOv{Y#Q)H`bV94WMfo1Y}yz-i={XFf}`f{Y4gxJZmA6oXbk+%qc- z0T(=u$7KY9s!D}4Tk=RqCAnrRIrkHsK*pERpUII^o72eXXUTPQhtMdwXXg6l8*nOe zTQA8qdn|U=eSRL>Ne~N9Y>+DcXRR6?G;TwKPqKou!|K^~c#W2=tV(7z5gzAM40Od( zaMkWLAd>>v1AI@&HNSl+FSRq|@;A4g9d5toB$s>A3WyKqC;)eTUcZ!l%0Wo~0G1_~ zzHb~x2AT`2A1AaVEtAE*p?u?7)PeCnKk}Vgam2WA{{WtRekGZ)y)9qPLAfH7$@8b> zaW#KKul$SVy0+w!uxLB}Z6JO_$O>PP{BqoinLxYEcglW0Tg55{@_Y2^PdC=3DectD zl@X`_{{ZG%Y5I-aQ#~K3TA#N1Lz+)NJck+P?PEZX=h|bOn)JO>#q(VT!6oT|u&?p`MC-IT028$*=F;DZ z9z`_JplWo{2qZDGn5JZ~C@3rdhn0MTK@ud$Rv-`kMfm(dD4RjPY=2UcPk4YC`5()) z?LfZT#&0#wWb#{!C*VGVoa{{FNUG0|+lrOxne|q`kS9N89?8j?C4iY=WzNM0>BV73 z6E+~QoSU*^CPq*CIh8C%#Qy*ztNKlbCp^?2kJ&(BY@lMof~*??2Z5|zQsuw|ZF?HC zpI-9z=V2Ng6=1|kpf7Yl{(QxuJ}^H*d{$q!Gwfj#?FZ_a=?Z3-@&%{yQY4^Vlu@ZQ z6(U)oYq{A-hNc11Wgbz7}jXNu^4a~Ip` zG)m)-)IX8MX|gg9NPeo`Fd9!zVMITv%T29*!Oe1H`KgRBjshZ|h5v9k$qRpea&nGVv&hJLxuO+ZSgFa;=k=5F>PW$x< za!N?n!%iKa)lH(1XPr{ob^PypvRiV!deH1|okHp=s%a^kMg~u=Kxj$wt*#I$U2HEI%x|308lrTp*{7|N|WY0+lFMXYe)mPo5cc5sc&o_H2EB> z7Y)SV&+3oJ3B#UWgg8>c+};C{wRPeAxb{{EzKS#R^ZK z`kA%aL)?^1G;Karw4)Q(UhSdd_nXh^c<)?o#rN0A)ZF80gSCg-wW)r8%Kly6Qx^T< z5t-CS*cURB$leHo(%{{GWeSa~(G{ zg_rJKg9F*KGuOD<)&BcBId#_-eZUuCuiQ~bZ?{9(CiZ3Xx@)OA8UFwyYTGyN&k}Z? z-|-llGUYP4=QEHLKJwE+%gkH{;9LC(SnJYWG4(>gqa*ebO8335%|Sn#7GhJBM}d{< z)zyLE2`nuRkzmsxDc$l*OSvhLi4<*Z#uP3-k0gHKs^cVvVh_Za5X>#$bG=U$CCR{D$E&CqDD2FH-wio?M0OCBj z3xVZ@`9*y)aB#iK2X61K{4>1rF4}Bg{{U@y@s(98_+_~vJ(kqCqa|l0qK>jUsv~q# zvCJhnl$UJi`k=Bd}{Yd@e7^52jo3`=HV;r!ow!O0r_=eKdR zs{k!F0&Cj7dK#QKv*uB~*kMEM)uskBDQ{at4r@=v zp$>D&Z)XYE&3esX{Ab9qwIc&Y<0Isc*r>_R*|^(Q^Kj$*Egn>Sj3i+;#;6=WH^Qh8 znO?EFt7>>&Lf#^J>ax;viH)iX?FsU$vf~PE(}yQSW&!dLaEfEuF^8=AUg8zDbve9I z`iH+%4P8xJ4g1UMNHz83>D7Fjc|GmR_6^D1y!kD8BF5sN9hUyuIh%jFmTi7da4L~V z@J(A)bnL5dCqAYrYR(#v24$3BSfx3mQ0^Oso?~O#ziJ^$CXfqOv0Z$IrBr<-#?OHT;)O+y`dCSSkKZqOP-z8?_ssxz)Em zu-20xPPxkxGF}Kw6t!oE1uo^Z%sz*eXYHi8Rn}i1-lyZA*-fTyXX+l}hLFu`LVW(B ze1q*+3dZrM4jEpeV-z1)m- zO(VEUl)cm>&COsfdoB&_bCHHuvidR_-;u-XIZv>=Nl&1FjJ}AZuX1=3OO?qRX9Jpp zkO-Z*WlJ@+ToikoX9WZJfWE70_7<0ORoa(7skJ%6TFf4_=W=^lkkraz9xhNd#lx=jo-;)D5*;8{pTYZz6$2QWH7Vj#->)E(A zr(N=;PlGn>g+#xRvB**jV60;mvXlc9CSqGH>uQ^btwIi>duknxL}Q0Nt0JIB*R%i- zM>BaG@SRKpYkEeAJ$?(v5;g5^6dFW(L-#^yB~K0ot+#qc2CM%7#DnJgtz;vPZM zJG1#N#OO$b)3EjK_2#Q!*Bx8KEUA*~-OJk8x1=4dq*}88Iq;VN9dhP-LaQOqmeBp1 z21nb4`RLR+2GOt*@etN)F=reWA+T@((3~EhX`K}xS8L3}-Z>_L zN*2nYNH0_!lm7sa#0p@ZL>s-=6LYS7SxdmpuEyfIT+~b$4>fzdNs6Oq+Z9q4#C~nQMp0IzAjk#}lGSchh24btUfbn0uw=&8kR4cjii~wTV12zC1l7>_ zGsW=Yc`JEbydH1bwPYaXv>0~CgFF!6t)_C5BxWvh>yX2X)X*-9sZa4axY46WS!RbG zNIpNrIiaRX$~L*ch#E)%DV;P1OA91U6UwDwJw|mb(x7arKNw)tabfgkJ)_k)C)ED$ zVa;DIStF8+Yf@&?cWccqql?sePSRanYzWv)G1bj3umuu1Tv?UWXONf0r&~o76hH-B zEMsVD2|%Ep&HUZX0-x-}SidpiJuM1EJY z7`u%?Qz!Q+Mf1{yACX?!-OVI@FRfu^CrDLOtsqK_6gw@IM8Qxe4W8?6 z5#pKifJX0o)TMq6@pbRXymBH+)q?6k9hkyeV44}+*j3!r)%%luk}#clm8+oC+$F2X zbc=ap4LGb>{#o->u}dW+Igx9fjCxEmHsJj1v_K00pggAsB^9Qy!3*lPS2;hKee9%K zfgIRRx$<=zgCXEw-c%VE(fdZM8=dvjj3;CPg#Kzp4$8qPaA0oyB~}pe<%mQur+!&( zFSe!t%3>H!$O{5TMtQSh&cXw)EY5yFi~^@J$0h7!BIYf}fxDJN=ru4*_TRRz@Bzjh z@?xDl!K6j1`R3YJ;DRTzPmb?XwQ*sFec6W%$MQT1^FLjnC=m1JR65^~7#4nuNdfi} z=}{c$h!poZVa-)P9e~vclBWk8repn0#0;M!^;(*Jz%%zN>n&TQsSR__=;-Ngu2(1N zUVL)2)^r9yy{0=U%T(ubz*MPFT%1@?zgF-mrfZGAwxvdsriO=zfB+I_ZhKb-xhp!k z6MV(A8x_bu$Nj|wW0L~l+@^}X{;rd$Ia8{9Z5NKW2e3>>rfjXc8bo z5~V_qgi%`!rl3$s@mMwCg)!gSxpn&26-IRTVe-)8G|QY7+f-KLQ#)7SZW$u@zn&+O zk8dPl!J^b(dnGxlShV6{Jzo9FO)1(9)e+J;HnOmGI*YBU#@eM+YrOtQ$F zo|{@kPl*+CM8Euh_~X! z<_W;nu~h92M+>Q}%}ChKoHY2m2F5>RkMKJ{el@~(R?27lOqmH>=K=F~r~txp!x)_p zlct8iUz&G%dXj8psP=YVuUmmY+|iPq*^-q?ZKFFW3oQq05^Bbu8whq6%d!EI*R4l* z-8!rDS6T3#JwggC8s&78)^6weUJ0L6&}vK^w8|mUEj4-i(3wBsNCR^@ryE~hb5#Is zw^ZtgiL_zU&X(T5F6Htm_?IvxvLuY@e<2ndHSDMwoR}_Lw)&06E5kU%wR7*y+& zA)I?fqvd(c6;V;N_}1&&DF#!`NMWm*nxf=};Bq*cjxAfj`TJ$u)nv+nTMvq^H2uq# z4-=pq-H?ApM43X>GM)fQ!f>%+iwh>CTR+fqoVt%Q(T5*UBylZV2tCl`a2r|_dq!rq z8nS%ScuD4`R3_Hr*G4coKc@DobEsV5a)`WU#R~45)E6k_aQ8gI+L5NCZ!ctQULrj2> zP%&o|(WC*#B}yDws?*vE1yK1LN5*q5V9TiO2U{#h#qzMzP@;%%)7E`Z&0I=Cxl7E3 z2B&1{oZ!!tq28&bZ4eiJ&e_Yn$m_?YLIWNUUW8LD}2ow#UcBD-k0(I42Jd|hd70i9n)`~d*a1aoDGw%!1z5GEKh zjDS|-cxz`4WOSM2->zK%)pH>hX}`n)aR&s*Nmw;X!TCZk?1_ShkxQBK0hGu$G0))Q33>yY|)n7g~9?)=4`5 z02L?(86S0Y8t7juZP{v1gXc0*K69UMCfIn)erH$EetG?=Iy1l6(Okdf2jN9yCUhcbp_fZ04oVk6G~0AdFQBxo5fARv$#K|F7+ z4Qm=M6$gnJ3S)K!W>V4Bl0J~fhtO^;m~a3UivGA638x9-!=pcRR)HW-wfNK;1uaeD zO(aX9Pv6)c3^Sw#4nR2;WPwndQ!iNEJSKp{lbm>;j_Z?^9QM1NTI#2uUh7Vh{{WIB zxI#wtdHQQ!(%PzMB%L-{!z7wh%q3 zpH)yO?35lASH~$t5e8L@Y6X&Kmyz~y%T(l(Lo_B?`gkiTvORDuu5(QW_-@J1!|alT zCZ~#fyUi4Oi`ajNB}0x{rJNhD?shTjrC5zCn-O5=V6yE(L}bS!@jNn zYcMr3Xp254AgXb4{v8%d? z7l{mObR_Jl&TGfTt&$``G6x_{jzNPYR}WP)tf@r`=5Arp)9wCj%Qc|h={sAUa}&zI z0WmmpUbHL9pXQPEwT@K5z>Z85)j2|kgo`%+07)46wuGCFQR31Ps~2>sArE1`tLRvb z4I&TIs1ARK$iPbgm>jTVQ=Uupa;*N{sUFuFbKXZ4Nvp_NT7mvc0iyi z>Y1T`Q-d2Isq`%XMyX^pVDK0=rNNRqg)#t7LKvK?aqLKfC+sJKNLoJ{)X;5vb;-&6 zpHmK|=7KpaJ}8KPZ7VEy4=!X4%3Ye!AOP#41k5AdQ?oq)=QIeX-aw;D)F{KgP4cPT zt;B0^R2n%{zwxVJ`Hgj8g3c~N z%?L#f;B7-q8cj}F)t6Jvnl#Bx6NOzl{h@=&G2P5+Oeo4^*wxIRr%Hf8L~1ifshQ1O z#Qjtf62YM*LHvH@AQ?RXK>c;YP_xCt+8%#F^pG>ty)9QiB-wIXWuyl!48TXp+_Kqi z&(;hb$O~}CWC3FAgXF_jIQ7pBW?pPAqQxyq`#?DX6DRG`sanjN%&NNturVerth*mz zw*LSC6#*Ku1g49-qGxCjWL)a#5kka(7-*F}CoeZTx1|IqBO=ad0w8RiSj-7&8-kNU zppz=kUkv0`tH&}v+=&9-Y-qWv=WT7zuBLrtziE9As8df8dgV!|@jhJKQC#d!V&KvZ z>DzDxoW^P|hFXnuLpLkW27Ks{R%a@qo;uRSi|Z~+sl_6O-l&))?YnLEaqYBUZtE2de;m-jMRYr~LorKY$S4GjYR&oM4rjs%`c2}AHt@Fd(CvXe`4 zO~WlWm;$(X4)z=#v1P8pGeqBSZ{*2(fW#VPoM#jW4m@%UuATg_VayCn*f{&Pw8=U5 zIE_qdOvu1_D^uL9jGwmgX=CX?k>SL%oT`-Y9s&A~05@ur$oQQXRYG~A%cVb|5W9+E zN9|8byGt&3BOj8`?gJho<12~sP>PvVS~9$&3S%N%hlGTds} zuZ_4?zwFqXwz&>wN8_}3Q5R?doBlt6_Z2Q$}uN1Qt61r12rZU=?Vs}llLk(C9nS$B~U=7v{C^vX?6%j0j_<;9xF z)ctnLS%F;F7JQP;l(nd~CftbppG2mAW?DeMm9DcdNnAXiYdK_lgAOy*L9<_KC;%Jv z43ZzWI|t+Uv?YKpGGUL%963pvkBDy)<5#rSdGwbD7g3OISA_6s(b{ahB$|f@;@vZ) zbw!Pqyi9*g&s=%Dg)JOnQcBJtWzA}-QmHo!df*N!vA^3YWGsS> zMk0+j$kO@`-2|xbluXs01k=m)@=$Xdh7{`4vXx%jd4lyYCZIS}MqSgB=k=%icCLsq z5TvIZQILtt?Z6&r#Pxy(akSl9^?Mm8QRLKZ_=Vx6+Uy$V6vy+wl52LlePqp;`#{#$ zxwZ~c9_By-ehT_t=2ulm?n?YYTP=k04yvFN_5MYhnzQ1OM%iY%C1yV>R&Bm_onoae z>Yh%SlrPOJZ8;vHXoMRO7LwS1X_*?MVI~c+0Q`bbqiWhu`D?Rl;wCN12TxMX=k<=l z*uF^^udrB)P`-@d3#@6@$(a<+@TGvM65L3r>n4=UFzd9-OTZ9$HnMqh-ir71CvaA3=BCtg@h>~3gg z;b85N2zds}TUI@5k0hsM%1NA`WGI%P#MSnNc=ycl^pFn&Vt5f68hP`Y22kRE+IvL8 zlf^Lz8mgM$HNB>4cSJy9O(l5B*KB3Y&vwl6YIM25act;q7_ON>o916{SlA6Ne|K}% zxcsKR|oMGLzj+QB+7A)msWwr4ZpQbwyN64eYlUrJllht@Nh^MH$T))cD-}T zrU;KQ@~eRB5E&G)HR;LpQuzXsUZ+(&?ryOrqmbvSfqCm@TvoMMeNH_a%KUw&y$zN#d5)hSpLA zZA*LcJ20Mk%U^V~1yO*G4p^LWdZ$qP3w(OWYD7?-H@-v)0!3puf}(6oTgN`IAuX~%@7v=U{4*i0A#}_ z_9~V9L{v`-N>Ivw>cgMhK=1*e9Y(g&={z{thkZ84sK-_No4rv!oDZ7arfN@Vi3k(f zJ_JC=DWfp!-ekt*-Xf@-L%^IQ9@_QjEaQepA1IXx`&^HCXXM9dh(V&_*)~;d9NsF* zoBNA6VIlz1&1{t*X0Cbv09gs+)rP$mh!f0*x7b>iEn<0i?DpkZNhQIU41rV{nwwLO zC?jKs%wVK*Txtb6S?AbDWMDZes@#T3pH@c-_AnY%HVKLa&9;{<8pSFvMH>n0;DQGx z7*mFWr^vYA)uCm&1_R&e7W z&8fDQnW+7GwJ1CZ$V{BquB}fn_mjgItNpuH(_Bk5sl-3rc=hqg#r9p5E0cI?HpHtO$yC?Faz<5aB1%UT&p6v$5(18gDP|d)@1k6rVA)VvflUP5Ahmx;xsSxRRF@fm2{nddY-=!fy1o#gf@)^_puDA+`>t~>&pux)E=HXe5 zz>?mlT-$ZCYZSl+SE|u*7JZvp1NKHomnL9r9~6f_ayXVg=>fj$!V*~ zz8*@+I%~LxwDix@L@sZc+iPU0tbUaFvu&oV`@aOK_=%}9O?bgdi`B&ap)o{G?~NqNbHFrN5^c}fH$<8h0C$^ z3G8q7)`RuJwI#mX^Xzt3rfOQ=t$)XUGZX{=0NJOe`2PUAQRUbH&a_M@>Yz<8)s!r0 ze)Qv>x-Xy99L&cQyPd0f9QySv&n%}V{L~5aJBWnUtV3QtRq_{7WUz-mX{6j-;GIX9 zf*q!O+%NVemX8ZI41#N=Cg zdXLSNL2kvZvtVG?=;$ugvVb*PIm04U=71@5Ev7kM$W33qp*v$p7g$@gL|GdXIQjeD z#GY=LfR7bWb z-CcD~UX{h%=yomyi(0p;eO|PfNcIi>U#r(8$zy256ksyIdU3$oTojT zYLisiXy8v$Ccmf>gSsw9T$Aeq6In zVKSTwo`WrD3SK3Pc2>Dcn|Wl;Sh z5Mu=l?UN$;eui|cjNAz}wy3h{+6pi-#H(mG9;qbuPyNGOl^+zT2-?qvrBpXC<7&f0 zKoP_~K=vk2@RUIBkE;77p4`=*IdW6~0FmoYvn3RI&LwaP5?Je=OysbGp&$I!b!J7% zkRGZ5gkRg^GMrRHt*F!LgFuOz=^dFv@DhG;t#NR7 zGBW^uK!U%+P>?qXCok5UnxzNWuheS56d+5TFVg0mXK^c`Gt0#ry z&=7brW;MOAmKv^-o>(ftbf>e#YS}IfDsL3977j~hRxqlhmZvBzmkJg}nOvbE{x8C0 zH7=i{NM=Ab{m5igEZSgvbASd;9Jr9Uf2E)pLwJRi6>E82EazTl>@_h?6Ua$xEfA;^ zYGSU{i$W&MbU5NYWiP2%Yt56L&;6-So?4{oqQ6-Hn!j%8mY`CdMHC?7SKLMo#u2iN zPMMd)HQI8Dd6YkACc82uSn4J}F;vC?XjhaWZ9-j!ufne(lSq=hMSjD$rm-_!js_4L za9%rO?fy3@cp!If8iI07MrcPa3Mxi=)6@Ahj9+W&VJQ>+_;DQzX_ezKN*Iv(oyXUM zVlB@G;{Xl~QLxPF%xw&0*(q!JRv5PjSH3CE6qylGll`uSg5m7xeB^EWohCG}34qI_ z=qX}0^w|VD`kj?6SCdrDy0iY7*w~z*gZbinD z0}abdNb{D^%Y*DbH@gb;$$MuG3pLs*YWS>ve_INvV@v!K)wPZ57KyV9AP{UqVEPyt zQsk6-r)co;r9V^Y&no0b z?w0Lp2_?a#`I`FudGKu%lO^X;lTXoy?NbBEIG>PP9KOd&gu~0V&lQ*4meb3-_8{Trc{5%SDt+3aBMY~(v|F4- zo_IPguo!CoKXOE=LUNM;lWD5B_wrfoo+NC5{3X`(tJw}_%39%6MMB zfY$4%2hK{OPm$~`ppyAHf<6BLT(dPC=4QKVZzP>Yq_aTw;0bjQC-zJN%Nr|ua+E@+ z2R=VoMxL~r(4i42S6#>cDUXDd5#z4_R0Jsb0_aTDn3WqR>W+vNFZC;AgYU1=B{o{H z=&K^?!D^qmix*{XCyD%uwIN&&fl2ZN*TtC?`B%u7wLq%n6Tx?3DD>oqoR4K4i5!t& zKWYlHAg)~BEq>Q`4hd%G4#TC%5P2@(WJme8pKM3*ov@qpBLJNu2P&HtnNAv5&Q{`P z@TRS0YMka(3N)izEe9!_p!~z%qMax~DdwMHRW#-g>Wg>;x))sK)pbx&g1~n1sMb^^ z=PxrbVzp)ah=x2mzrqk&OSTDcMs++*iHj_{QU>%V$FtN}9)A@Z4!IWlf8Cd-`*4~vk{KcGOFfbo8i7Hv8U7)4OiC9jWvMJmareOztgSR-T zQsD_msP#{%$ie2&ZpJAp0cuIi^IwZ?NjPq5l%<@Pl{rv|u@F^>>6r5T{-3*skt!kU zo@8aby2t=NccwCeVm#9Ht{w&WkEJTVJ)>1E5nVi5$lUl_m5?@6{`+)rqqt3GS zK#qAZ#~6fif0674mjq_elcuLAT79PK&V%7J zxfOI(RnG?NiKH$W@8Wm<*`GlvPCLrx@Tv_a)V|Dve!ZTWyynYcBM-+4b2l zp@WUD$3WfhY?vcI$aZa^i$)r_UAD%)G|@K|HFL?jPqN}_&6E6Q9Cn4wKRXyYlj|mGIR#sA96<|%VKbt>o(xR-izNbOxoa3Z!%EEViaM)lJ3HhBe z9YcLRw-aujqN}7nK$Q?r@;OqZwF;?8*>1rCq15D5wCq|Wr~OUiy|PJ7G=xh1n$y7; zRe*Ow$up%p0rqbkDaskN?*mfa+==tb{KmC}&#!E-49*m=jD^W3$(edw1O%*0hM6&R z799C9r<3pl+Bn8>LE$BV1c%y8lsGKQJy;g?ehic)%8f1R^V_N!(jK^E-Lhp5YMlWW zm8}k1aH9U}syY|kbL2eqr8SfDQRG>6t`&qS{DQrsT~eLujKGE`b%hwp9&7MpEd~w$ z03Q$4*ZmJl`*yz_*7i!szyZ%@0Lz0*4UrD0{>X&XmK^3ngA|>o{BvWBObXyZPlC{IS$ukfj3P^^@24h*gVYJ{aV*MOK4?tg9BrD z+UAjv4}iD&r^tVRic*|#Ws+)G5``aRMd#^dtZuZE>;RHv$J)A#NWN8l&)jUePAwkH zfF4YEl$%x#MAqNG8E!kuxRZ0eb9MervmdieQPcQ zh5732Z9$=7l(gleUcs8x7&tbpFQJhAWADD{2Z;`R{hD*ESkmqZ;_II+HW`S9oo-#dlfd}3qlg`yd>;s5Jd&JohIa(5LW!K2t<6}VohpoLM$7VTIL-y% zwy8nZd?{h#*C>Y5$Bf>uUT%6tUBU9b!{6>TrZc~6-~s?5BZ-z;4MJ39;Cy3f+$#q_ z0NtszNm0#Myfvseuy~|$W*@YXsjP>m##gFnwArd(9i(3y;XkRZAtYBJ=hf9~_^0C+ z&!U{mWeqs zYIx@@P0=?^JOQbjwuRTSS@RQF9TdqpEWXlO-L^A^vEZ)hdnTY-x^O-(Ws!N0F~^l+ zO_l|(`~uWe08MaxLq(w>n1Zp+2j`^BX!`Ii=hT1HMHL8Zx<^`|7$g=V4vIaQc;%DXQf^-AZ7|F=vIp9VK9jU6AFu{qh{^Nb12lD5`d~ zOuJ|64t7sB^o>C82IZJ332-~bx;80{dMzw@;V9Z8|wqCm@7INV4qLiDTqdQy# zfD0#Z6cC`&d1n-s<2_0&Q3H{>=&qF*3;3spbgZR zs8IcETHe*TeTCA=av+qMI$f##(NXXKzy(-VDo0fI-2|9XWg=qBq^Q$~1e%=Vf=K;> zSDW2kVDKPqJxtO3e@=mZ#ErBfeLPMG1d=AnB58}%)~uMg1$E#y6pMYoj|iw-r&;71 zxMa1nCrE_Cdx$=nNJWDwElZg-Y1SoUn(s`h8913bjoC2$j%3;*y|Z?P#kryh_F1>K zzO=~nf!d*Q@(e+%9z^fUj>|gC1^c(Oy8$zQ{4NDVGqgnH|MvGaa`28FRlgXfsZoJ9Ctre@g zSlqZK2PDP~TSSe7%y^ENc;$OuK7RDV$tr2b*RHHN*iAAYHM8UZA9$4W;vHQa7Gw)N zzAs?On+0deAZ2R`sJZ>vOzvWkQZzA#xN-v}T#^;7%pY5;Cz{+{q3i|;*>PpxkqFA> zXO9CjFjyD|Yrixtia;d9GMU%^0NjXk;vA64pwLFvGSPBF9GrjTNQ&0dVdh@>QLhXJ z79PbZt*CY|;qOXtlK~M;bI{to@*yd;s6)}mr`Zf@?Pyp2K2-|wd)C#ef&lx=UQ2MA z8ujO45HFrrOSD@cOGS=gi#0n(-~o*!2U|4$rIh8Z@b*jhlI7G2E9?a0#=u>){vzhs$2Y?b0 z!Onlyqa65!pg{UkV5U9sCZKHwk=b7n^%Igt?K$T-`{Fzt3mh0b{^#e{chP_luH5zr zyFZJoLbLb|N6J2wkRTsFN+orAt&>0dLiz&=%ZPb8`oD45JZA$BkX5o&qMz!*bduLT zKzm6fkTC7*G_%Yia?f%|Pt2aka-wLo##;8HgEUkl<}>VI9OmVQ=Py*r`zOzk;}usC z02nIUWuB*(GjOhmC|Lj}&6U_usXSN;mu!5DUIKnrn5mp;cW9+)*rc~#?uZTaGS?xCpP3;v5ED~CCko+9A(aVnl5KbqEaz9vht(CdOGr!f0 zow-Q+2ahPBf@BKLd|Cehi8*4d_XE)^^%fh;V#x&ZIb(S%Nl~^|q~~iVbh=3p)~Sj8HtSc8+zx)kGzpivB~zy_hg7rp{=Gv`o0EGjSqJfz zP!tyxOhM=Bu6tdoYv|?~oZ4z(ix>`tcccR(eA%dkk;MBjOSOej$0#d}60UrzmFMrr zPmTskHsH+jE$NljVJfa#Ca5HdQLIUv>M;VlV&F#*1MSTe zJ3W|_@zq7L+cMDgc_vqwAYAFog7$O}ngPJ3y8V%In1N{*ZXF`S*ig`HW{TyL>70eG z*6Q|d6XZ+IbsruKin7x27=Y*r#aPN$@d!qG(tJ(Q$%+2}s$t+iw$Vbs90f2VTR2RI z6OX0Zg*%z4q2u*60)wPVhU48lwRA&)ZklP+DM?xM+>lt#`Oc%Jm{i{lj+6w>gbeOIe^}B{W2Fdy*s7(YfikSbVqqyU zP;YqT0g{-W+V#lCX37>#(o`F)aIqo5$b2s@kj6#Ga*@ySz}1#HiT>gGg&cF)Sc|;I zs#fIh_0(kefv~D6r5*te6#ibpXT}Pg&L&yl$DoZOuew1Qs85S$?eU+^KEgvwb-Qez zDC{0d&W-ivTO<(>)ck*YO<@Gn{m@gur}xqQJ~LIWt3AwV;9aSFRM29g9HvJkODIVl zWmY{_>ff&fDy^Q=RKZD#+?`j+rJ?e%+Rw{7w8--ubCut^BmuFa5O74@ZS+u?i=j5X z$!DzA<0)c6sT0GUk!1BxfScPObziz_uKlXh$CYZ5bbk^Ull~;-F;9lSq0h1|Y`}ly zX8q*Loeco1$i7AKu>lJtHC2bA<5yPTet}@78gfR{2(k7GV{m6&Rff6BNhDo2(Dcac zIDzh{bt;ytj7w3 z!l@#zNhX?Kw$&u=OFMd8L#P zYw*QjN8wrRf*w+lcv2W~6tuuURJKl5sX_uLIlij;sUT}S(;8>h9h8Z%;<4VWk%wc8hB)E!8nJKxH}r8xP;Ex(!$Pp2%~G03KD4{^EF~g z30XQ=a*y^88Nfj*`Amd@>5n7>ub!da9BcRQKxFgyIF7vyDpbJ=W1T)?y0OGDjr8m zAL|3z6M2I*(jc4Ep$0MAwWXce>CFz6*b)!%?%E`%Q;t)beC$>@!A%eKU_z!SPliIS zl>Yz)!M-#&WVvy`rAQY8NORyBtCn~lQajs_A76pX4HcMxazG~Rh9QkmXSDV;Ilu$V zGOn9)(5{bIk21xHnCkM%H5w`^*)qMIiP#z=1!LJ*sNF;Bm>O*!13T^Z0+17Q`x>jM zA)o&GNp>o>i|PAp)$JD4VW53Y`nP90X-Y{`;bs2-S=^#930)C6^Z^I$V0j9Vc;tEF zf;aGKJ~Yr{mk}3`uR*O6&Rdf#{2(fqsC#J4=#DGl8dPGTTS$hTqWkV>ks)A~j_2$P-nyR8%zp&-|)nogEJxtj; zhqb^&Nj+2U!Sdt9ksPiNFXzC@{=gO?;|_2#{6VAeRAwKI$;wWmT?Jc+e~cdCl}WX> z6!3GlTN(bS$-DA~rfesjl$dzWuF4!g=@aFh4FFIvp!dAPin!0UtJlogK=hi;c$D&~ zN0G4({{XQn`edwY$ori#v)T2TvJEunKDxz97Bq|{DFHl<={T8Rm@gZ`rW8d4+;mSJI$*VriG0j$2PdTfwR>q?P;TfdARjgP8sTd$uJOxc zs<{Ir4W^^`SIjb7QjO#P0J(x6JVoBnRUfJt4Qe#zP6v6b&PY3ZyxdWqfx@aDJr!FZ znrp@(Oes?w!38N!&$UoKVpxN&kzBH_%$(|ztyvGr*^md?NA0+A^d(#n-^$w2l%N_4 zUo67^0HQw9Cgqo;=SC$H^BYh;XzBCcvPvib`yr8zR$YT{4=UKOaB1~`=tZ;J3Vo#U zDfOyr2N|R5#C&r|);6QB0h+!(!-jhoJNsgVkvv*acN|*l=aQh{qn}#AgguiU?>+X5 zyV3Q9KYF>$in+KZ3 zs9hxbn^OM(bqWq0Yz(y4o*_lKqCm=I6%*$*7<(cjQC>!LIe@JBo3P$UM=snl-=j?_ zF;qeAt;z!O3Gv;KaGN~E1@x5lWn`YWlfI?otNuSM?iE+`l|EVRz~uVYn6)yFRe)## zzg)!1T_OF>3{I5PAJ|thdnf&Mbx#ZLCy+v5X_Irg(!MNJ{7GKR8!Oc0rGT70ddH1+ z5n9#!j~2vbwY3r#?>jGSSV|d=s^#4?kPow7F4U=jri(3KFP&PcZd*ZsIUE9YIOG$SXGYieJa&YI@UqH#T+nG#ff6ev(Ord9MHlxGd4$ICclI_hb-8GzYk&TrQuIqXC! zpak*kl#vtX=?0kf>gQxie!P-Ff~tBF+1}lL%Vjw+xpS897z~w!ybeKIW&vMVf`gWI zVRouZD6|k->anb=fZX4|i%+$7u1qG50GV#3hg~h^-_?C;HNPK_^FDl)clHf*v;Zrs zHBk$n^^!ZJ*=t1{{{R?gxkxemo#UlI^>!Kh_OTm>rj;H&OONB_oGZ~byE=Casy32J zdUBsuhhSEpAp|*Nl~lfyV&@LIo+3>AnCEPESx=JBr=y5Y_YoshgW$rfSLGUDYywGy zaB%9iddzia{Hih<*mWlPC?pB&s`Y-8J2T^Uh^l@s);L=(Cu=AAl!RZ2OQ~q17;LNf z<*)YXd)Y(s>L5|Gf+j=qm8r^yo0g4eWU$S6jSM~9n7Axxl9yDLnw`T59j<8i(tRMN z#^=SBpYU#~vr^Qhx6jisxnbkuEGevwE>ncV<1U^`6^dP&^0*2#ls~F&wmqZwaB7!;aGyS z+N#yuiun(nVn%6VbK1(5oF7*fjG4oKFm5`q?s?8kO9cBErXF+2V!e(*4*YUqEot01 zqm5Y<)vk&1P?+jAHl$InFf_P>&xDus; zqi+}LTB2?ip%nqVa7$2d@~YX#h>VAaFnacp3r3&dA6BM#6r4qjR=ABx5y+kiY?vAxIaA}F z`S4<%zN{SbfjAT(F(@$x)C-r##c z4DY%{kxWQqu=Vye=1nItFl?w%9KT*OQgAIm*+kVY(_^oA79~DGvX+FNTlt#mnxy)j zNeU{E6KD0&%~e9W!9s52Yu7#=4>RoxojnzMDRPvo<|?uHH<`AnrwTpe90K-Oxs)z4 z;FahdMM>vbu~lh~U$ITU)vLtvESCDn1`TekjkKFl!>M9zz$>%Lu{{7m$d^UZB884Q zMz>H2KK}sBrr6OaPId-d-LsbJs58gsJKmJ> zv0bU3JbZmz`(JSSFCOCvTwQaY(sFE<8qN!rPF2dnV&5a4m&W3WY3jFDtA z&eiy>8|X+=lE^y|$&*bjG0T08bCbk-@_Q{*{b)Wod8LfzpeDN>ZFCiEurExXj<->= zRZgb*Il=xOkTw-H5>@CcF;l0^_xcTTlI(423d&3`%W}Vpvae=DQgH5Z zQ-mhqgy&-mULj8s7F7{dJEok>gc%Mf!yGtuNCg1AB+h8q;qAzUGjxO#&PnGnD7>|n zwZe$10-vINWB&kd7cZ$bFkXWH0ADM3Hw5rC6R}NA;wwMM_AL8TDM%U5v2$J}gU%AQ z$^pr9kyD$0WX%btvwll)vMkjzWXs6&43c{XD|pLNQBq)&h#dWuN+L<(e7pNM> z$QQL{2>S#5p3*+I8K_L(4nxt{3xchW$O$b=IJ6h3smD1yg#4FDT3$)%E}LaovZ2n^ zx$zIIR4AFeJY?*muz&7EN1uq$+KcN88e(S7bWoj~9H-1U1_~v4tS`c9oRS7cPi5N2 z8-kBmQ}X^?PNe|=Z8ZB}oWZ${+Rk$d?(fWFIPw}-Tzp|!AVOf7LJbC)PP;GuF;6-`I zpSZcFB-GGdQtZ%P#Mo#iXm+JQ7}!<8?Xugqf-AC=(Hni%Jz`%m;S(daa9dMhsR&##qD5XPOvHGVA;l;U|Kr1PQV8c z0UBwoiRgt!TBJ48wN9W(C}r4|-jd^mzIq?h&KVc6lgcVxYA_6=uuzdAEyJjtiLWzb z%>C?*s8Ir_Og_Crnv{7PsMgPhu%ctUt7L^tmjgr;$dF-fcpsTvlz#|P=GXfumL{=0 z0K!>!1`gwn9*89ss#yYh7|oIOHRDJG`x?_LQCqNXQrJ<583KIknaOVu$rrSNO;Kw= zM!7%2s(-kBk*e-zNvDwx%ZFLMS=Uo*S%y+H854Gy&v>EaqMKXYbwZ|LiB2b6hd?8w zh6hBM$qUEh7OE#pBmU00HB~B%Q`rpfVNo>`8pwNl9ezRkaH?cK+h93^->l*Xr1#cCjckBwYfri1 z+`zgr!h-lPqm(83^oRy_WR@v}<*$DD5z!TrL-h)}tCjG&P;!KlfW! z#Xv~5b-4AbW9K$t%&lf&BkL5A*X=C~2Nx4nwxW8du?`GK47*_}d$e54ejeH|s$2k( z#+p?)gy<%Nk*iUTTqeMX(66OI4+RKrK8Rje!*iO!VwzOZZo2DQlT%fklkni~3WF*a zV72qPOsfPuAJM=O*nRl4i11xbUY@;!(&kW3DN(i8u*qVKs3d!8D=tf26S1G7&RhUj z<_aVwjdKYe<_TA5|az?%FT-|@*r>7d>W@!FIHLt zrJtZYOh`q08AoqZ)5A1Q5)Dso#Ii0~czk=QC@FnmzVx;bjO~I#OfwU|RJ~OW30BTK8hK=2VnWZmQzmC@C7DSbS zk4GuxLhfTcO4CUf&?_Q;xftcf(a0wT^ORoWJP17lg7nAl#4(MSCSthHu3@)7QfI6m zS|+JW<=AU=r}+VJX(FOE8o*4mJ3)stPwa5yDjFk^IOA@W_2A4&D4Ec(mQm~IAXIUq z*RDjTwXj4qVs}n`%%F8=^;z|2Yx@R6XCxcO)Xa<(F5i6 zK-6swlJT){5&r-qnE^`-Mg|2elm0!&kQ3J_xdmmzg)>*}F;6!%!J2%7gsq{eOX}5Z znIc?8pDTk3ficePbx`f6u1KbGP`NBbJ+jgLy_G)|cS;E}$VfzB2Z`c}U4l|DlaP7U z1U{&Z$`kftRl*3Zz(=uhy+*YE0BCm=AJN394UT@)w@-z(r+QdzI3Z%a)!w%cXaw@T zN=u<mDmnlpTvw#TlTfIDz&N>prj9+X_j@DulLOhY-*{ko zrjn^L6io5$*tsC}J7GFbh3uZH60(GOW6)MT#0TfJ*=u%vN^F73cp@p)0qYuhx8jmk z6Rec3HvBB>tuVx6hfDeuEHSG6#?SF)gIyyIZB(;ixSqKXb4d(1xnc=K=D{9AIfb=6 zD?TTEQufo6G>#vdHQ)P<4y7_@2b1pBG`zUiPx>joX#P0#=M*03Jfa_xPdnS~7Zcvj zpx3U=c;!wrt^ucBu7@n>YR$LGKD}QiM*77Y>PcG0O>wsm>^b)vVV5S4O0b?vGj9;d zes-}<)+##W;!V=(kV;Kc5QX||NYyu9?`OdIR>)|;oZ=w{)&loVlQftDE5SR7_OG~* z2`1wuhpg}jCvh`I49E?=hMFiA3e*0qi#t$nMF0UQ>wdZHW&3kCkFCm2BQiQ%OgY@| zrn_Ur6c}mnWU8-=ot(7R>`$3;n)88$B|hXkxitO`%V(bEMDApo?F5+Q2|j$&Q+C(l zTU8{L#&v~H7vry-8cMD{V2M(uLxkl053bfvMNV};wFs24T|P&#qmrS>J&0h#*$}lM zU(%dvpKymb)kqmMb6%>M+M2nTKD(%p6RB_n=|u#9%fW|1vD2&?G7`y~R$YpgJh;7x z9-y#E&3?-w0%xxfR5T{k+f5{Vh3Vp5GAn~;%W`1TJc{&pPQ>It>BhE)F22OOoZlQ^ zWLeAX5(tWxoEg9jvR-*kWpa1`;q4Te82G&$sZ)Ae&%{X(f|?xo-HmE+=PU8f?*W)L zLM`S{?GC7gDNrPXJ+X51bq4_wtc^!pfAKSdb} zC$x~DrbQVAXRN8QyOLe?S8f>c7kMu3Mx+;GfQa8Os@|(W+G|T9e@THFeMlu#xUkgbLd1wfjc=6$tssiI*0nAGCQpt^z~>UF=Qbt| z9`@F**``2r#h{$fe#s9r%jD`%P5>019x7#}jQM`4_b8AS09nFIdUA7vy~<|Us+E3r%bKGISIdUi3q)yHj)pO)V z6B}xPPYsmorv|5(k>eR}*fcmQSwOpIRUbjImt3dYHv!3Nwbg6TJ){&S?~`Y)jbu8| zT@tNnVosnu(s5RtA5EZrD2 zl6T3GRto|6iuStIIi`bq%~fo}D)eF^EU$Rt1A9`k!Z%^b!ABo4Edo4DyND5pJ6_2C5b~l;0VdS2xValZXeyVeNww8KwLvm-U!O;?dU0WW zW~IVJqifCT+O2w=1k+K;Q|hQJrJx<54M9G{`P7jBzO9ACqm!U0*)DtvObITP_VYX- zGf$tlOIiL+Au9B9(uyB25&2ZCQaDnaVXD~eBuRg74QCfL@01BaP#C{sl>HkU_AIewjxJUY z$wDfU0Hb*qHS5?jNk_6+boUxi@)HrA>SNTPPA9uX6K4e#1)mwyuSq<9{9V)v1m+}% znLn1!0@bN36hGvZI019|%EB=}2UE3L)h4gEGgB=DepP*Lw$Ry6lMmkYO_%x$@mtqO zx6~YQa^-3o$-jp8=gl0hm;NZt#@JB-i7i3xJ1-n_u_vRT(gYPLx! zG@3G*Wk{6K{sXJ`#XbGGXQXqR*EotZu7&ky8%Kv6Jc*)Dd}HlTWq zD3LER$Pi0vaH2`u z5ABRM5e-GH&#zqUe!!hO>Q86&x2;@2Ku(l`aIgSCsZ~s4fCl8M<^&k84FQ>&^oizQ z+x>F>qw^~YqN+Ifs}`dv1dvpxgNA*ZCnV}hY4iJ5zhhM0rIKQEl&MK9Fg3dz3i_Qs zO#TO%6Y<@14pIa4z`;ZIeCuR0#c?qI04%>wsqrHf!l&#|NS0*QPRe$g=>ZKZkGDHp ze%;Q|ni}?uYs(XI;Ux&yu2IenDqv43xudN&j&SoeIYpioR*52{Q4qV$rrPgx4l*gH z)_jX)&Ub?!P z=l3B?`{^%aiA1{dwdb2|#AlbWrmy|T%fNKSiVz7k`4V!hP7F|b^V9%jks8s)84%n2a z!D@tBbpd3iAkI?#^!kQ4>G}{2&d~6d&MHua>#nw_E2ZT-r%))=)d5-yOy+JA_19df zH9<}8Ix>q=Vika>W54#?G)g6PA_blcWx&VFWZD=-TbuaegPct^$fpLlG;`*2#iiWM z3KVwo+$Yw%;kFYJG3)?mpH>=K>;2ngWk#I~*sLglQ-_&N-G)x;z)=$@i|-UH2Ok@> z9vMwcB3vuhVufO?7n*I7Wdos8l?PqM^?~a!;3O@?YQyWxl(};ie&Oo@rxjEw4L8mv zRc~lkT2lxZPeSU$SsDZnHm~T##9YOb$u7K;LQaLcbIE}lf{n5#*&uIhrY!}XH0Gh)Uph26i^98X%Aq~WjHLAnF|O5VDwrAKfZSxqLhlxG zUkDKxm?BwgSmJJcVu(W>#3kk>?!h@t`tfl;Ud0Yi`mW~Oa0coIit?6lcX0o%95Mi?R^@%s~j1aH2Q}(AI zAH#OV>wZ(SV0{OaZ6c}7u0UdmmC+^@d*>x9_akc+hJR@7Z(3ZFpOZ-#oRBHHkH=lA zhNvnw(1NEL`4XoA{s)my2ICfqs8aUAMZ}C?1B+Hv(<)e?%ZwD`AIsVn}z+)Z|B$7)TyF$F(Q8l%C`;y=MN^EeI`qOcD5wy2nS6qsOs7p>1v+jwFhh-lcF7lr*czl&>2j%nCunlyR?0Pk}=jG)qg zj8h?V;^QTrX5)oA+_k~N!bsy|a0Ouq4L)XtnrBKX&phm)iG_;!IGwfGQ1+g>Qy(#> zqNTRWXln@?oVdc5Rh5Ny^)O(9R`U4dEG_1_3gPXr>-HKURh?}vAo)gZokPI5!!s}Sk0cjQb>F46F zYnPJI0-4BEEEeNjrIP~!(VtUQ&*tSDgZ6wnaYkBrY`W7?nf@3Y+O(~?ECyM%u<1vDUzEg}hK{vt#BM6_dGm;V4VY@ynL^J?8C>#AafP)}zZX8uh0byAJ%1QA=6e+e)OYydYa@BHk1!y7QrR+b;s=78D zk`7vqC>U(#i@7#k#GQRK&yg!}tJ_|ljgzD$vZ}90C;tGB%~0(2vg=YgRXeR7$Kso0 zz(d^Hw`cu9F)aMn{R&CXNE=hNc>;{*e^6&#T~sabxqy#~-Lt}lE?Y-spx0`WCr@ZQ z67CvBh16)BC|Zq4<|;a{oqzPbxqWQ-`|Dz!@#-lff-KjP5vR|Gd}CJX=(4)7fwwd3 z>KUXlGoufdUuD#130t2<98_(@)h*B)LoUm_jv*UM*t=r{ zvpFJ%Pk_{p1BB=2%DK-s2@5F=b+pfROYfOztzOq83~8sz4oTM`bv5SazM~Ef5>huG zwN~Rf)ao&4P{Zq2X=^UmdP1GKU_98$ha|t#rVoxdmSO%Gws^iRJ)|WGHt*YZRaD$2 z(dC#9OsH692R6ZyWxk*Y(Ip!0!oWlV;YA+me++t?OQ|f1NCDFZQ8*bW$-Y0OHT9V{ z&9*TN^ZI09QtmpDES2(6vuf$Re{!L5#BL3ul{HGYnQ3o?BRmv49M7`MuUKP zdGQ_n3f9hpQJK1m>R_IJ(mNZMMxM3I(E&q)xl*i@elZRP(D}Jw&lFK=x{tnyjf&WW z&b8_rYDAn{6)jkViL~*=8l%MRWGniRwWUgR5^v3@mol7BQ_wx1v#vo_YBx9 z(`j-iF%$tgtrrUO2A3klR%;aRAh#l9>>yvVsmxYm*N;=f4XE8sqly^)t7@rq)=BY| z6=@V@rH0kAF-oPb8cA4@@XnJ#cY;?{&#lgC(%k{$hRS180lJh{(43lL#bwy`XFpt? zsuA*?^j6s(7MZmF00XLbO51sxwhotCMr)8BDtuIHf5+(c_A=%i&H=?nioJKwnnZxh zTM?OFN>kMKJ|{}Ls0Ni0RU`WWUqdd)&p$?e1D(YXo_&`Kyk#9!s|+4tv5KIq>Pe4} z+FF{_qgS+)e45Z-LxET+w`}((4UDOw+gqNT@_f98FOYPwLU|my*S)H|C~)YGdDgcf z$8EuYwtZ@I-XfwC*-9=;0<#vQY8z~}W>th&ZmE(a+f4_Cz57Zqq*Go-tL1wt6C~f>lh4ZcrNzBm${qeCiJ{GtH2y^~E<}O1st=Xmt_P&r zF4pZeRAP^4y_aI8ixn}furJJtZ03bwtvF|FjwYp;@hr#CAsE4(37{CG0TOV+;j5~i z81hu|tLd1h3alO{(w4I)i?&onLBs{c@?SbY?FFP?fE=V5Rt#YDgC(4+IL-c{y!qz^ zmqZQW{a6nZ4oJzovyg(jmg z3i^_%CfEHHyBZJpvUCchbdFd6I1uJ95@6hCkuHyN~d zGAmTvq?pn|4N-m40yX-t0GHblYrf|dv2jYK=q_7uW+0=4#;(~YX$4V4l!(2=ZD&4-LUiZ0jjGQDH>>vM zQM>krVg*a!$uylwE>xS(5-*ZeLO!C^)0KTBJyZeuXIM0u3dEa$`bU5k$^<;aj!ydX z$kYl-gD{|4Efa6Ske#>9Brzt4VonVDn~n+fEU;Pa{J&ES8>iM1-TbZjl_qTy%>Kgt zgqzTA4Ak;J@fr?I*}cCeXJU@QGCb7(0J4~MTs-baV5;!^590FA_U}>VFza=( z9Nvu|>D=ooxmy2Ii3S`auQDX{~NK-(A_Z~_6N#F(M1jl0)f%yeN4s(T@O|dd}XO%zf zdxf7g$2fon$>xVfCZGk+dstF{wwfXb>akPkR}-&kz`^cOH99Yp+bzT%zu|``wY_50 zsh=j*OIV@PrOjT|dxw$=U$WV3l`b(bC;)*~*D2DvxD2Yn;X&FfDb58A5Bnjw9GDb6h64IS=0TXy|QXzfW(_J z=U4)^NKQM0ZHkz3;0Z%AIYZly_;dg#V!8;xL4mb#q7a765_mu!EILJy2;k9vGSf_*|I~as6`y++HU=I0Aztg?aaGQ0@;lLTM|pwqyW_x zCkbure!YkiWSrb|v>ZA3-A(n+-O7ddxsg$XmtXzB1{!C{<@;> z@~RnZL&eTa`Fp8CRnMrf%SD9H6_aSUW2a>G>rf)y!G%;G_K_5mNX=Q@GJ4sk*nCh+Ga0HoDrwtgC18$y*w3RuMyQg98+jTkEQs%L* zd`UrO$vR1E&8}@G=44kUi0I|^*1uyaTRBr#S=aJ?YL=hcGMH}ovL4$M6lK? z_ORnO1mH^b7nf07v#gBuUzXQ@B#S&O7nd{SOs)K!tg9#+y&<7N3Y%cv9bID&D_AntH(^`$+%%Fhg43TIKr+ci10=bmRl_#m+3%ZM~8{5ZI< z9x>@}EOH|PddL8PhdvV-Iq)CL6450g{_0b1)1kRGnsekhohc&Y^lO#|fN>FNxe#yy z0X!3`c)49_4k-%zjG0JbNbDrgr*dk$&~haUyMbodWnVAIO^lM-fEd$Ay~+1zas8=V zW?{fYyktD0b~%Oh{0cO;w7!8^^Aet?3RXw^e@~Tt8qu$a;&8_-4+e&EOIlpgPy2k| z|oBd8ZFW98pqFs}RZ-(DEbkld$OptgvShuY-d! zoikN`b{@JXVjlpB50Fbdy7N5VNVI)n%mHP{+0ZNu9-vKN7l$5K%DZV zHN@Pddo6}Um+`zcGoC2GhGEx5`5Q=v{(#7G4%E*k%B)Y%I7*Td@^7l2zc3Tg{k^6w zm()}g85nlvfN6s#lMSNRVb~D7!C;h2)BP9c%t=6EhT$wVBB$2RzshOy5~(%z)^2WY zGUOTI=BH&=y~KLq>pf4%qH@ycTH0MzN3i1(-NC=9)jD5~wFp*2%{6PS=~J3-RqkK_ zf>5zmwJWchU;SxtK@U9Zb`3gKyh?y=CB)l$5AZq%>kdIAgDp@tzm>4HQtR+yg&klS zaPh-@U&tyPkaG+vb>*gF#R-J)N_ByYe75u|y4KXFOER-ykT+MHg!<6S#DU= zkk}vt6WQ2Ve$NOLJLC9RwdCV($39MaI!e?e7~PIGy8s%glM_tfl%CU)9%G-epEcId z$a{d)P;~6t1%*Iw?De>qKMHRa(bQLLVgo7UEIcdPE%TC8lg0ymLb1YWL>qb0SP!=1 zA0^+(E<^f$)kfu=g3~nMC%asyi}?;pc5CQy;3xn(9V?s?$|z?0pQpLi^ZRg(yF<)7O0T2XUK}jjT#X{ah!t$@V$|a!O#Y3d@cG zB(|;E=$?5J3I}&qSZF2L=ZIjUc^jG7E@sxHEyyztQd+WnqTm5{s&mNEGeCoY^*W^_ zx{oWV^<Giz9X{`S zJGO-Q1&B;LDU&>h;W0Y}#Q~{{U!-AGB!b)8ew%mg#Pl|7-z-j_Z_Fa!a-F<2E%c$+v&v2o$4G9Xpha&3@bXe_GV zz~onl5eCKeaa&UEdGi|-rXNrx4;7OvH<@rB)5^B9o92H|sXK{2MUP+CU}Z^=D(WN-$0iWo?nnxA(m8qBeD4#_CNtp zjt3jtxEO^;(>KWlI1@h7Ile`$Df5kxy~SSf1Yc5v2gzsL(U9nqtI8L=1^^j2*c$Dv zd2jG$bRpBUlF-N+_O~DfYN>!Bx7aL50{38XnyJBOk)NM$Zx#Oly&{Kf8& z%x0^Qo!M?MZD@hdeC__;d`*8N8uH$qfA;PdnJ1hTQFCt3Vn!fUnfSkyZl}v|yGU}6 zk?vA_(|Z7!x!H3w8ry2Op^0iZe9J zX!PxVYqi-*GjsZC_K!{)Ngt-CXY`$MFm&KcXWOo-J^{b;U*x7T1I-E;ANwU+M;K_BfqHJB>mptKc8cfyW|`5 z{2OWgVtUK{oP4GD{_(gK{$b`mJHApKk+%XKuJyb_ix?#i*Q`;L5apVE+l)li(*M({lpGA)rgj z{xPzNlmn+}DT}Hi`sy$oTTrd55#!|hJLJwx3x|x~*mw*${7(L!=Qr!{TJ}4RK$#re zhsORvAPpg}GQ+o*;cZ1a^EwZChhPZNmC>ENzuVL#BEOeftRxOzz}W1kxYFzqiOKR0 z+t^?1?-{-S0I8xZCWp&-Ec&O;4VK-#!hr*yDBNwKz{O)(l~KM!c%M9hW8@m=VL?$D zDE>x+W=T~DVSg$@SVqG)p1XMwpd3`Fimk--EK<7Bgyqu3CLSC(Bjm9IKd1(b-@A}- zW5hD#K1xH#Wz@?e-H zGO+d*88xQUQ9I=f`)mlef^oan{r>=A z@h5zafCWl*U;|yTOGuU{+J3_oku1@JC0>LvuYBpqhVUDXw0}r540J~0Z)sIK6vZ2i z`AX>fU zbN)={Iknlu=neetfRI8;1@83{ArmW~JnUo+uB8wKTUS?!)D;&M)sp~D0LRLw$pHFy z8;8&^VPwbiOY#^3Lw=nX%BYZo?0dvAocbK7L;39}y>G#JWX2rUpO~ zV_iB0#yrgSrl*fdaaA_Dymfbd`D)kD9p8MGoKTJk*R*_J#x_;p1j~jK@HZ9{%|-?v z1$c>&xv3qez z&4S_-h%3dijXXdOc5_1z9VfLp-}_|yTq^=G4_Gs0#$YVa(lt?Dl;Bo zoh@QyBGBjib;XeYP!E&nHYK045b{KBeL+WRus*KEG8cDNe9Gu_K!>Q0%k+=$Z0H_E zn5&y&8zEq1fV1WcYf+9?rg4K)@&y=}@n4#sjr^SG`kt^~m3$Lwd7~Jpxv%u{ zxPZU+0?9M<^GF=|)^9DZ#AT6Uq*h>CO3oQeiP75$Ovv~Qp8vI`0dSQk>*_d&evmT5Et3uN3=Zu z00i85Q}$FbL&NjW?=R13mPn3U!zAxeh?!QzK+LDe_`9?ABGh^Cwd=0FAYwa}ojW;? z*(;W3+ctyBL1-PKep41tD2uv#ejMG!Nu`sF&D?x*5i|LTo+sh=g4*GfNkQ_zGf)S&U7 z2icztqldm}5#{*-*!%};IsX6(&O<*I*oluY&IR8b*sFnr$Heuw8GU-^lK9`o z9Xg;v_W7jjk2y7mCe@eA#E zEjs4;Z^O4zbtSO4$^QTm-b;{Ebw|rT5Z{(V?k9Qw02SIb#GsMHQGS_K>i1q^Cx61Q zmp9NHwCJC67bO@PMDg{46CCmcIG7^7H~{$O$>{b~E=Vz>zwD3IJP7JvmKbJ6pPd;G z{{V)bbBL;c9-V%3;Al3czTwtng_>=!F-7X}FWPo4Ssr1>i1^0IyiXGG@t+*pw*n-t zUT5ML_6Re~d`Le(vS-@<7oW&nt|ZTgU-TIj7^!~-wdfPZGJa$9@$JA6;D}xNe*k2; z9|P6?n(5k>zUuHkBlP24I>o`@sQH#0GkRD^%UYpoE1F@MzB0aA{v?sl)PU9=gYNJH&1OUR&aK* zw&YCZKPUK>+h?to`5b`r<39=6{C{e8Y+lD47wd-xR!;8M#JiSHgw)b@fz6!O`&?xU zom{FHD6re$*GsE!eXPhy1~zh~uW+qfFM?_6sECp*^522{bzQD{u%#pPq%8?)+ zSqWzU0F!L4JeM3OS#@+^@i8}wHI|yd$woq-jo#XL0)z$M7TAi^NaTJe;4kTtnraZm zzZsP%DrTc3L9N_?IMP`l#?|uRexk`aA2OGrs2gYt32Niw?@qLK#K3sgy#_kvO8TtPJ z7`U;^nGc!x&0qerA2IPQi7X$3`V9O^;>hFuPd^peW0w>DLtC>27uvr3M4M4zmQ+MO zy{D5QPvbte&hB%GiMvs?4ED7}%6&bJ$es&6BjdGH1a6}sKeBA+;#@i5I@`JN!g78y zSG=KEG5!GlEwV0L%kqojo3an+Ap=jq_O1T_v91x*ew|90$m~{3pYS~nK}YHe{IB$_ zZ4P;(r^>%c^(tIJots+Rew767$+m*(hv0IEb5cya)qHbXI?YOp$o@WrvzZ}YQKSRn zY!TwkLnwNTgoHohfZhgG00rL>LF9NOT1W7S6+H{4ejb0q;-~`yE*PDsz+$1}j)4JB z>71mo&NvsFPt!TeDdG0NC;c@`us{WjjbEp*xA={&^BC7cug08e+hTAhxpW{n2;C=eGNK3ARlrwx0J&6qUXq7FW(5TD2X zMAiQQrzK7CoyDSgZZc%;4$Av@k#M)yu>bcpoeH!YB^aVqW<;l#~Uou9mW(MVUC~>Bcj9l;czgoc001(L0@ztBp*$k6y_~R%84m^fW zf-$ZmIr%6)9CPQfQei5)MY1*Z0AM_y;O-oexCpYJiZ7yoaB=f(@O6#{rcQoi;EWZX zStk_-!}3eynR%3-76oMT$@mZaX14b55m>L|6gH(9D7dpg;7JG%<363u0ZD!;{{W4o zJ5`X$c)x*7UQ#BI0D^gW1+iqPBOkzO z(_*|E9XAmTG6UBj0uw!Q11tK1Yq>jl}D6*(#TcP<+AU%{uK_GMO-+ z7x7>Ys#cH_W|@b>?1^n|vMDj`I9l2nrdH!2O1mahS~p9B3>fg9Llg!TI1_fTR4evC zOg#9_yIS&dRthC!TF<<26)9em)CLI=$z^6h3Q7ZqrsWf`=)V)z(4lS{_4K_m6tfYO zc2OszbgqhboU)BEr8iHS?41fT?j>W^Um5yxq{8PA_>K7zv zA!u^-!?l{|fDimY@HL=VXmMD1`vjwd&NQ*9;sKimKkR$=dGvhR}<%Lc@@JiBP@Y3!g z@IF4aupO3>xq3D5B_xBMbnHkeKEni$T{zHLO1V*1p@)ZO&`Rh%BPZ%uXSc*kEoMN2 zi$htF!GDkVgiK549z=d&bkO&41Y$zb;l^${nn9SBSw0C6@##s6R+GT_nM^@kNPtrU zFfG6V0LT-V58n<}Ak~sEZ}lQ|wEmhvegkCgF!c}2p_R1x9zj@MK-wHQwuo5Pa4ZH? zaJ;gnv03f?yA8o(?SwvyotDyKcmzvxe>GN9V;Zfb_~QMpTyG4yVa`+W^5LK$(Bfi= zz(Ib%2)yqTkS3T&a@5D?te9)Ha%2NBD-L1n zl+IabACi3y$`!XQJ#@0v&*KBl+TN_RzYL8`WUCC90aErdPLLA-5I5&=3iYVMysK9) zVfvB-0gyT)Ge*5Y7})HDcxM2a`B`-b%yQ*8*9@bH6bKyd_OrcCQb#3k%6>p~lYw0% z?Uv%!8Bxb1`?q%iC88cL_fShzgZ!;m$c<&}fS;4!xz^MSIn-kP&fg0oJz#Pww>2L; zL%^-u>_#Dtkf^-QkQ<-2!X7h8RR_r`;tbJjIDSW;1LF@M0wrUBd`k_%fS2Es{9>+z ztz(Zd@gw8X!tr{nWo93j9O^#sA%Z-K>Qhqx0E+&+4K(tvqx&fH8U_=pCIGEg{Bk8= z@*H_p@njtBF$@8_<1Y+>q`w?|eWGQIj(+6$%iE9oyw!YAKHKc_=D&(9Q;D4T&y)Od zWtDvncrFy48f};DOV-YKJ|R zll8_VLDT+0=_H6bP+8A|5Q~V|pXzqDQp=WV`tkn&9X7j>x5etxAy+XF25F}pD3)SL z#+hmX=Ai0-$CXmRQt>SR0LIsVPBSmtQ}JxH{{S8$L-F|oA6Zeczwv}OAdmI%J~)B= zPmdM+Q-z|}D+Cn$a!NB;vT+PLT&QdZNG5-KVRrXGU1%WY;(xt?Pi$?%ptU{S+ z;7I4-AmR_Olv)qfYgEB+syQsON&x==#5207KysCOtuyr>&8j&FJU@wYSqY>Kr=d~haKW&v2}y0KEIuau6G;oelYi~U zj8vvz1IGg1XutwUN^AcBZrPD5hZBiZX~UD@HYxavy(C{^XRQN~BGAKUM!Nx?ko;58 z7%+X6eGOH>{IzkZtu*SK=_~6DzF;mCr|rGi2`t};BlywvFlU+0BSxtu26D!Ay#zpOOsFfnqffUCL$hv zP9~ua9zAcA=MfcQEcT4Wp1(3=xOed}DMkr4IGr{0OLytbmQ$fd}VSAjD<#Z)tpdj402KaT;kh~TBe+5|?n?zEA+f%y7Nbi^en@9R)GnjVlk$)f!*~KO&)8#!1$Mk@18HL_ z&eeMQzWqWu^FmsM228Qz9kfzUjo5dQQ2AvNqYSd^0-r9VKh#*&k`&DIKg;X2;As%a%)aIm4WPF^ zR8PowwVoEyVz#oFzqA>y6{?3M3^9pl;WXO@-~$2K!IkI3nS=)6BFdmc{Sh~~44jNL zYA?h*u23n%0G{Gp3+q>CnKrzP?=t1X!_2P11AfAvL469w2PP?rDmL;c5-N9~e6#R}a` z;aC8EkqSW^=bRRGS?Lop!IL$syNB981ZnzQE$KB7e0FyviP*`J=+fNrnIt|l<1(~} z+8I9=@%?o_io^2H#xXxX{E25lD2EK0b5F<8(+nF=$NX^sZQ=g8&@2GR`FMXENvEDo zyaVEqeg@FNc+ZdXa=M2CG<;+eIQ4(!pBwJL133{F#@4PNV0^#g;Vp${YXD@>WGfC$ z9xjDyG6#Vlh|$ebRPP@W1q3S`5k;htJSP#xGwQB$a0@f>5w@N3i>8!(m3W}_F*4S{{Uhfre0Fe zB3a^aAo3i`@4%MQ4j1Y0IBL*D3gJAU zA&zYv;(n0;G6x(4dE`W0te3eNAyFySYmTW@y9Wk1JSfx&;=#u{5C@6UbY&L~Nsju# zV<*G;-~@8eYvw5&&ph~O2sx?hdeHpj!epf6hII24NyPCHJVTSXs}qA#YC*Jo#8@!` zR(#C$ksbhtEyD5{HeP+ig^H?c0C;)tNera1AtKHsGy$aC1bL25L_cTd7WRM+c=a+Q z23iX*vBJ@e7jOFJ9J?faxz01EUjWL4(qRe(YCKVfn*cuDf-)xi&`(2U>MXaeCoS0R zAuMMnjw4=iI7Gpr$DSgi_L77A31>m%xgI&VmUX)-!eqdy&|OAV>>n9jFH;gz21mqw zlL+aQ1h4?7kreF_19PEL#P?bnvsBfWFG!9Z^=&oA%n0|hAUe^hF;0nUXava0)Jv^;QWxtuv zB*wDg)*c+5ul-Z!3hQ?U;c{^B!gFWa75%P}Z4b2&^EhXt1a46avjm|Kejq?m0WXmL zN?=Y4`bhnrWu3eLi--i6>ouuE^vM93#K$2{Vjr_EJc-Z}xw?`MF(OAL#Yf34V2Ar- zJ~CE+QJYoA_TV4L_GjAgl|*V4Gz|$^G``8X@o@lP@hWkX%&Thu03ITB(T~gQ#{fq4 zU`QRwImxI#gaCqcAKZJUKtkQg?vsliDDk%8j)^;sMu})SHL24q>0`EWWV8 zAUG8omN~sb#^6pWq8IeB!nV6&y?TGDrtv+gNtyfHNE~h-KGgWoc{%=5D{)z1^6x)? z&2kNYwiUR`QKH1`8%vH_>nq)Kb z=3%f;QK_QacN-$Xg0-%1nJOp}V9QHI+HI?693)SZzAI9IOxgqx{A&R~xa-bjJ#3ZF zAa@rVzBz&l0UHm3wbptuQ}=_sD+Y9*ML3|bqSU7iEv8ER_bRqJNhtW{WOij zr8!(Gf5vrf$RwiS=g2+^>|{?-{eEk{Ew~K&*O3UH!`b#Xe=91JZnLS)lvu5mww?uw z);&$h{^~ktp@)tN!n@AFL2jFsWoguGWe7Bm@sWi+Yj< zuovrCr-1o%XrGu{z>G;P5zF1c2)@=P>HfI`@Ln(%vRIqL@qQtd zorXt&HzuwCN01zP{{TjO%a$29W9?J{ANLj;*ZCC>IaaQxayCU7n@NGitF|Q(qbmHd zQK%J}dwh1*TGl||=j2}{)lb8#QseVuwbI+kss(b+$_dv;v-D~U{yvjQ#WADBe2x)e zWJN(lS41E55Sv{?IiDqXe?}cxESX`M6qb63M-M?Gyjsu^5Ex8FLy=49^~*dlfR>{B zG`d4-m$3wysAVSkn;cy5F>q4?R`ON=uxTEw5gM`ESX|KJ6W|Xr&_Tx!`*RasGC)K0 z99V1wVp8kStha-;MM z9M2lQL4az%CTj8Y3+4CbBRSp&#~g94%e!(dH7nFy>>hH71LTy6HpA@C zRF!a-4#=ES;aPG_zsNk05f2hE%(!>}H~m)vCk&{}&%?q}YA_=KS*-Do>iZ+kKF=SB zkQgX2fe+_6d7f4Sffg--WE~~Tpv2T1amNz4ncQMIA72vWT4lr^FS=mVpD#0{;&bso z##!)|H@;Kpbc0_WZpbUraA93F4^x2Jgs22V!G|i!flBA)64cZBGY(6F;6L`lM>ACX z{jkVDrQ(w5SAY*G`Ewu@hDCq8U_$@rVTo?{4RN`d!B3lJH ztOkk@YNG*;zhYf>4PlRY{6Rw=jp_rrRC7_kYiW$h z1geBZP%T&?SFjS#J_z}>hlQ*_`3KWd9n7FyWG0kJI5+%XzX4^}^drO=4Ep~7tMLRp zxa4_#F+b1c_2T5gV~I~$t+~$n&8#c(j4iONd_<0Wu`ALL#x0Kp&PBzTuSY9~v?En3{QC5i*{5ijV#8-oSu`jR+U zFFtItbY!GDIFccBj^>c<2QqT4rd6Lde@QomeT9v7?aotKu*o0uF|{mla{(}0fbqyG zs$F5bG>KsFyLPn?IEWRi1|>6^eu+#*6q3dgtoU(ds~nq%f$>)C5`bJl8s~yWWh%Z> z&JrvG*T{L4xz83;$V;9*e_MuePS_)t zu8P)wUrh1o56Na9LyuA4V2lw|2)92GX2aNeOcUm#<8qEhN@vM<&y35dPQv|ajfRa< z`Tqd&fKGj06yQ1k03p65%WUD8n{S%EY&P5Ya~VB!Dc?`x#UI3U+YV2w2gYxVMG{&V zYE)Hdb+)WU_XsOp@tt134W1WZ)SWytf`ApkYSTmb@eCTVt%Xa^)V zG?s4K>dA$}jzBjW;%EVa$I7pQdu8Bi7PE0D1M0P4FRnu~>2LPIziUjUrK?JHUZ7j- zhP{^**Casxrx7iO%CytI5T|3-xqf-1wT%inpdb2&@ttbKF>5L+zI_EjD;+LWW%`S% zByj%#$>;TBS1Sx{);H3Z^_xjSm#L|(UNiMWTRPOg+iPKe>a0zO2sM_?L|>{JikP4_ zw~fE5x@5Y7=DZfG=bEj+4imHKG_xkI+NhGSswC`@(0xr-*WenDU%gTol==*PwOci3 z6VdTW>yT5gtg?{N>$SGT#%vsO?6a{DkY%{ILsis5=F>olNYw6uz~uPtZk|aL4xI<( z8+_~N1WYYYkbJG>SgSLFCq4Rogef}uaH|=b_-(S%B|mGf*({dHMJ98|s%7m`h*7Di z40+egH@`Ia?!I>G={C|D-<eBL!XLN zKxKjtB>3O(U8nTew3G4VD*P9%!Z@EEDqJftAYTCoLfi)c3kwa0kL63YC7YA&=n|@8I)3c%5JUr$31QmxF$vk#DEyRm3 zlDNTA#flObe$;swTnr?J$s;@nbQun$7 zON?y=kM6p)Ax%2_!1o$T1D-7oG;j0?cR}19JLS3o!6@z!QhrVG!cI^3RPzs-X^ETy z;3XHxwMs9qbw`~1$6Orvff}g!KAuT~J*3lL%ptAn41FYV@?Ab~T~r8pN6hpS)VYR$ z%YWqm02-@{imWW>`Hq;-Ok2CW{r><+(*ga#9zn4{gG_Eqgtoe&zy@kw8&=y_5I5K` zXvy>MjMZ9zd90oKf$@_?W|{?*LGvvIWaQp)ps-B1d2XMprMUe8N7pcpcI`s zxj+f|2g3gV6@KP}Bl$PQvavSWMl9Xxj&`{i&ey#s&MNC!WD@bfUdp%^>-z zQhX&DEkLI$9t1dc1eoK=&-#nBQdE*}_cQfZZCO<^&(_4hsMR(~OSxuW^GXjYFxY)5 zAE{f9rtqy?nfjw>WPOosN2UE}0=@hXZaZBVmW)Ws6qR z`h1JP{G3ROHoBh@`$Jz-8Cwn{}#k<0REhXB#%)X$kboAip$ivCSxPT;DEK>q-h z?Hb0IY@F9sx3RhZ04B0FyK|qjAv#Z9DbkY=ls_lvHVj2bt z{ZzbG))ybUzf}kVaLp#h&-$*zTChWoH-5I)7bbS{34c{KwxnI!)cF_8x9u}A*%N%X z<{L`$(%r2o@t-%^>+n9aUi0{u&o$p5$N_WB;kBPEG#G#!n^m_W1Ybq6w^P$oj)b(T z`F5U05tR-vHCtUC#{=qB_92QVLApskhFE)TtFu~_H9FZ_B?&qDeA=?1*(z;!4%im= zNTeRsaJ%NesU`6i&kVZrrnY{l{-W)0d6-c*j@f+3*5P}qq$S$ljcEt4&tW^dHTjXR zc2Z0E1s{+V&G8$%euukY^s7H6eHm+0Q^F$J)h`vcw&HTPY4*|J(I$Mmd$Y;wLLbjM zpOe09H6FyE>X7=di`EjGoj?PAL9svG zPc!Td(`M=_$K`8sQln(_NMp4wOW3}AG{V<;U&!{FRsvOZXgj_~yQ#$A-Dx)e0Lgwp z5dtQ+fWz_)s+WZwrG(E?YZ?SAa1qNwaolyEA*sW}G7jY?en{g|Q6Q~4zIyynw`V5W z>Tt{4m-8T|*RVTh$fYo?tarAf5u84|c?D90x z`kC@h;gK5D5=-P?Gu|fbYI79N+TZg)gVx#XfhV2c$f(tj{`&T}Ru8VCpw*TZHZB^D z>gNFRsNkOZlrkcVSF%Czm;>{xcE>0=a7i*)3b1sY-cPdJDJ3M9v=xukJN5X==Gzqq zC+dd%RdPFnjK8Xz*3@RkrJ*O!7WMZWJgLXbbkrc4*E5}8Ao$2}<*+jH{{Wm-ce^ko zM2lm+RxyvT)Q%UHGir*`Ct6p8S)R+kB|ws3~FD5ex+32Yh>VHkDPpe z_R*`f$ZY*ksmExJv#2rpvA_QS=;dIf{ZrcPnd#HE&I|tlQn%CO!Pi1~&}qZu2V8h&~5sV@G_lh4b3bGX^PPo{?U{{6BnA4Pc<&$-+c8FH>~ zZnyPaiTrl}Tw(o6`0ZcFnJdeFYoUf=JX_jX`K%6bb8sxR-#b!jQ*8cISICm3o4Z4g z%KrdUbpHS!*1797wz@x7-(5g(Yrp}2tQ(er0m=q?-_=`FclOWtVU!R^?2jR4ama~Z zpM{2&Tg1N&lkqQBtSSVS*9_PEi(!SknPY2f&ERIyXi;o}2h5Y=K2!2JBo}_<(4RY9 zj>ybIXHQjeUT+?j{e=GjaaGXnconxaEO1*_d0wh|kNjcss`X2|}euI+;U#)owyW3dGfOG&4){Yt>0GMaM3{{WbLjo57R2&#MjW4%xs-LvfS zjg4+e;|2K6>)XIRj%9K$g>CwA6OO9YDoCp#%F%UF_WJ}LGfzca5N%E!`xQ|BF6Qa+ z?Hm+85@#vG4%n;uPfvlT+Bt-05v@^5!M3_hM~ur}!1KYprWz>No79mqZ;YQ9zjIxN0fbQeH1Nslwb+^YR~)-Skj8tl>56 zm{`xPOJ6zdY6_geYdv$ncLRnts^%0o23LAbwxhE^_zm0p{wJ7{tW-)DF%t!+z;(kdu0pa?mfn((OoZ8@1 z5IOmcq5v7F97*|4$U_E2I&cTI*q?C+=Fs_T)bm^B;@Lh{n%N}0@|oSSWTQWA1;jo< zu?+C_OU(R_V>%1Ccu>EWJME#%fI<3)wTB=|tEv+H0N85N60MX}h=v9gS0`o^WPZqlRRtd4>b$ zmKD;6R#Kmh{Fx52O;v`}i#4cF01)y#B6)HHo3I`~Orfap>>Cd`IX|T6{C;t^+-v?~ z*_pCYt2tc~HZ{+VGNJRWxiDIE+(Ky8=$M`mq%6GbG#g4xA!flXieMSeV?BaVnbYem)JsI1edq zbwGr2=Ybv=P!1MYA)lsokr{IZJr3j+0JIDz)?^pojsRxjaABgQ2C5^XQvKEEsC4&Pi0CR4q5i#CiLN@!pE zEyQsdNS1GLI?6^nFKT{In@FARxC>+QI=+SI$0b3w_m~HIPy6en+4* zsXa8zXH?-t^B@m1?KQrwXZt{K@~4H-DYTX;b0tf?cDA>x%p+r7MNF&jIM6&ZpQ@Xd zrY!xWLvTPpw(O3HPOX^)=O(rm68H!dJ6Jk@8oNsyS^CeKaoif!?VdbkBn{dvQ;|I0 z+PT&7OOg$82tlY1lNcUa8DgFl98EgqA;;C@C<0_8CtC}|I)L8cp$GRSv|+P}K;~O87FjkcJ5GejhDB&Ms>Wya0 zXFBR`7bCVQ?~-ZAOTa@v**(EtXy%nK*Qb_b08K$EYGR*IUJ_;!!cRFmB$j*X1*$K0 zLc7r0Q|H0=x!TtF1zxw0mE$Ne1cPmBM26QMznCrBoqYi0HT>Uw+bZ@O3+lB;;mOoReNysp`ePre{`C=|8vFrm0Mhjh1k+^;P}e#_pmZ zG?_QjHDDU`A8Xd-EOG=sRGRCBy+6Te;MYob9_DwR)Q{b5DuwivlwD@}husfvt0m2M?s;U&{ zI)Tm;F6AvyB{21r?5Csq`xq!ol(Bg=icmdmM^d#7AER=mpchA)--|IRotK~3Un@KPh}un3 zLCVT0{Jgo#zUnM|BY>3)pIZE4tO&}CeVdXQCa$>wV5Ymme+cO3Dvi$uekPRgz|BU% zWI{k~FOE>8ftq-$9~iExPo<(IkBaUMCKFV%4R6OjL8;4Wj8RLd_~zTA?H~y9AB?md zf4Peit-r@@g>uYE%aueov<$!m26x{(0ZlSePOzi!roO4!25L!~P0ba{iSgDTcnP&r z?E8wE+N+-5$I2YI?=E)XYhgK8*OQ;Cinqna{zl|bkY4*BX_3wC=54K7i zrI#86N_17Yz*ONO@!C8B3UE&#{hia!3{`lTb~^2m-TRe04&v48OhH_$5D!RVGFP;3 zFQm@FATn>Bs_JlLgwoag^X1x|#Nhgpb5FF??Zg}{%`Vk%YoRnIK>G1@OF^{Qp>-cN zm!Hix^Bo}Y`|Vtrk-)-3?QysN0CQT2VDgNzI}X5IQvNeqLYr#$MfG(GxFLoso?!mg z+bZ})38r_IUkuMby+_a1hABNT_)Fv`MmU0c|Dytcv}TQekN% zw>rI+a6Aai0!qNt90VG7P^t_9e%C(NkSFW`elZzt6e}(z6t5~9k4Jza1^u5FU^2~i zLEHtw)Jr0wajnR?5jitg)5f-ITm1s8nLZTI3g#qAzgv;S{?5do zG_a5?LH2{vk6xq-X^}qHpzVHJv6z5Djfl{*quoh19k4a!kw3E!kw(|Ih&8TFVO~0g zy&{I^tPz=T{{R_)*hNMY^n%8!tS8wD0}Wt&j4{qTS{X)mPGXl$VfR`t)>PG-dTo3Q zc1ySGE*TQl$-;s)ItQZ06%8f)tNZBVx1nYspsu9>YyD%L73a zJs!2vRp^lTpNwn1)0~b4%hMc~9%>FY%K7O_QLIZ^3fybKv;YgIMyqMQWp&D-1nT4k z5Ve-G4U-ju+AASH4%?IdwHk?l(u%#)e%= zHC&BnHr|~8Q8@4XVk$B;A0b1ZsSa{qA3Tg+Ad{PeGr{w)nSs7KL+;s zu3iFq5AqPi!9&Z5k4*a6=V7SdkeJ||%Ml5?MSoE8>pp{U?HZ0wN&rxl5vgTS2{{!= zf>{TDh{8c_pC_LJAg?rJ%n2!ibuG$u2DLr}Re|b|OdqV*b&A}tqgrIoXe4?(Mvh&B zji>pN^$~Uv`rncul(9iAMd8S?{{YBw^0A-=ev#Hjr=4DLQMuG3H*sC1c?0Nit2 z6%ZWWz$%Ix>%&7rf_)B?EkzY{_cfWt*aaqj4bR5cJyV+8cptpN^P0*)RQt7dtW*K_ z<@%e46u7@iR15c9W$(m;(Id?Z)4VZO=x(`fv z*oJIV7%10h6Pfty+5>zbrPkRvDYD#tz$CT}>0N)p49ehATE^tk+A^fKWr(CM3Iiq< z>-t-s0}0e&Y2sv#MfqZuZ|YbCJ=XBcu)k9Yl{7UMfjiIW2aop=2md@o+ndEFk2SPqSZD~iyv@&{Z9XN&bQK&8?Rd_4Wvf1CoE_cZhPGvK zRI)v?0li#RmK{uRmjs;iqDjQ%+2KSfLb( ziPGw}U5&(zPz+QsKBY>5+yi1+lRcGW6iG!y4s~EM3J~Pw@=pT2E zkJ`u8k^s`pQs>00n^GrgbB_MHiE~i8vIc4*v2Mm#9nU|YO$RQ?1}7=@juS5X_>+)m&xso3G81P`2?-_xWh_D$EQnv$1OguKBbemgSHkHAR$ z`J({7TS4YP072y<6BLGpMV(u7MnG^FOARY9f7nh3fbCfF0_pY`NEDBeFOFK4ku0-3 zS#~LD{tjCK9iUu?9cq+#&RjTSvxAd@2gy@#qh#i=I;aw!Kmo#?D}5<20sczcnw{*J z=M+&B9)$)&BmpBQw3Nf<*!9eA34#P_1HmjQDbh_dVztJM=j_(Nq(lLx9#+bQ#M7); z2FxhWIX|M4RkD?Y?_;#TYP^@sND?tbmtjtORPkh?j2W!jl2MbeY6%G?ka@h?(B@P^ zyOtSX@@fKoYQYCzxLcX$+c2CmDWZsH)-tywv5c>F=VK~p3$T1k|{;*@4w4-fABn z%yf_R{!qhyzv9}&WjMj;^|{o@rn`=O{YjT&6{CGM53Iec7f>fL6wX$V9F|4lCEbxmxdBSnFhSfJuo_fElevh*>dIw{T?(XV$2jG_y)(E@ z!q2Xd29^n}4_jp=)jCB@#RW(*6XS-k01prctS;iE&k5zZN{52zHk*ISbI!1$Q64=< z;)^4ZRwrMN&8l~5YVwOrUOXo>DBrG?gB#QpNQu!x3{+>;)tT|mPsEbDevI7JihXD( zI=-B1Y&C1YFqjLIFojA-nZOE3VVv4$c=#I^wjbJnROy#k1Iay17LEV_pTv}Q;TK74$aEHa_E<^~%SR%b9uCRwje>^YO9#CjbjXm=AC z0=8_9iYV#sMpo=PU?b%C7Ehhd92owe-tAAwfh#Pu61pv%U19KbX<+_FmgN5cRUfrY z+Ig!p>N9lm3RVj>OA=CmkM&B1*XH<0~I3!x#>rC{210A;*Ol?a~=GBvnVOZ+g< zGw|qOyv3qTZfLy2t-v#iC6%~W3i)}Sf_bMSk6J9-Rt0L{simIZqG!_6R3Oh+9|I)yzBoLZ=|w58Y}E(T{m`<_H@l6{5<9#sy#?+Tm<*zCTYl61um=(I><~+AJf%`&Sa_J#?^*g2NN$( zs-B5KRbdCX*J{0zQ)nmB%w9O+nv}rIk4igMXWE-~Qsfc=gBd5Duxpz^n6qoGl2sT^ z9Z&f@u2?rUQol2}T>U*wDvo=R5m4tSxkIu*t)$TvmDznuX()x`A~62m6nTgwps2~H zfT(f_$&_4Z@>WQsv;aS+{8I%qKmaiJ$ncmPqe@W|ur5IPQ#rW3vKINlZ3dt}1AR1X z!#e7N7&{g!T=-r`I6rK#=emFf$m~qAI}|Pn_KOo1_LvGbuo1VrrJ}sVFX7wBPYK|7 z?dkGqn4}0&A_Hvk3nZFj98n@|qqH7NKnK>f4MCf-aYD*4{4}x+O?z7M_MQ?l(CnTI zFK#lg(^>B?jB6c#B^fD!)y9$}@8zqdzf>7b`i1fJ>Gqoc09beywU*oME?g1#AJVV~ zeTkw;;x@S5mQg99*MDPtdf_%URXf%_bgNYjWY(Te>gv|84An?A`zLHGZZ6gcIO4gc z+|2J?IE#1m;9W!2EH9CQZrLKYFuprJ8HCEcqNEwit!j@uNfkdAY!W$>ZLO`1N}G(TchOr9&{L3i@JvL9q&NlE znegT7c~;i+&pt^e#Ighw;^F2k3n0~CfTs>|OP#Fg0vtxC&9UT4jEF&-uxt8hszE_VH#iaPnLvXKxdjaxzS%W5(bW~z4PynAu0)M=Zm&?6+zH;R(dXsh&Ld^^+ z`hc$3Vsx+)ers7nSSoh|ZPf#cx9&N#g-WEGSKW@G( zlC6qWWlBu^l@@a7R73UZX6%w$06({(ji{Z; zuTE%T=Z{gSC6@y`j-eFzj**dFuQdY(q5vXS1d>?n8I2rEC2)Wa8b{z@D~pq2LZ}C^ z%=%kEN?H=6TKBnJF|pO{YFGH=Be7cnC-{ezI4gQ*$Sq;h{&0b`K;cL2`zk)_J~i64 zB6?O$Z4B7j0H{+C^C{o^bm3IV2HOPDAc6INleNWPO=3&>zCW$@w;HG#CFXHe0NH@1 zP=IAwO1O!a>kY_H#tej1ZPid?V10IS9j&nCrkIJNCEpotIyXA^dHd#zRK9QxBSyRC zGR(%h+HkU$Ah%T}uRmFn*;c2(!jq z`KW7I34)!mM%j&}TGJ`bYYe$2AUh0Zj!0O47ZjjwBs z(kyyg%oi!_28Y+PEH(gxiR)Dqv%Z zerZNnXCtHPOP+!yg+{JvmupnNEsJBBz*{+@bj~w09pkss&l6nb5TELObzQpFogyHq zV0vC|=@%9>cu+V>vgWo$p>s@VW5T+s+eA|3uN3Kmmg|CNw*r4?mnv}=1cWXSh1o#z z`%;dr(cxU&cHv1dV{#sTm-o@T+&n)qPkK_IYJ6QmSwOC&jl33=oXDoF#!N z5b!jXgysGzhk-j1YdM090rRFC_D@hcRKN_q#QF^~fqAa0YCo4q3EOT*7-`U<&OSifWff4B z5n@%=0OpQ3yICQcS^If(gtE()m?(JBw9J(OdYEEp#w|}iu8~e(tYU?M_zQxtCb&TI zhatUA59@P=8u^n$2Hf?A2>_mBRykxu!=*{Y(qMMWTbh}TMNHdQ&`tI%=Eg$CXyrnk9Xvriy;mQg@~iQuAo6u(-j ze$9b=?-%9CXPtJ`juu~mQea47Af*d@WBn;Bj4|3-ulH(%&x(TOtay;n#x)elsn$vl zP~p30;)K!0EP?4aD=ikM(i6{-ZFa_ORq0bywSnMT2ijk(IxbqE+6#F%Q)?=PRs%!@ ziI$0)=E`L1A<1^N1SAgoq4TBu)K$yJv>LDJb?AryIf}f-*Di%78NbQSzGH0mz85&7~9{_QH$<^cqUNawT*WzZ}QW1deNlL}YMSJ!3K%USzIP zSLCnHu5hw~BTy!E8xuL^-Wa0q&$HS4drShJ9n;UdoEpY?KuHSdQb>)b@;yfYPpV2N zcd%^Ssm_ibBWb%3p-BP}PKqTlqe-mVyfavuWf}hG$H=Od)VSyM6BS6autI_R2=$4Fi~sEx}`XOYQ7eK6}7@Uoo&ewX5qz8VtN#KNPr(i z{Y$8m=di5AKpcc|k49y4ZVg$%o@OurVp-MQ$<97he0=UsLC(q(AZ$~SSRc1Hw4H?& zpRS;Beq!X8QF-u2Iosriul`1FtXQn#TpFEx}8c=R(f5&e;F&PO3+>8cArvCu!6EQ5x;i<1pV6)n5sCy^r zSJI-XdemGXq4ToSUrB56fk$}I@9;>0!Ixo0nNP>z6QM+A<)|1N3J3En5?Ms@cX}hr zcoyf7QrxH*+SGVYP!Iqvi)Bb-IPukOCktD|TIB4F(zP_iJ-qGq37j~dFk#4o9Fc+% zTMwl`0OTNClI=d-k`PE&;o{?yY*ELQP@K%by)>CkT1G!W8f{{g5LdLDGL` zj8A<^97xe3&Yr21d*=jlAP7RJ4)C>mTRFUiTld5V~1 zY5MAK%#neLb0PnvQqp3{n#>_ipg}JRiDDCqfA4LG{Gk2VLUmS6=dVh0MQ&J?>uyM}}I`*mVQ}%%T&zEF81kJ5zhDP8-Ry_zjakQ;iV(qf&_t~IC4lH_PbXrF?q>l9fttRv zBFtDALK=k3*5M`${0q9K^s(=p2x;fX28R1w(l}~9Mzu;&i+Y;|#;u+wLSPn>wXPW& zIV{>si!h|rQFjr^SuUsW&IhdBmjJYpI_J~M$2IP;<5)2BJEp1OIwFJs+-+bPPKq5~ zLV!8(6ivfpF<^_&Fk&mf-b1G?Ra&vH`41T^t~x)*Dns>Ycsisbs~n-)+#4Zcf2^04 ztBw+3)tz(#mXlkGO`6mxV9=nQ^lKI*D6Ckf(Y-$;PCKa}VzfRkyojDR*$ z@>kj#eo=#?DmQ*!Rh#N@n@2crePsM8?LJuA-9_HcC^4sQx{j{y;BSERC7hip=fqrq z%TQ{_3Tl>hs;sE_y4!l&TL9VRx!Dk!-8$3a>Y+*h0PoIFXYJHr>T;B|Ql8*f=ipij zKf32IBS|H4jd~xP)tu+~^ zhD#ut@Ll1+^Mjnlt{^c(00dQbHav*4Qe`3lwaPs!Ir)auT~x95R(!^^-YD;x9i* z**agf`fv9mFHHXcb&deK`#?|EJbAS_cG7LNakPes;GiU*k*}rtdqL!yw+$KOo=g}3 znDrw~iP`lTkrVHctmuCtIySi`Hatkomb#1!0F!aePH5G)TGPdCebV0~Re`!j7nR<< ztm33n;VkN)N<}ZP&%JD!qcYY4de$*kmF`Y(r9OR^vDFFvB1lz|ttsg{U%8+GXRs*~ znK!M+*jLPvvD$rqbCZ>Pa3npFg~qlg~ugzo}(c+f?5lKO{8{YH|{yje5v` za1K~|>M;c6S!}0obJ|YgOSXXonm`^*kmTgxPCG>gY94REgSE?Q8(}y4k*-}S2F0EiC0SF||Te_5`}i4}jS1pSG^ zh~&c6T)Mg#Oeyh`#U!M(T&6P;)_^j6dxojB?Kd)D@?}#2o0M12)dv7;cBxbN;2)Yj zy4v%YM=Bg_OkCxfMr7LRfnbzcZI=DBC<$A{5ZhgY!h4Cv*mM}#7b8eyb-E37m=;&B z#$r0PKSsVkN|R*7x`n|ZR_|icm)zKZKgMilYQf5(Z5s69MG7|7O_%nlwogpS1mt1~ zVntfE$=vFo$iyLEBboG76zO8<`|&ShpG9LsIDX@;m2IcgNHv*G)D1yvlR$h_=3b|^ zQKa*+bW5Q@5GlBJ&>if7{zzq8Cy}{bJ|cXB+y$@+2MMgDF#XpaFA*!%nsM!RdgA;V z4eg3^BLEN;7sb=db9Bg1k;ICIP%=n?1oo>L9Q_D<#!OT4J*Wv~!frsWWlYmE_x2*? zJVVr|-H=(%QUE(OElX`6W@kR^>Ue{v{Ee@Y%%DFK_3|E0wVLWSq#KAZ z=$1iboIKB>({as_K;?4WZIN)1`Fa+vr5RYp{E03(ae^>1_+Q8UFOF!L(g#3dfc|=f z2_cFcO#$RzsVF%$%E6!Th#(pIL^?&9jc_Htvq(wWh`z+qIq?!^dWMq6B3bR~v^n** zN3uws=a)tW_1{8O^l5NEaX|h{24SpD<7BSJkUTW|Tu-$WwYDiXN&qD3l)!ATT-ShB z?0~v0Qm~+6vIUDxOb&?;*TeF2lP;r=feo=eNFzf*Ah2ZulWkg494HW`aKT@x^>gioUdT>akQ+#}DR42J#|SuC z<0yH(M>W_0l;~9LQMI@#7qwCKfCx3x)>J#(tvn|_9F9d3ybYAS>Z#OyIhQiDhc4`j4@ngq!;(_-NP4I34>82_7-b>`6iaC&D0oaNMDpt}T>_I;Pn4FH&97n7 zx*ihL4HE#(45I~-X=D=eGj4lFkjj~RTBvyoyF2G7{_v&hu&LD7)^2tW1cbIR42>D> zSkQ4XM|XM7Md!u02N%UO3 zSuVekCWes8$y*DUWGX5oeR(4f#=J4rP5^3F6!bbunwDX7h$Y^r2Ub9rxW~FNsEiLg z5K=?>zKb^C@>w?hc(h6jYH|jCAz`m%?!^LN^F*~6Q^ki`%dw&@9EW9Pk_~Ep%-`}e zPvaNeDA`u2RFj{vNy_Rod8CcCB6?T`;mS`8S;Sz*kgGP!QW^~)S+N|jCO}La#JTEj zR^q@xLnk(qgHjQAxIWuul<)nzM95hsEF06u;g#O@(ea&jkQCvXs@v1@>*NKW4u z1BGYo)<@<+{pts}jYhheng!qadmn8|P;(D4F2;HZN)Y7ryjVe%VA_^(p#IN1crDxj zB>EI3AOPmK9x{wV=V6%Ec+4MOyKOpBLnj zYWhN){f1uEri@#I8S40^uq(SX`4-biq;$tW zbX;>^n-pKjfkE1aTMTR1@{knWB$3vQcYjB=QCwWukYtjLtBMf3u_6*aE;`$gyPF~eaqY~zVB~@v-18BW#2q6~I z0TZ@tc!j*xuGO*-YdCfW7=Z|;BkJ;tl8`WSS@n=q=$EZc@p|8o5s^n(AyGj?UguFk zN)cm5ox!aWo)xl-TU|;0;&}1X$!mB^tAO86%49cuEF2ED( zrW(DR84-M%sRQJj3RK>gQ04>FpHK);%)7RBk@C0}mHnGRz{;Kos}L4ddM1SDP~E0Fy8E8L<4sVF? z7A!v%RGCsl)ZqLTny{vvgaK26a8)4}9~tP>1=1}A4Z@`~3>{J7kDr?oBr|5zwZt6H zs!YR=^dT|0AFx1+c;PIOftJ8?lTHPhF!P+^?A0h<1E~jut+M z06Jm<4=7b#$~F-{%{GnGQ z*88`LRV~9jMix+OT`*-NWVWF{Z7xApKO}*0FV#=7o=ui0*Smh;!9%rKlH^w!QG29QL#B(+@B3=5?{ zPE|B$uVMgdHjg~)wlkk2a+~MwNNxx@_NQYF3PXJ|_IyNG+18P>ih+{6YQmJJfMN;z zCkW|sY1rzvNnwQ*kft4ID+)?vz{JMA_Ak)+)WZ zVQBJKiE?&m_G3@>pePxAnoOTYs31k*HEnPXXUIEY^y1@HNY~D$i*jXTb!|;F#yLPs zpj_)|IoNBA&Q8>Z!;+6xdE8W?SYlV3N$vjt>X|ZyJLvxaHm;g0GBxpUm|_gWsD6o> z=9!RX*fBXzTDG|V0M+kY~&h%Q@8 z6mlD`c;zEx=A|Sy-5kN9Gu5f(I0FQ@<_zi$CC{);?ltg@;v*IAh4~-PiyyE27=nHe z2C@Y^HFERatxgqo^!bVUr<_P~^Gu{zXjlmkEw4^b9P3=dEX7Co%uN8{1h^god<)M* z6@!h#j^_iR#S4s#fge#XUrVbtj&_>TijTtt-`le*t3#{&&M85XV91J%!U4=BdgcYH z)`E}O&0kn`6czzE7PT=Z`WF8Hp*H#J+pKjM034eru7C`W9vds!MnoFW#X8)a=_BKj zAMP!0A{@9RUS~_7N&a;tBsV_JysDk9Re}(s?O9{QCsOt5=4WqMq!J5~v0Vavs^U-k z5hKX(4~%pUt4y75A(K@;*y}NGTS0g*`%x%^&y_C+qq;QODjjTHNtBcr5%eW!ceTHl z)N}Gz4)Jzpw}>>%yb7I^guw5^34b=FrY2}(C!FR{w<7UiQJ1B_WwCn=1=U*+C}V@G zCf8tPeFennBf`IOwoVxdM>E6REH+KvuQPVl*b|vQhy%s=0=S$Hoi#8ADS7w~h86+W zsVp=vs*0<3tYC1}6KVs`6_WK*kPcMv9}>vDgO#RcXH*RazW}51bD94D?qDsJt{5Dd z<;9w~$x~XU2a<&3fbXv^CTnFc?opeGlpKUf8T-7847x)ncY5;b^+7b|hQB_3)vbmZ z7T0C1{i-gfR8AC%21O*%!;qX)wRvDGi^ijf#sO4rmLQLG6zV2$3VfhM@w(1FZi5%21ZdMB0wTq>0&wo?DZw z`N6Kf+z5!Fs>Zh(ln+?*IK6hL1g0Qyz4G9G+8ruNlYz~({mllY6=aVT6I8^@E=@KA z%(X7YS?YqlnbyQ>(Xla7P1vHKF>g{hOMbmBqG~|0SduCZtR=$f=l=lPZZ$GqGqdCy zDek4E4-%^(v#jekV=8MdQrfW&!CSIOBlJvLIxZ(Q$2*J2B29VxwyZiBhC^xdDVzb_ zUljh*(W4C6O1uIzOz8$$fmPPr8eM6$E$%P1u_2shAG!_&)7E<(UjDd0z!c`GfZW(BGOv)OI;XK6*c%WQZ1JyLshNdrQra= z34npNRcxzHV{g%GSyjiB4#T8!uTg#0SNG*i+R0HWVI_=J&{Y7q+HR|9)U#~RxupG~ z<=D;=7Y3sGf`Wy@2BNA^bHwCcL7(EhsYnnd4`&RnQzSb$&bN>kJe;jtvI)fK$v-$e zj2W~z)V5dmV~6O%sYfC2j!8?NSFPCwo;;%Xhbj!Tyy(aHjRyS&7nNj&q7E}o0fG!d z856nFuyDqOXLOitM)Pujk%W=A{B|wK>`hcEr5Gs}Ah1A?I#s#g`e#|fWGK~RTZ+Sr z+SQ_(>oW$2X|s@U$aRUE0Mc$wI5`w`gB%2urP8$3{zFSLPlKzb>qCPVk;xp+OUG=3 zo>0RYSU-*!QK{6wV3~@%&V?bN9Rer%w`R?g>kj!BfuGci2{e%|i?XpY;@lCw)zy(H zhb=3s%2IQC-PC)~wJ8is_EYJXiFpE@ke3YZl4?{b^4WEM#{+Kx#F>&oYsgd%TkE0N zKBTA^xUzoGb_c5Z%RMFQ4j{HfTZGmGX0!>;<(ZjHgi%{taO6v4g{aFDhlcDB5^#JD zB-L&!0RROi=Ik=ns&NCKRS5&1i*w`93aIe0+6Cn%M9daFwxX3 z1Slv$$_*#vl#tIKzY%iHjRGE}Gq7k-7aULQVs|KWI*1s@zXQi3pDJ1?O1r4yOrdAN zPIm!Y*kIFH9u+9tRb@IQlgP^b=_jb>@a=> z6;1}CSDlAb0|qS1b2}l!a%}~wm6-L&Q zQ$@w*DQO-r1BOmMH?p1FcMgl)o zol@W^KEqRH^9cZdF0a8k$ai$qRJL9J0HWXka462BOYM3Ou{C4^W5DNWrhiB2vnf1W z2|2RRGyd1g5gB9!ra>w_Ph=8i36Tvh4Gy7);;0EVh>fHvmt92bGktsy-C}4`c@tgw zlj=*V>0L$I8rLPle8(X0U*XfosVvt!mLJGT=DzY|+=!o)D-!g9@x5!Q{JAwLb{`f~ z(xw`4peG(?5i?5|Z02=x@tNt*FnQRf0J>D{W^(cv&I>9M9GN~V_O&RnB-iI;rGjN{56NN&WSyIY zhY-m61?n8&s>U@?^FP3lPW$Qu1&opyFBGPR8bj}}Qm!oWK!V#x9>*|d0aYJFoEnYG z1ZZf<^ir;-%5}B8JYMHk+JJv=Bo^0b%IfFpk+&?P?1%tOuTamxsUE);Y!w)`fFVHv zN}0R+RD?v+G&l?jvjMH4OIX2Nlc|7DGao-@T3FZnS#OREh#97ql7=ZsCBTgiwTJgQ zOqbP(aBm?ZNsg(1xmvAwI9A@MGtsCZ-~g{ILB#3Mr80c{{ha$?^cQ7{|Egfky z5d_qhC4euTvX9q&UZ+yBEQ7gI=Z9C7#F^1Lb}sG4E=Y87)(X5muA;eA9_Tg4gPw;i zA(I~M$Rm@CHR}HjW$dxR3YUXel}6QgTZJU;Y?-Q0gCa z7_1u<$|!vRK75MD{{D5jO(p~7ZM`2M;m69&G0tPR(Ly*fNq$1Z(Fh+Q@GBv15J_+ zd>@cqZ}tqyB}=urxdndMF7Oz#z?8ySw{bqz85RC4Y~T{r-Jhm{`v}b(y^x1UuzN;< zaEdBFx$+4BDrA5b<8wefsWAu%CT!u!w;gKsKvJnrW5}cx;Zx8ASXYl;0MymcU8#nw-#bSJO+lvaO-YVC z%~OsJCf3~fjdlPDLs^*4Xo}zDfX5T^TYEdO(7hEgUeu)E&Dwcr6xiROTT?(hKnsdT)NsbT0 zWT5F=iNz(Dv0Z$fP&6{QfB?WamU^hq3VQrR89Zd_YqLFHQesd$eKc4U?;IM zOQ2o|3=KvC=B-XFbz?5C0MrXWyL_!6XFIYc0>#v$4%V~OV;0aba!5swdZ(Bv;AXU< zU$Cd~X;F{{r1@d1*$lZ*wxKUGfUP*SP>Bx?3 z$FSCc{(l*x4cP|jO*roAL13lgjFPQFulJ*|fc!r5WX~@G- zE{>*A&Vxgs-Jo1EH6b+azP8~`mVj_9E;RE`4&1tP!bYB8Uhi`R9vSVZGBcXZtKzr1 z)@CnP1`K4hI#5p&Hcyc>m0x)T+XybEi?|F7h;Y;HF!HM?3CSTi6%|(VocK2)Q0r%N z5ZkWj<}!eKlAV592V3D{mZIyS7Xa2kcsB>hJ~)KhR(nkc2gd$DI^S?E0;8}fpR<6A zvhGtiq=y&1qxI>~=zrarO63nj{nh!i>DW z^6XFCJ#Db)N)(q!83pHXY&^SKSx#m47T4fhVuaOR24mrmFuCi(hHhe4Ykz|7S7iGt zKW~$&K@|hv>|{Trxt;YEL=R<*jI;zyp=$3C??zodLD?ao!`p1>YYEg;EqU~~yhTYp zY)MGu{D_W&7Qga0y8wY;VST?bwblHBw57xYD=-%k_Lh8eCn|WQ!d@JxYxwcxF|Cu@ zW634s<-z{|k~MNnv{pU6txHXv2apU?`8jf)LCj7$tthO|IgnHVr(`=t1Z@{MP(gw{ zf}6+<@}T03xGN2G=_!n|O4nC{cqu~O)5|-ZGi}3Lv3mh?x3?Zqv|F;K%_DG9K#hwSUF71@}aeRDdwLu68^2HEonO4bd{`}brJZy)r1-V{^r9p^To`=7%8{w zP&PkD8HOaLgwfSltX~3WNYV{%0(VH<^8(`|0L^W4Wj>^0qFY4LIRL3<64Nd35&k!12KfA+x?N}Nh{&MNU`R9^$*i0Qm`NjBr8%+M(C%ZyWWhl8a+!A_lCouVis@sX zQ)60qCQA9<+OO^ELlYtctDAhwt|*+C_2~)m->+a(1d3tHv_MTkgGak#eO+~IUkRIK z*$&zva(&6Get6)O&0^=)pg~gTk0C~KRZq~YH^5a2!+EDUFgaV78b9iv6NU+{A?kZ4 zqD(PZ`)ycQ&`o-|hYXer5jP`5{-(bwnW@36)Fp9bC4()stC#-I#m4=w?bH*TB!9Zp z0Y9=okHFkx^5OP*puvqL^KgltJ+bZ%07LyHNAQsI^-iiM` zwHs&19U43niAkY><32xLS4RNO3EExCarn7}G-+)KMYQtIoY$!-+_hv2KQ>fIGC+Sf zZy&jS4A=GJ?_g9QT-oA%%ej-9M4co^*3=w~SRqzr&QiGviMKP$DN_!=K5G6)gJlr9 zdO#DYgB3UTGwBU>#dFV6q{sl`hIc8KxvqA0iEnPZ)eI+PQz?Qa&Y6gltx9gIkg9bThB6%n|#wzY&c?M#O3^wlKK zll!#$xRa{@pFm*0m1YI(0@jqNfz}>=uvCVkNvS-6u)u&t)n%tZOxJ)U)*e@_K9Oa` zhWKlib%kP06(ethOuZn?D^t46_qj9}Gs7!F`bf(GB>=kD(ISbCL_4{-6*~3gWv=%m zk+H^8;#a7g{{Rv;I5rQWUX+K|m+N5INeQalg)>F1PxPCOR21hgHL)Tj>X`mGV4o#g zz+S_ef}?)qj(9S~Wqv-loBQzL%1~dgbZ61sfxgLGs@=)mPXY70Bp!zNNJYCC~D|QGJu$i zjxX1zHJjUx0GMvWPt_1s76{C%KB6C82ka++=gdTXZR1h3D}r{eTPrWiYZ4`-R92A> z$1t+q%gl%Z452x9XmJ-^MM#tUp&UZ_d$a2pioR0s{{VekE{3uA3L<_-ik@F$3H9;}HmF5-OL;f?m*6GfY9$!GvPk_txSL9c z$ZeFAoU*LobEEy&*lPC0GPM5y8K`P|o_HdjMp3kBzmbOE9&n1|YE_EmIbT3z$Uq$b z0HK@}#GgKG!2_rjHFOLh6GoCcBcczlWcBEMTxDcfe{jaHlm)?6y|@C)|9DD$>)MLIH`mgCi$0` z{{Y`0uyLCmM{0i)SV}YwTsaf;ZA*dDeR#(%iiJ!`ERR;O#Y{Gkl|~VBSde=k2ZHl- zw7TOt*lr#`RRF7-zwa;)HLo|^prVU?@q9AmjgxUlhqES2Z2%kEpZ1oW?!WNv@)q@s&$ElX<5X)Hx4i#&mPy? zd$~AK>1B96d??B?*MF1!Vs1{p5yPcZLqCf76MKarI3ER0LE<5F^0!+dfe=Xyu4z2U z&12H)6iO#6$?|Zq!-|QX0f5Ez!@A4=tJ_=Ah~ZiYHu|YO-7cz6A7=d0<~g$}Z%+ zSn12ELKI;>cy(c{8ceayxl?M+oRNs=7=-OoC)fiBF4c>l_seV3`*mO(ja?6yWmAC3 zO3pR4uZVz$h>wT@fyd@&MXTaPfKWXdwM6uT2K=WE?{JWvK!lKCbS=ZH?^LZWo+CQ) z6%h#=fzsM@mCWD(yI%Y#Fw+NNmud0C1Z?x(Er%~zMKvrm5H!-_3Ik<{P-Z6F_??cf zffs+_F=Xo%0w`LLNPB z!Z6&MObE*nR9QCr0&3*h@K^&jo)F41Pvi7?hD&pVoQ5Wg^&rNl(%|ohU$WWmJ4O}v zRLar;fmhnIgv7-e(e@+^YdVoaz&}xC*1wb9Sa5;EmNe9$NYS(+$?)W3;#nTvYB7ofo!rpNLh@xv6DgqaT_ z_{_MRRzKL;^{|woj5~vJi(#l3W$jEdRbCp3`tTF#rPeU%IZWM}^{SjtxW%@v5~5Hu z?JQgclUPXAGzTM-DUuE(wGdRQMMLJt8Oo=2Kcr-!<@H>eGIXsh#u9DW=L*hmQW}Oh zx~RsvIa7IL9X~^`Z7EPWT^Mc7N`+_UUtPJOP7kq?Rtbx9TG}<}YIPF5mXB>3sDl!* zy9(AJQq!KL)???in|T{Qu8g?FpV6{md0gis+_RuE;B?9Y0$F@XTh~39#@n?X?6sFZJv0jqpxHc zQ#Ol=L99g0NcjVZ0^-Nf09~|6ExYNk)nY&VGQ75=W!}X<% zts3v4AXZ)K;Y0Qvu};aww1SI1AR;s2$jiZ=btX`!js=OFQ_zEI~QA_@UD4F`6Sqb5GR6rVC? z5O;*qD~qe|{Bl(|XnhZE2-%i(1=Yj_Pgfrkv0V=rS@tD!6Wn-CM1n`$*MJ=49w3;P zn@!C#u6o9$WK=vCJ|xW!XbNO#Ke7klJNQ+P8 za>b$u7B2SJwyD>ffJ?Vo+@>_E*Sn9Yt~{sNG=$!QYPSd`;3t>sRg(j1nkIN`pxLMu zd45m;E8wzezD}}N56JY0ae>E2Nv~I}oyNlc=Rb0q;1p+CpBBfd23Y!Hm+Hd_6DM;k z*GrXAE2V2qt2(YZ#(jS;C6$c@8#N|o{E)dZDkDl^%(AS~{w3zd{XHpZnU5JR%^QPL z=&cj{f^_p2OR(qUIoVGs9RScvjEfmEZ$Bp6Q6@!zB4)ko2l)OO;9kA5dR|{enJ}61 zAb0{}&UBYdjm@%|mPM=ONe-yB>oGa=&R*1zV)m6ay&?zx~wPgv~G7Fx}LW z7L2F`PNS-$8cp{Fil7_7)sGkviaK+z z0Pz{aR$=R>sky0A(4cD7GWZ;zw^At=yDiT`K+Q;jg_2MinpT|3vd9Q0!)H^6l8c-> zEmaI5Xa4{rCnQWJP54auf`cI`MhPm$ z)}9KSa@D?m1vXEIl`!Q-9>L0u53AoUGxasd*x}?MaGr6izH|QoD)j}dfnYK;TH^}M zdkmN?uwbOEycSAw`~?Y_n@5QwT-vjCB%}b}ASL}`KFXy6Qpq8*0r7b@tOy)JlYVv? z8IjD#49!gtA@bx=Qk&KNwX!Vzq(f_zwQLDi9?-Z7-p*%AT+s94vVrem_R9_`qsF{c zp&Vc4b1Vam_YdvSEO{j7tcO!Quq4-q|LT4u!&a#)CBgeqAIZXn* z08aWdAbvrb)c|7Lo?Ma-FuY5EZlbKQOms~!k;)XM?6#x?lDS5B+OXbBVYEea+M{+6 z)+dNqkOIq;#`>u^tb52wu1p;vGGqd4+|?FEP^GQGpo4|6U`*NVWJp1QKx}b~lx9sA zX7a2Gl~%m@2Gw%0-r)NnxTLAgG8_VtIL$u6KG}$t#cg$4V5)jl3G(&rwp05jYJlCHx33i>rE-BVR|k8f2GgA*n$GUfBNNW?V>r;x%0-j_8!TIr3h`VLGLB=2NAINA)MQEk-?nsw6b!5T9l_3EM~7ot5@D z87laM!NVjSRqX=Xst zO|QaVEa1gps-)D6FI~h8%`O^|xU6Ph-)=2Tm3Jsw1GTz)s~Tk{xzCGl_CBV+yT#`6 zSpX@5?5^onXv&x3>XaNH3jXDV%C)XGf%v^$?(I11OMD0*77H0xKua<==^aER38Eg= z3`-9xiE?n`-m;;20VEv&0L@fF!2xqw;pw!WnqK$QM_ivkw3ZYTd%o3badPp~j%Afx zzcX{ELtJKu9N7>)G^G7^PR)D%s@N?+Se0wqA@2#(7~rlT};lGo?_eh70TfSHL7RMHeQnxv1$ zeqsLr725{ELHDlKyIZ&k-VRv#`m3zPS~q2>=uWlp&gZPqT}upS4Q!WkYde94?rRCs zytf@j-a(x^=>Gtqdy2hc#r-tn`*tc!k0dtb^xdQOG3>UEBITf9RYoi!4YwfZY>Jn} zE^?L6!?10lR5fjBR2|EEHGm~gEEZimaG*2J0<^tOQ7NF&3d8$&f3kKvB5=TB(pF_z zL~3%L#~My`k1riXXP2Nd1LN~WU_Vr0j+`=|@}Arpo)`m2DY?&?m8B^L1ch0J?W3tx z`Ixh8;JRdXATMjzXXEkDOC;pCWa(v6J|Gwl;7jXOb0KOGa2G%mE=lbtnMHkoJ9NG!;+7j2e&j9}bAFCx0+_pfc`)NX+jnCp}AkUc7>rLi9rddw6 z2!}616c}rfNsy#DrM7&M`Io^;06j;^-X}XYa#GblaD={qfk#$qGoW z@!LM(_iSiN3_;7qasy)t#1paEE?$(mM8nqm72YUAZ&L=xYVny8=6pk?KzcGU#6hZ$a6o3rJHY#2_V^s-g!SvQ86%yGX)& ze#~6fm@yd)16rH_biKI{OK?5`g0fho`8CevgO+stDOqz|&;=`+ol01I!dun z)L}*DpYpaH&F5& zf_>T`Vzr>=it%@!$d_-+?C8v77Ip z6ipM}8DdOvBzT88t8d}i;B2xv6D}QC41EoBgI3h$DYDZBi6|$Dz^;~A z?P^J2bg0Jx{wl=g{_HNK_7(@4PXJ>{WWYnqZS8Yfo<`7P)sD2M3@OR&N3O$HR@F0$ z4Aq{nejKJtn;(+PqHP#(Aawf$OhwlM7gcv6#TDMlnKy~Y6On3@)R@+R*n z!UT)Bi;jM}Bp{)S2~By6`5r@-15gvGT$P!?TyI>x9%fFg(BmTEI3-+oAAu}{1loBx zuY?_r*@W@t#vZICKrQw@GdnBVjtIoh6*G=_h`GBOmC4zD++aST5|y27B!d_K0DpjM)nEhN z<>&6X7JE6*=8bmYtPB>(e#fgqo?ggs@Dne)Qjt&NH>6mo4K3u2mld8IM}f{zbsZ~z z5(@KE5+JD3bRaEIgUkC}M;060ta*wgLzE3@a}}FX->Z@szIFPE34bGdWs@IxQ;9CE z-)Z$fs(I*5U_fqb3AokKpIPlOHZroo<_UNxAFXSgj-v|t7e-4P339MEYLs(;N*GkJ zE`}-cI}aAW*LjmbRpvHGl5&~qJ}=p6_e>=;jX-N-oDG_QF%PoN9*u&8%n)x;f`LX1 zS{?_?@)yg(FUD|5#jAYa72o#Mmd__w4&`#IV=m2SkH?U37ngQC_ygGeIW%@1>Rgp4 zm)1cF!>Pc`b{uXI%2JFv4UuwI5};ICH-ThZQeWe> zury)&l{f}S`U}{*Nc(IXBhfLsUDLB##4NzoKA581$Dh2bc=&23G zTH$Cva}?y%%pO~^t7{47Xhg;5y=&zPC+VAAF1mm750yz4W7To2a3aUh+*W;G)XR)y zop=!=a#Cxzp2L9S8s`gj+e=CUV&tAg9Mu+FFLegh6u(}6n@W1kN?tC>&HBA-s`#Y{ zRD@n4q>IcG&4!BL2~5#DMcU)Qm?gE7Fz39?l4|-+GU)|PjPgXnU%E7%2In{oSPE-Z z=Eqx6gMDK)7P%MKKdkx|er~V&U3#@!UqRpn!x<>sJXjOkgegD@xrcO`Cv_N z^?P#)I`BpXjls`P_fS|&SLO1wKs(r_43=q_|{zQ*cfM7sHWJt|sJ3Cxh`X za$G2_Mbj;zEk)1*@_qG&96%plNrzRC!+=QWMFXBeIdck_S^Hv$$%hq70}0FvuZjNv zS^bLkGG>kjL_T}6gABlrwRhxl21-#k-o{)tiaC?6_EH%M%eO6%R<6YXo82VO<04EO zQM$a7#L@z|Hbx(C7^y4OT@%7!CHY0mCl(&Bs%ovqBuY+r`cOVl!OpP4-z1-D4Qho{ zI?wkp_k&=2c5jES{$RS&vMrB(MmaT8WwvV zd~g8#BDN4JLO%~&xozfTBINFMs<}=u7x{gus|qry&7M6@nX!F-+Mpd*$MjM?u93f9 zU!YoLe$E3oPWS34Sf#+kmAfOYZ9o~CsJ#^&JfP+kaB*k+j%2ma-rN$u$d-+6y@lP_ z2X@&a!9xn+YL4HdCGiIz)W-X{}{6 z)F{Uzm2)24U~ygn4rFk**vmGpLqfu8f+-AeCLOu*cfX(mDi8)#x$Q}=?%yxHgMmp7 zSlR&%0{)&w@hx5(yVfi69P6S?xc>lNMhDAEzIq?PeuclOx24I~%&A$;l^(%l zUcdKe>@c26<}O9hteSj5NSeBsCXnn4p=Nr4(~1BeemXB@VPVH&1 z>HrKNK*pr(YDW^B72`E5pQxRWu-5vNPS7*pI_06m(UkH&j+|v#5o%9etW(G`2ke}< zqcxcVdtWVD_s^3?6C|vC%xyqf=_&YLhM^0m_RxJZ4EM05=g8Oq`qcKKpZ?2D|^5e$!fg*BOo!jr3tL~a`IiQimUFJjQm}`!rM8h)(h8bhZB+-#EELOgE=*c`*P=%^;C52 zLjbwmDZuHre`Rf37SAHNu9AJ3qa01C>CV}bp!t0zp(cG==_(Ya%k-=$9(W}$IZecn zRG1CS3$D>TRh%{NLXLFj>{VDq>1U=ks$vgWSnLKC%uZ4`ip+WejhVy~A5bC&3Zys7<15 zMp94OMfIDq>Q0Qi_ft(S`XI_RQ<)kSgDTAs*3+aDFtK4J0g{nCa~80GxQ=pUIYNY2=HN?yHC z!on=0dL>_avh2_maGWs-q}MG{upf+Jfs|_u+J2=uceFADSW1f&(8pB80jSgCG)dTG ze{ON%I@%qf)r_>YIq{VPS2?hhbGKH5=Z4fN@~L&w&o4rX!84wA2quA9^su;-<)zsB zX2T#0I@BvbW%Xma__!G1=QiggDwLca-S;~IF63O%Z=Sh>G}tT z2DM0Vn~iB*atfcU1o%2_U)q7vKdI5Z)hb94^xug|E~`%#zkoN-oaZrUx2fm~yha{I z91kla*3>xyU3^8FOF^I4Um%HxE(I?#VSeT6IXSSHg=?raRM4)roZgekBqGocBcEd% zD8LqMz*gX%Mex9Q`6@hyeStF!V6YzaOv9J-e97P*IM+cMxczx+=Su#t0`C!6HD#7? z9~WMQz<$XuK1s2aMkyKxgqvlz6bok-fn{*8^1tP|`+gcUAK@+{0FkOc%-tX^gK>Q} zd@>A!lA&oiIVFNjF_$q9QVGi98PRX$&ixy{B?x8K2#I{+;+V-odOt!V~vDm%!{ z$I0vt$eNSMPwcG#E-{R!oq`|G2idyKlq;HJjJ4ZAm#yoo;X>Dx6Ql zeE$HS1HgHUv&@{IuQfXmRnzblVW+XKbD946|`Y|th zM6lwi;Vu-1si+3`V5$~3$fp&+D2V&c1x=wGMZ<5 z)J+o{Jq3^JEOC0!obxPTOZ5w)T^N#ZJ=vk^!?E4i-CoL!_a(xf7?o$DFwXD z@VqL%)uezFi4X0n$NjHH32gvxMX! z?NAWWZpbj@z^rivyIzAjZfGeR{{VXVz@=cR%$>D8YT~te^@59d->X)DR1VR%tC{#u=J-= zyNoTX7&k)vdsc(T@+Uea~E^dr`u+ zSIZNcDDB}zRc!wN#x$6Cn)b7kSOc7s@|~%v)z+e;6|xodM(nXm*&$Ul)Gg$|Az7LP z@a=BKiP`>G9~I&%fv2r@ALI6??{ngwEWR2T>>uBYs()3u4ub%uQAG+l$!dNw*Xy0z z_BA6+=NGY6A>nSYlm(0I1`lzbw_%+S13DAfsjSFLr|pmMPC;kOU+z^DL^S z2T9~8pq5xUgu5uZ9G+v(C7+UR{ z--)ej%~U+zuULSRNMz>I3JpoCV=c4wBt#2bhALXzX)|qGx7Q+OnW6TGA~G|$`HnD@ zfDz1r1igcEeRlo`z}<&QVG;QTmQh%%)xeHIFTN)FTjSjGgtC}aumSu8PijHqV5)Sb zxT?OVI}^_#VF&Eu)SKjZsDNmY2;53AZ%MC*t4)SlL( zRT=pLC;*v_4%6D}r7`K)GNJfe)_*98tf0)|+-LC=5|(sgU4S<&kU8x&Z%vd+<#f^C zEdqogSrWnEmOVwVIzykB-L7?>6~oDHmbV9G zSSMn2p13X-14euBpLe_f{LSWkdjyLHwSq^WFl4t-)(eJyAg3I-aDuqbx4F3K;-K?2 zFc@Pn`JEjF&nDh#pIU_g9V+iH=ywLiDnZEywGJB6Jh0?6IF!faSjbcyR5%txJD5#X zd?`e){6fkH0LpUKM6~|^N}O!_Zh4TKA)5b+@VZB<@0SVyK)56F5GS}bf3xfPY&SQl%_)tGCqAeIA5@u zVE+Kr*p+v!OLF~X{{S`C-&r1KVzT|-our}1YW!vL?AghM)OS^np&artpML3#`KOTk ztD_ypu09^yWr=z{vg%&I@hM%WM3(#H`Pcl{oN78S%vTF$+0hc$>HK3zCs( zK1S0iJuc_@KDGUkax(I#FvL{9$=k6N-Qd)gsEEB#~`ty@%pjieG62kbH1U&w&o(lX{N+D_B@QL8?F=dAle4pgjuv&;gxBxx%rh)>XvUuI>g?(#r;4!_t5Y^`bUN-hM0IXvIDB0yJ z{{YY4OXXD_UH&3G$IE!Ez#$%Iw$BPVP-aV|hxPP){0b$`6~=xi`dCi=o}F!yQa&;D zHTX4`+i_OnPz+zi<87>R3!xx>e2d}_a5<4v%IEw~Hsf58l&!D7%E{s()E#GKIr{XST*K8(zN;1ZJYk;B>L zAEr-eopR-#rC$oX7)wF(CP93-18nX9JOgq5uE&hP5=4LT;?Q7!U_-__qAZwLuN}eG zFy~Hsmh6oLXdHls#fBgcZ!w_>w*cmC7tUNkW|uv6~8Ip-eS|CVdD2U zs{xbZ!Vi~U^(dM|#(mz><`O^+r0rJERDpUOo=e`JS*gm;8U8`*{vrqAe3~&|N~h=( z`5Hd)$*gGWepMwEgKQN6W98cJ4adBm=$-NUoI<*>+i%JEWTr{I=SRw~r3Q9YhfvM7 z#;<9|J4l!EnuqAgSPwtuFX;(QSS3U9eU`tO0g0Y|OyBDN035R4(_ftGtN3iuwZZIM z0qgTiOOqh2PmL@52Y;$Xx_Z#UX(s4sk=G$bmM73PFtBtie3qoAmK#F+OAvDLvB)ra zLO`aY>PIu2_-eLNPUN&&u1mLDuth^L;16RCtR)wrr-O&EuubhArO=wP;r+n5 z%ed3X@>N>?IcLfB)Nsfdp(?&Yi;A2IqFeNh$5V%rSyY;wC)6xBgXN%|aJ73f!%=Ws z!>{X!-w$7>%!c3HVdpsDzcuak>OzvLo9tV-^t+ns2FSJt+!ifpXZ74Ii@dSsxRK7K&+oL8Cvz&5uU&0V9P74ix- z`)?v*W2N;guS5CGay+v1%sp0 z6jZi?sghiSaOk_zl~!OG-M@jQf9P^2@M8YM%pm&+fb+}XVYS!2uIXEkNXh-BJ@jT( zOzuNI!YVsF`SycdT$>G&Wi{=d@Ip1|N`X#hXNxA@LT4*pY!6FZ!tk^50DmM%#dx>x z`8WRnYBMaqYgyn?@<8ej+nveS`B^;3q#!9-@+6Z_(PKPe{Gq5&;vC=tP5ZNe zr6t9hJ(1)G)%x-Jd(?b$Ir7u~o?mu5sV<<|ew{>kmD>7*0>6cPl6>(_GQq3h`^6$o zGAkG2{jXkMgL%n=MG-8U`8hmmXFc>B$}7AMK~lPh=RX|2ZIyc%0J5juT0;QI_z2pXGx-Mtq0H+@wD}4) zLn}FT3Ha^cIf*q(#93NhlEX*Ly^7D;3ppS=EuR?`a49|)wXZyeBO%#*4()hP_0nZW z!*(eFGtbzkN4XH<5}yIl>`OedL-&u4?1ev@xcHBUZCu9iS0T^Fc0WW0?p{&x-HLK% z9KNd4-;M(2o<)BjwZF)D{{SDnh{bCA@qZbp%txOiZjPm8pbE}SI&GbNg+gWIp9p)g zIa1!gGx2Xon<}N}hx}$CSSd}%JbXzYw|5wijripa4&8ifp%$2!5B~s^AZO+! zyn#%@Tg3I&hDSLJkC=hYXWtX?lbCTV4t(}156D}`%-chNfuGNS`u>Sx^T1Diva|YK zo=(2HoY$MUo&o2cAPhefs@abp@f+hcJ0bu-Q1A#l^_&R;)tvtTFW9FlSxuaIFV7FI zj>$Q>{{SnJl#GpO03XOOIZz|*hl}JO4*ScW{H?=|Wm&MZ^0Mf1e=tk_RkEY+7^8^0 zc9Z zNkQZP08jmJcLWBJ&x-Cl@`cIym&La#{!S)%9~9sAej3yI(`Yu;ZG9DM z42$Co_~*uO31Hao5rjD6p+Spe(O9zXQQT-9WTMe#q< z2vU+RoN~|UCalc3shI`-k86q23Y^v|-_hAg#E~~(-TEMf0Au%KLF4pI=6<62!K@(N)M@=HuZt z=#5?JHW=j@wb%NW7I{KEL(hcX3%5QfQ%Gwbg8N-YWCZn@o_ap*U5v%y!n|{ zSRPgK@RqSZ#lj<+9Hai9u?$^UV~X9Mu(t1`{KwDTE+Zz9{h9CYAn9Qj9PU;eI+ctY z{zPt-N(lfBo0;vNRKM^y(6bz1HW}g!`yNF{fo&qbwYw|uY_xOBxXZ>>u^e$cWCeEC ztp5PFhieQ3IUX<5h!y@hRd+NA`2{_>W^9f=q9zJJc#`PB>!Q*p6zYKE7hUEgX1DEWXv_W#tB*%>0 z8314a6b8dCSqe{+s(1AO7vl!wF&Tf33?sd5!&X0!m||37X*Kc+PqC(<&JQljT3yt0 z6RFJtP^g3vrrBM?rgO;2@IAE*0UyL=_!jQ2-lqAh{VdqG1e?gRdM||>jEUGjCclrY z@zUtIiheNwv$>P~9R8u=u^B`|Kc>GM5<4f7MbS^`2g23Jh8|Q)@Q5cvKxE_Q%i@!_ z6M@bgB>18SBHjz)&yS*kRIcJBkBuzPml5Gd#&xC1-6PNbH2|6P%YZC=ViQQEsvjTm z_*Ii0jwAaR_5T2BgMet^E<96$^8FwvKcd#F!1(1-Gl?1DJ8bS;#U(OiPT6*1l^Z3? z&a>LlgTO)p6?||jJhjsOc}Kz#*^$B+7|+EjQD72(gR~oodw&nbknYsaqA$y@YDQma za z6C}U}Va77e8`|Nk)lhk#jU5>-*~>m>;|l-}xev8J5i-D&r!n$Rjo|UYGJPJ4KoK~4 zlmHs-T4(&daBqPf9@!T#Afp_rEaXEisHmg*4Io}_G!R#p8$dJVUjadwxnqzF{8N@V z2gmS7 z+y4OBdTC89!lfWI{BYD=M3BHEK!&f2XB-5&o zqWbN3#u9Gnb4!B$7dfCzKr$@&l!fdxhaMlpm)34S?HBwlEl7bVc?ZIxO4>fZ9}(~z zm;qtDywAf@+=fg)Ec`Vs{{X2UZAZhWCNw=lz}xU`b`OBdoQpqBrza2((+@wVka9_! zzuF%Sg&+#_ddD9I*Cw#18h+0Y<0wlAvnFtr>DE;bvpI^f0;J18709lDOQ!*>c{aUI zycG%S&3UUqwND{jCQ3b4_;`rPpEIJ{m@7O8NB$|XK3yc@@-K~sB^3lXbD5)la462V z0B`uBKWm*B)U}*v!#QS`RxHXq0=Xi z(R1_BMLK5>W{~1|p##K1{_Tv0)JLMk@noxRc3iu-QWTl+@wQ zpCkmK<%YPNpul<8aG=Tdk{fbkZuT@M_l zQsJ02rXo-g#*T7Qz|;79sd0Wizg@t>wzmvUdJ^m+X?*D6ITfFGawdlcl=`oV&C z!XTq2E|5pX{+&VCJ@R9Y%k<+!*;2(tz`yjmTEEdHlgH`iu6e@>lsTi}$(@bLzzjd( zaXBAulzC_22?dB{SuYXrxTwxCkq|uooFS<`$&_WZ{U_2Kred7<&(nw)sTQ?hykF^# zrACtV8}{$h{a4s5HKHPar#iA|XR81*{+{cLA9mk@3j~CH+7Izl@-;LSy|X&`P68emtl!lHnN@lQc<^SbvZ`xS79zIK2M= zAz1qE&zVL^1U)z-WUnyh$;3QD?Zy@Ko*q36{{Ti z7sev|m=mj??30r^PF`L!M27zWvOs*##xOt)0rMXe$m6p=Ku7VM3j{iZ{I5=Z(u8VI z`0XEYf%>>IEe~=?jX{AO7a!zj5)^0y>~oX=_!?X^+FWsh&&Mzr3^YT;>r*-Z00H($ z(JZiM{AIY+V81Rx2E97l#0>F|8Lbb#XOW<5)lSz4^7GIl!j?nU2Okh6;U(q~j)wNP zk>gg+qCO@-mEhP*z>wxf3vfVZg*Tp5;-@wL0BYXm(fEdWRF#fJiX0JU34WW5OgI-n zgUYe|nf}b>FD(TtCfzd&Gw~8gj*)T=A48mqBgvqf_+*y>lZ1o-K;h~mKAu8pB>x#m{zQB7Xe=y$B(Dwr zcn@k;V(-kve9xCW6`%EDyhd1; zwMd_dgbm4`v&1mTPx0&i(C5v3x|BXARt;ehaPja0a%MA*MbIzogDnnUvrdB^YUSWf zFWb6Q4m{}P?FTCWdwpwb zK(hn=!|~m%xHcPj`Kr(szg8-3#oaEeT^9rNyPCFP!I^{-BE4!9+6ArqIpoCa1fU32 z^;gz@_;SM@tYmt;G{5YBw~jj*m5_2Q`B|<Q-}tl7$@oyt?=L&==P$*qi9DT?xtV<BgYUWv~Q zZ}ra(;(C}vDdfeN2yxA)z|lL;siDMyh;d{X!U7GTF*VkSW|j^)Pp8GG+~KmXO#(g`&LC|TKNx(*<{?HP>9dCoMk~VBa%}m zUd#UgGw@NQ=X#~}KgiR{$r!3yqXP^}K13LNPdQ)mLI;p=WOLihcvU*deI!`oxQ(kM z{t9f8+1o-qfLJwEXRA$QbUmpHd7XJ-zxujRm2T(z^xi`dt2 zN^nJ&_T{G0a1!3bGf+q-Ao>(-2hOD{Gw@=V;KBjx!*JCF1%`yPsRFAH3^xMe$5%Bk zz*scEFy0`Q@}WG$PG#z(%}161o{XUsSTJWChY zrRT+^RVAwe!H#uE3=whSPS*s?PyzGvI@cCC;BnPfp9)fqD)Dh;xK=PcMqO(RKemrE z6WhQ91BuSyS#{1laF9+27LhL}x-b6#N%{{nFRzhXh0GRn<{eZAZ4bh`NVvI3aw}NV z9N=R7tWKN*a1O$AQYYb@i&re?li~e-OR8MBH2~)&jc86`z{{6I)Q|$@pEjE-b?k`G zkFO>PNpD$Ug^IJxNYq_Rs7szmKM{J*2cDt=!xC@iBaHc)Ay!P9-Xu<(zZ8$+KpZ~3 zem*)}G{gS@uYe1m_)&;?+5CC*$0C0!)b|a9eozY6SlP_}pg{Yp~E9DuU$w zB3p%XE<;9=5A9e7*N)IVyp42V3mOZBoJB+CJ~(tN*3$dRbVt$GGldzeM)H@M#}s(T zURfUX7aVD;c1VGx$Tatl;htVwFB1|nFA?@!zo(L%84w--eq=j9Ovth36PFSFaxXIr z8%n>Zl%9@m;z#CIf|SgON(0uehAO$f+2pc`v4$_C?&u*phLYo1YP!xAEyd36#|S!vpfAV9$pW zF$wTXAEGV}FqL6}gudRO40AHan3o2!41f=xvC8%sbsscIjE@p)c;q=CL;nB)KgU+$ zDp=N^fvHHmK@H+&wZnl*hX6b&eIwgLs!v2@!a4Br={vKyP-O&A2xXOBvTmARiS6 zn=9f@6H7o`I@^&{y~jdSGJ3Y-`p9_J{c^j#nsA>ak{z1)&ALuO`qUavuHZilMzJMl zBpDfT6Oc`uQqnc%b(UC5ZZ8gLkT~z`RAcVzE*qC4wi7;b2=%XOE{{UNYtzgun zVR8v23}nw4GXs$ovxuGuOXD(*C-!y#1BL3O{-fJQLYR~F$rhxOpE~O6(b(>RKkQ)Uj#LZf;OURiSBD3J|P5>7Tj^mCb zbLLblA5%lq=3;QKy-{b9lW0}{07&y%vIgVh*e^=SiAX7|@cRP|0+9Ul*htB+3nau;Ua$C>+13tin@bP*i}!>Vy6s{qvF*}#ZV_SS5I zN)a}95*&3!$2kIZl)ra$H8|A+^`3qJh>~$)yn|!9$5zV#AKRjKgeRdr0OHcp2&~M&46NTp!hNDBP1EKr&aR3=AT+HO|amd zZ|eIvrF&fvy*p3UABc!W`**V957fv#>C#iuwEqClJ|fVGRPHmveYeMV8ET;0ME2ip z+Lw+eRv3HDRpsl9!!1sWs%R@SKn8r&t$FA}m+8n^WW zWZY0ya6O&`Vfm!EH78@I=BKkQVL!PiubttJ&{Q>;NxMB#=To>5SMx1yspd4yhqM;y7VgsL6slR^uKe`_x@Tf#G6*HzWTjGu~k*^`#|6mQX7pKfH)pT1pNh0 zc{V+Hf=-53l*X-lxoe$3(5iL?fhSp~_Ed*a#+0*^`9; zvqR@Bht*y^(SBs&5uzLAQwl!jOnWVg;ah3GuyRrJ9cq;4H7-&A0M1ZjLnM#{zx4uA zc_rHXkpBS5w1BZcZ_NCYNZ_3++OMg9CiwjqH36_lRu6`tEQP(k9$;t^CKutTNzSpI z`vGVpTId9r?ZT97LoL@6Lfp90jG9cst4J4bu$40uF$4R~xxDcceUoGMFs-6h4oXmJG7L0W`mjc0^rw9b4?SFnE|th?yVMS5%jpW~ z0W)>^4x$b`Pk~rE;tFDKfhlt5|L-{{T|GdL$y#x2CV3{Ey!=LS{@k{Yu_;aE5g8 zcg=oG*&8ieGhu4}M46stOf6_L=bPSrXXAqlMj2iy{QSEOodgL_c{YCi`zammVUHYN2@01-XSQLJ)ZASyf2+Pa=08+NK zpk-vD9y{cFL#QcpSjR*2t<39CI)HvPf2q2XT(fMHQ#MbUe0O5kr1k+Xn64m*8mEb? z*us|5?GX@k6wbz@Y=iPokZY@X#)|u>2XS8^&*8H9PPSB+`QM#?skP68=+cHuKdR{a zJT_jDhxJcJ)+7}ph_oLi(C=oZsO!p2-#_?xm?=$T&IfC@)3l7C^+yF@p$Ehbjlq^Y!lVj>~Zne!XQDLQ;!?5k}MI>NoeEcnj!-u z{{VdayHGrMs{mi}y>S?eDaW7kZE$i7R1I~1B#L#OUlAFf$>E(dvDi{*{{WL|^N{Z# z%YWt?Nqa}w7KT25@zFkFRBl!a= ze^4LSi@uMeGoZLKr?qYRq0S(yYLXms{9?Z7vR_Sl+gqx;6dBOM@_Ooo#HJ!p>wb4y zu9Rt326AK>keW&2I-QUfTB(6+nko#ohIJ1jEig}!>MSWK*DbFnbK+m|^pylgIRV)G zljENkZ49!p2GRP(0B5gV4KMQl0Mw1H$z|+{ynpI0$YhpQ&w*ApJ40iOH89T}!(IOX z%i!p?b;+JfsmN@fsDCh)ezoq%i$AJgD>=nJ*!aKIkCI&MVvIkA0ppFvoAmme#yNwS<}GB%jEVd`~Ar%J2ujpmIl5phvl$Z z#H8pGRT-h#CdvN*Q!iR*g-#bZGQhRXG`O%8r!BxB0l8H2C-^s3Yz)afys`-fc;v-K z0k(6&SF87uVw#JBWX7}v(f5*jEhQUgkzhJ>>}uGlwbj5u>7s)GQ1xLBRSG^qk1?9V zEd-jtZNGM-6*)giUNUEtRN2;B^_-Hlhjhpu~p~RU9;VG#WEASf?&UU z^A#+qnMw5*@@A40l1uW~iT6mHy*)H~6-A3|#ivSxceTZ;Q4$5%uW~fBn$?kI1``@k z?hbo5GQ0tMFJ`Ik-Umymlc;^R8`Pz@kg*cfK{Y?*7T^o5_Wo(!$EuqRA{&D-m9ND!hN}|~BIT}lVDcCb`V!FYi8n=*J zgMZlPPVm8WNH_%Pr4;>wSBD`~RfPWlaUY$Ns)oq@VVjX!BtYjieidyH>;N3(qtx3Y zn9%N8$+sd`e~hm`ah1FP%!AJ81%sd46h_4Aiy}v_P?q9J`}j*}b6gvqj%QX}rR%6` z1=sBI30gLwEo{3H<+ADuxWs3796e-3$FAwN5 z?ZcBV$RQ3B46Fu(`^6=!a#SY$YXgC?#=kuo+Vg3*tuyRs_}0j=BYkIlYv+_(tqGf3 zS+jy&lbK1q!X8R~!Vdu4{Z7^VveTq{y#1Ap zmR?(?ACH$Zu`AEWENiv9-KMlU(?=%1=btOt!f2S27l@(8vYN^p!&_1diZUc^t#WHB zw6X+5oAuvas*8xHW&3-R#W})sUn7HNhM3or^Ytg^7SFbBwHu5C-@5I#Oa%7hoch~Z z`UUg}`Gjqh!c4rmE`7ys>o6c|J~4V|CaU0KQIC#7BIwliQv{dExeMm0i>GDsJ;usa zCZCZ%lT9Ss9gXZxQ=(T%uVc2^B$Ciqw{GuqvbC?arQ7t3`wWvyKQ?VkJQ6wt9x6p+8QfDq{E$f zj1{vuD(=-Jf=gM2ZFauIldR3+*f8l9Al;QWi>p987)kP0($u>t#znp+Sg2uRx&Bca zCFPYDA`Oun01Lq0E>sff0_vY*pcG2boH7adY`Vpavni&f{E2Od?^el4D*jUBoTxx? zY?Uu+bY6TJ<}aPD152D?D;}J+qem|hwscv-#LPqYheJUe)3=p>G_1RY)Ha_axE@oI zha%=~HxRn#IFx>W>OaWtNup&6Lpz_7(NVEmZfB2}Z|4pT*^3DuAo+Wzp_xCoSGoBa zqJ&c;jJ01g`F2Q9q|!wW=jAm(U4@8zJ?7V5TswZ9n>QkoEIheYtzu^yQfX01YGekd zE;gTA8zv5(<#?Toq{#wr>n!Yn#tm?_US?P9hZvZ?t$a_D61?g+d7ZBkXt_%O3i3>E z5l#TB!>~dmcnrOY0|Wj*0P8d1LFL^nXig2IriXjrbRhr^@>`aC`O*n=TP^_O>LMvo z?S(}(1>{KC4=?`!8k=CK>hH56q`O;%WyRa}2|cl6q?4EUnQWuj2GC0J_0bRutnSZ{ z<=X^K!ceVDW>kRsX&5hea%GfbsCsI&iJwh#c{6Tpwa{XG^=STCR=wtMbzt4UzPC}| zwRscVvC27#n^yJx5C9WOyhBAoSW39jh!Fn(={|F@@BGF&S>`UHW(wKGZv7wkYOCZO zz+#t$y~19=d0J6!2f9*MjQNl3?j*ItfZBZd{RR;W2hA_)yVQ)L^%?nh>Qlq|^pcFg z&((~A6Vj#Tqy1MhT^`zoM(e*!Li6!~Wc@!%tjIZO^l z7z|c{?a3&7VVhY!j-UjtWcBcSIOos400;PqxTNbL5d5CEPyYboxhvQqcmiZD*=fR< zd=JS!RKZEBG&pCI=NIc){x-u6J;%=eRk&R$mtYakhCDxT?z!}t3qI9>{DdWALD`~~ zo>vOY#~J<$)yO=+K=R=FQ_N{R0D}=i%)hKWHX4>hq8yLsN;&cIXOmj6;UFxp6n2Ee zo-^xW6EX}JYBIT5>yeg8ZJYp!Wx%Rgv20Fv!u8Z0DCPjf2U?u(b5D! zaS<>$SU_yS_V^h4!9NF#om(k=RUt~i8W`P>N-PWkQKI(QId^az>UJ7H93j1e{jRM^ z06M?9_d*l&Ozbv{>ULI?pzDo=565>2?ZP&FKoDX;#%FPvu3F284Shuuwy_ZqZAU&c zbF^_N%niOar!6yCk1q9Fv!7K&Mv_6Zr*Vu|$=ge8sOEwe&L>4x)x6_b2_$Ta%*4T3>>neq)4T?#t=XFk0c%0GJ~ zcH`vG#a|p3X(Q(Awv49F>GS?qqaY){XOmI<(@s+T`l15g)SYi&dYcZym*@IKrOe|_ zQt#B=QY!k5Bbl!KSl(Cp3_!6@%r1(qlR~Xm{MNcLAdae_o!=pOyQNdPGk`nNX$1y! z1@)xK86)LZ?opnm)LHZ77-rR)bSTS|QapHcf->z~w(V$jV@K0-HpxyKoM2)T%L@nU z>RK*i{>e#chk$qh7XJVgx$knT{3Ye)+WneEsD_}+Vv+PEUdn?Mvqyz9xymaQ5ri}Y z+^i?SvIBbF;=u|T+FT7uWXM1oNP~-n@+!gE$Ae=i-E7E>c+5N-PrQ>0xw_B`~vIJCR{Zu^gD`v*ks6i&Vg zyD=d`6Z zRM&wUb}JB;v&YKJ8#S+Gfo7vTkUP)4lP%&rDCD#0m6I+IMaIb>pfZ9Sns zV~_|UEqD2BO{`JubrX$oQ^%RDaw*358RN`h8q=IC5<-^(HbB-cfbC>5$b|~pM_%`3 z6f?@&l4Rgq=W23Z$R}mG{fk@J)h58Z8k*e=Cs3^@)~?%I(^t{dw5Y)F1&1u*2_YOn z#<|A?{j{%&viGp0BTywm65OMo{M>j6+Wk2CjJ#Zl*St8x_TId`W((%83po^-(55_V zKik95dXPy$uvyZD0G4wW7~OIASLQJBpc5=cpjz#AUF?AZav0s1hEE+!ezi-?$`EUD zb#yqwWZ(sw?vx_yY9Vek8m8cBDw&TW()@5jb{mL1ey3eOEChgRb0Ww(Zq?(>bYB}( z&z-u$3Mr~Wg-J_PV=Y*rcB83^D)CU^4CX4YS5;qs{x{2xX3A``f%}$WpcVbUkL&EOV!+ZlK!&ny7T_lp0xLU2OzlYasjmwhe$t_t%7;a)1Ms zc8JY7Q9?@@Z`i&~qn3otwMew#+UpAn1$X%r3$>l()UUyb6KEN(VS z6B7ktX77*$t9E^I5sPcbwro^HQtW8@6@rrWQ7*_a-!O9WnP1qJBH@^VAfbbfN=awq z@`zkvvPGk+-Rx({0ngp$yDxvba>T6o&1>|n!5~YG8%8GjsXz8k*=ZL}%Y0*{qOMYR0peAc4`7T>uOQd8`ooJ-bG#v^K z-p?~v_mYK5%Wk%cGp|ok2=Ki|Ky-2}VgCSa2XQiXOi!3Y)Yl_4P~i#uL=2!gVMG{@ zQWCtDs5;+_--<1LDJ2fDT*vrv}vfoIs+!M*5l~F+g(9G z3E{n=i+LmzXdqW#`9+SCA)Xw9M3kQ2826-&&W3evSE=aFSS|kK=bomx<<(j!H)*l3o8)Bl`IL8 zTdlCesG0|iliJT;h9|y2WR%XMN#!VXu}O8!Xn*hx<-zdkJv8EN2i<`O=)Ylk^^$l0R0&$Q~g)VOrYXYwD_5bILTX(r{& z?QT*TJO+EZ95a#SibYoYMwF}bU8r*UrUNe$l#V$f?o=I_)q4ql-dmP#_E_hM#8a9$ zVtm-&6Sb7jtP;O7@_ixNf7D>r>{x3v%6StgG{1vC>Uz^cNmLGUD4tmu&?(G?7sD@h z0!}3jS-93#5To?SVAB;IO*z7U9`DMBqP#X|34(Rct69k~TzCcVZEWfq zcC?bKVh08GS?x{JLJCn2BKGV1<0!Eqn`xb9tRw(WYQ&%{&);sdbBnfDdp~F7_MkE% z1R|{MLDglQOBRO7XNHkm^x5{sum?<9@@I_F@@_!(4E4iCrlfN*qmV$0r=i9E%+YHH z6gT$vA*qINWaJbPgDpgk!loqfUCtaU?LUaoYe}hm=aVTmgyM6*p}wkj3;fz(Zi57e zVMMbRO>(|LFHiQ8Q;z=ty2AvhD*pg90B{p{cJ{FSehqWN(oZ%yMtZHMRtXbCziw0Z zGgWr;mVJursM<LuKu<${aWWaruD8frz4|YONwI0^9 zVEWR%zIRmDA0=fzGD~Nm%=@!dA&q*-`Ng*S>y#Qnp(%_0J{t%!(EWRdg@4_Ia^IdCggHs*u-ZGrU7& zqQO69M2A2cLbJ*>HuWS&F%}sq_U1=+&~hTV0r+Ww!-uyco*&}wWt~}5u?v|)D$AE> zN~1aTcT{v&kTnFg247@~69P&i&dq+S>tdXrjx8sQ>Dt!GK)JTm{7#hl`*rPFYk8;z z8YrjD4tsJwTeyJu%B^}{*uQ6nd$V4t#_hK7=vUmbmH|87oOK{l)&N~fP6I-O;|dk zX&-hgI2IK4>m=^*b;#QBWA)+~lSx8c9<@m#&WmMI+GlUykJjZWF71)vYBzJQFx+bJ zzj?2g5xC;-*!EI9v-^>QhfTGp+7H?N0sL>AQZaj1y}ZVp|T3hS+MuHSRZ796)!RH9v)6%2(meQ|k!*HubpHUx3NN=HyCM4VYnF*y z)+|D|KOex+H$@ro8*S)-Mh?rzSGl~`Ry{-{@Onz+=xQ^A^Nm+7p-u%677b{{Upd9A#Pg2BoLWz*IlH(fKw33=TJdtPy@- zY1?5Yr-rrpqFtr-sK5`U-?~(3`fP;O#JZ?QZE_feU)w86VM=^r=oOATl#nz$CoJSS zc$O}XD{%)9*3m5#I&KORha-V^XcJsD+khMZsMD;vL@E48)zRIKEHBErQ$q{|s|LA= zQpcSH0-svoQ+SaB85*6_fy%*e&qyo!iN=uUJDl9|XV9QKwjO1Yf&(S_wRmM7uVJYK z2I51%1MnP$Jn3f^I;rrbm><#k)0J}k_^Av>vLj&rP}I56$6Vs}+18Yq+J*H4HO|ef zvZLah+rSO)FC})+SP9^v3?R-%ffsEVdf~}TWMf5JBvz0LRrsCoR-UH`Ej4KjSNE*1 zl3+!+s;{8Ij$(H|qa$SpJ_ij1P<^=eHK}j;Vhv{Ho~;InIOi2%$Z7HpuZO{%ugBD9 zYg`b+Be;4}v^Lz;{RrIWsK_0E7g? z3YDyObNLhsm%T#827GlMy-nc~I-D{n#KJ%Z=31p$h{&czNhULseAyu&!E+}dnXh8GBosJROGA+^80@sAzVRl)2?8&} z)G^9WF0?KWOYvDZ+R0E#%|c#c49ev!UG#K1*?Vwf#7qoq}lk3Uve3VL~S2ozn?!lW{t_9c#HyPu|zr@3<2C3~Fx!Dh8C@K?g zsgUW29ZZ_NZ5U88c7;BrNqbdFdIxc96y+D~_`_D}y|4ZXhX_hV;tRM-%7c(`q*!e< zHhg`h!U_yA%%SU@O`Iad#u9uuA$k zWzv$Gvk()i=Ni)*D=CH2QOR2gV#%sxY;B{X5V>Ud>egk;)~GPtvt>dA*De4-*9HUy z-9+~qvf8Vo{FL6u1#S!pc=lZjjcubIFkd=J*sG798)Gfi>YthgL5V#@tBnNT5b`H+ z?d^B!@EB^fm?|59MNCw*Vfz9A)qH}kw|e5yQ3m3$CMTJxY242!uE0@F%smM#Q>`PL zTe4$Qn3oB@hC}q;`ss0+ku?}d_JdMnN<4Wf-0G*Vr7JsTsIzX} z^N5Yw)1tj>2)o*%h%2U1aua3&`n{bK@qh3#&sXhE08Gs!gNAzCnz1z~+S?~;*3oqI zuDe`K40yh3sivg|DPlreQ(tOP;pw6mrhuc?YYruFPB~NJ^;qb03W4Ff`8*ntQV;^_ zVyX%gMomBp%uw8rGjJihEmo_ze`KMat!SWqh4izQnKVw-9QyNMvF8>G3X77LvXl;f znIDpK_S++^)uRP8TCaJ1$P#F<%wB4zwez+!Wuifqd8gS83>;do&gV<&wNp+QBOM*uoGn&QQIaj}^`3`mCMJDrf;txeHgi zD7m1n``d*On9_60wXKtzTggb%@WC~bJCpR7BuX@kNYCKU3@J%2MgIT~+J;O{@2>;m zrxOpAU8!Oqp#hH5!G&=r9)smNl~$8R>~y80gN1r63KZ@rq`!DgKs9944GoubCbXfQ)}>^K zzDKP^PX#Zj+U<_&g*o67rTEnv6o#6!j(N-~%vT$rNN`Zb8SS_%_$% zyG?*=uHi<8C_X=;*FXRu>YXlDI1=qHEc``$$UZ@?O4iL(_D%(f8kGaK`8#<#cf7M zHm-aEd7cw{qPdD(l641S`udoh;EqMa!N<0&iZ-6SHPWskOxU5woF?zc=2l!|B1h;g z)GtrfkmbdB*C@{cIhku!E0B1kvNIUT+@j`84UC?Zyl`9z%QnT+GkN*wQE(VmSW|JW zxmlee8EIBwCQP$FTGOtk`&Mz_5<;38Rc@e!u~eskNjLD#2&o(#UzZS{7@L@o=IP}Q z0yzf1GMVyd8%V=i)SV8j1IacaiTc*1I3D%^nd6sI-nV1enat!8P)z3LkCizx8o3CV z&sI7}KMX4$LC+v($#gwACVp)i(Vmc}JaFU!+`0_}Bv{0fxQ3bfK-VjMie@n+>|nrt zb1Ng~>H88|Vb@?3(f~HqEQ+HIK=c%w^Vh$opYNH@(bq?AJ5m)VU7P?w z-Xc@3L=$4PaCh2=Vp8@vgY`&0Mz)EXE@b}z*~=uO*uOL-U81bRE8U8i`NUN|F)5!h z>wP$Q-LCf!b}QO zIH|)1y!c z?{T;3)Bad`=P)$c<%p3cX8?;pz0U|h=bB*ht3YN4Yx3;$yTSwT)V~FaW5-mwnh7r${ zkepwqyA*mQ8(Mi9fu5?m+C=DL#O@_Faa(^?GdaUOChU<4Vr=8uB0xEcb0wsU-cR=d zwCZ9jUU;z10{a1!I0I=v!rWqhIXiNb#<}z`(R*@ayub>PFFs`D<6CfS5kUmlla!}g zKg3b<=;Wgus~M=6O3w~eY0&O&SQl-}m8(in9W|oX0|b~n4o!;jwL8?WsuwE~eY(eX zxG#K^6vEzM`(+x5s4U{MzdeSysG)5x6$`G`#j}#CYpzc%(<6lK0L~K0S*>@fD#FO} z%iqizN<2cpu%!6*>O)L-Bpoww56SirOa@6y*Dg5W$>f`sI5IwM6kUl1Ug^jVeeOpD z3Kis8yEcPIr-bW!Bq<$DU|uh1yOLs_0h8P=iSUG}KE)5x4id*&uGV~>qhgg97b>=2 zG#=4UKIVL%aUuuWkTOB?D>hG))zu*li%(T=6WDKhW(g(LN(wc9Ra3>YkvwtI)O>vI zyd_MSaoet{SG3rYGNGG^$XndpWjnSXSGFd>$RHX0N1PV5`fapLr--hXyIiU|j4)ZB zWU-?mHF*yiRHF4ZWe8Hr>z;PfVhA_N!+t40%+7?{IHs3BoVx5BpkZ*g&)6^Sp9OCv zBjMRp{>h#=t$I{RLTLfP%c@4$!!jp=b3^sHXxdBQ&90o%_phEQ#qrwyylV?SK#gtJ zIQ>I;SEP!(YJ;mwjc`F6EH02bn*~9{SMJRljOP zmn;1!B{%k}+mm?gjBdn_N(>!FDe-ue@zlcgJWA(=gunMD8))667SUWPz%KwS{{Rdo z0*65bQEVtQ{pHf7Sj4`M=E)f<8hs>Wi|{Vx8jqKDwcS;`1lsKz4d?y1a5Bxz;q@w* zk2KrV5`S&lw@Q zF(fGXj>~2795|ttMwFEf?@vAR5ql_JPH-ynBw+JXISH>S-sQ#eZJ${PI1LV*6^4+y z*>9a{E=HoB>XkUmO3npgZTV_uGvg$Hq>nGRx>@RTJJf$|dKn9a6;7JNIG%$gEPAta z6{>`rr^5|&BtcAnG`CSswYwg7w=F8thQ5N=kb+j9X+61wxq=YZ5V^lfIXAPUp9+9y zmimQaw@H^aC);Yx)*8e!6!L(EGt11%M}z+WAdFD?6_5Toades3fGZ7N75fFvXJ9l{ zHE}?3PG_)wZIJjmIaxK{bzv)On(VX4e{$O}s&xMVL%6~kZBGxgJ#y&kIU2tiT4kXo z*HyzpGE-=(ju~tm*Wc);{c5D!<>2u@b2R;(?j{$xqhlp0+^54Am z7~fT*1b-%5a7uC*XRXQ6L7QFuSN#)M(b8)4xyHg^_!cZ3b51}++ttAo5 zMCk)Q?o5F<23RwK2^pjFFc8DDC8Pv&?7(5l24b6Cx!t)B0fi{dr)p-f2kbx z_%h9FIx078x>AOc+ag~jV0KV!1AIk`!!l zBb1s{M0a*kWf=awqHat0Hp8_J>l1Yk7b7~l17$TiHkD^CyaNrdEg3CYEEVmwBzm@W z^wL0+^)^Ebxu5k0n{)O-)Fv5ZPNN@s^Wu(kp|8TG4*~Gdwu766s##zq<=BWx)E_0+ zoTP$`Wt3u!smf7xylF38StW3i*%ddgcyr|qX250%4B^IBd2NED;f;*^iffc&Y>4iZ z1Nyl`D$S0P*L^$WcCJiFZ=4j|)|#<75=m418wT{F*+>CH3ibCj-J*Uo1l73igpFUR zI%#&=Fy0(NV!k#w1{RWJ_*Nes9!cD08veo_WkK0(Kv z`JF^vYIu<~$<*5s(cX9vM%P;`^?nWRL)jJ^(e%R$kWMyWuzhhTotxTXZ8f-S1SjaE&A@@zf*X$|mjbfFxqCII zSk=Xe98RxD2Rkbxl+8x$YI6e+H@R8fEr!Hx7WuQf2I z!KSLDmB14!M+jPjFl%Q^6yX(fVbsxx{y`~EQMpD0{{WC8MTE&El7n+QTnBW5DuN%5 z?c{DIa=Wvlf<*JGgk)~Sqes}(o-Acj0UU|T!()_Tfzz(23VY2*#_FC5mV~;cK^j4> zPAEzec~b}woC6BL)-?P=Kqo3`<&s+1+!j#gfXmNbp4w_V3lh%=DBJ)Bdf=4hv28VZ zTIXvFHWhuCr$7|}ButdNYTeoguj(w-C{R;&i4B&p>NhD)4-QseZy05_OODZeGCRG zs65LOqR1O_=DFz*l$iejt9Lm=bN(jC-LSiJAFXC)aVW;M)u~t}`5X?jAGiXk8CqeC(FzI9YdU{OcGqkXvW3Z0HPz;+ z-**W}!Ueo!9y8?p{YKT-Kgjr`#0%}xU=Z*gLsH$0Hp&kHL-Kh(qh~#9zyL_p%u{pl zHjHxB*f`23Pg3qI4M#0i0RiU$R8EU6dDKr8;e`Oz$B;{)k*HIi-bQ+uYtPs>Gh^x* z!`9DWc*nKbQeYhL&#Na;)5!dnaS8WL#K0<{a*ldK9aUd|cPxi2DV0^0wcL1=H%=sY ztPjWFBuRjYG!vTt0Mylv)rA>afn(1A>^BCRr4e!&JyW$Q03+7PM#7}Zs#Gq0EQYXO zAF|q26S`dD6|@r!(@*LTAnuk`i3GUhiVe3OeNq8{5}7`Mzmpj)NmIo?VJ2giwy4NJ z4`h?C)?f7-5R!Sejc;qRgny%C6*%>Pae~EbHLhsRs_w!T6s&Q0Uy)YR@o|gM0m&# zo^i|NNi@;g4x78^KT~1LekeSeLMWpLXq?J15pWB~Cz2+ucZL*Z>?mKC68m06vi?UW z(p++Yh$U~a+Af?jY%ZEIO3D{TTyiU?z}27E{{SGd<09HSAbc_bjdwJ=)X5zT)9ilC zX;CRJ*0K~8PM?pT7(GCA|2bw~$sgGLKSwvewtD)i}W4I*rwQ87-a6)jO}v zYc~o(v?r;DRlCV&%d!B1pKrJzYJYGJbYix}F+mFw-$Ue*)hnA?W^qsQeUd2lzE&Ku zr};9n-~H@G**})00)%T(khZUtwZxZ^AQzNKbI7F-=2hCIn5bH@moiTwh0Sr)Y?a)E z8qTb(V!vUg7;ISvxkmX!!Rw>gul#<+Wnn`D7!IEWdZAqmehA9bo^%u3ub`~@Aw<#=ZwC>1_gnmIp5bK*N;=y^epwC|j zQYPvX@@6LZa?`6mKXH+iy=J1e${Q;4+Eh8My&F|9pRQ4m1z0oy0!@BNDbZ}~j=UZb zyFY$?Rf0p|{F(ukGAm%$cplcmK}vXHM``rxWaebd`29ZFT;^5;QxZ0^UO`NxX>&GD zV?i+h5B5|Ip{fhJL&7hj5mnx8f z%=S`jGN~(50Op`vKMGriR-7iUqg(TKQio)P#_H1{1tx78rOC-FObaw^>RcZ!+cl-Y zSx{VnT+J_LEo=JACf~_($s&u`Zvk8YFZw6`M~rLUEd7Okx$>o2_3b`gjHQ)QS~@1FT*PlQN~P zdss)fuLUY$La<&1e;@~vSOn1iiYP9^AsOTflzHV=t*qvtnsA zPZS!2jD{(ZCoby1)EgjHR0$r#1?zST*cJUDYxjECR;(#2A)N=fNYjOSb3r8f-{}(p z@t}QVsQD;q#=A0+xyC+2cDrBs`k!O5*=U-XD`f6NX!#Nx0Gum>m$h4R;%2bTr@dL3 z^8rcAzWD^{Azb(&OAE(aNs)xYEaVr{Y z7U;7*bDB}zpV z6%yZW7n@h=25?1|cvo9idzG*4COzFL45y&wzSTU(@OO*(6Ep3~M3)|IlBLUHfRjy3 znv8>jUXqm+$%f^0i@aX-4p0986c|-J&4p6{mo*pbjsE~_aXh4|F`P|maL|V?v`Td- zur*h$k>xs2#~0jGEE4f}rEt_5*5Xd$P+{}pqZv%fdXp3N=Tw=*$h{Vuap@C-_N`j2 zm7`I}3)SmuO+|$Pc_c4ujk=mMfnBSTry|H!L}@*;6OeB|8E#VP)byvG05%B|3NgWq z%CfGtb$Ns%vVUg0KP4pvL#E2Qn|v`*(snzljgG0{=BWeTCiW(FtuywyJ6)}7p)8Yx z(NPT$e`|=7y}r%0il=9@I&&39+#h8E1G3j^oE)E1P+z6r9hc+!Hudbq#eJqMCL*Tz zx-#X?0^B(N09AU*?KuGQ^ADDTKk~kYD05TW_rL%x1f=>^$ws;={=gvfn#E#^^Mdmd zVy+?G^qD1tTbwnDH8|I?t?uW56&YMX!wpX%#$VPx zw2T#93o1}Fk36B0iU20{*VJ-j=!Cm@$%8MkVBx}XEEkTCuy;+WkZ5lK$X71F8nO~= zSdEG1aO51bcNR2BtrqjJ0YKmuPlg`D3c}TdsdRTF69?cH$Q;dp@o$#tHNtLs9oQ9h zq{ofe=Do5ucBmJ2KEY<02nX|^Hl_dyIdbIt;20@Dh||tff^`TFm*^vQPKE54bf&ze z;(Q3mD$NGdFXuB*bN>LZ94U`lvqHmz0qQjYxOeQf^&IIg-S^$~(T|wAtBzc-^ZA$uZkee@-Uv6u7lQ(wuH|kVB z%;~jz<|v0=)D0gW+a^kbUA6`!EZf1Fv3{4Zalgq0rXL)n{Ko$Ps}3lh8kK6hq=^07|9WtrxMV{xg1QH=BgsCj+oWu8k*|FMfcf#>?($-H)YC(>O|zW|Ld8 zMCCCQfv%HU5R|0QVO&zWB3$ripLTvN{j za_OBRn_aCaL0*uRCH1u?9#SNefjfsRS4oElNmF@?)V?W16*0fiYb@&WY!(8HlO=Gw zv=dS1!lTmdjYP+TomF`fk-!D5zjNr^noOJGHyagN6Cn=5vW>8;>Gm3A^lo*z0n1N5 z9@f2zev=ao(r-5E&1$n$BCp85wK}khqb~3k(Fz;4Ni$38*?d)lL`mZy`RPlWO9tb6ZRZ&U95S zT5;AmHSL^J&T6j)S*gvEhhR+At;_n4fdd<|Wa@O}Z8uiRF(@k7;?F5I@X=Mzv%FMm zaplTb7*9IWAOo{d;EfDZ3;UX008d=x0BsXa0(Feuz~{t2ryRu#ni8AZLBlSw@*+} zPO^bOqgk?+rr_I-cWjVii%kdw*}K-t^$8Nlv9kE#N|qq71)bvPGd0n`18?f{>f*6u z;;$J`ZX4q@(%f#XAYtM)P(+hl)qZ=pBKX!Sxc>k%{mSxBId#1$_O`V=+zo1Lt!!2G zOZ@P6#_iZV$M;vcQhYUpd`abuQSqDMh?@gdhP&en?fScL8S;5F(gVj06IFW<=psh6 zvpP1gPb*w!+V9^TZ4`_&l1kGO2_&XJhCC*XpAa1+rwALF;Yi+y}N>Ilh zo8qjYjVsJJ=S8lUJi5DzvxHeHXV>(SjhMy`W`Ozb$gDL+=Dph;O|b)*8?5KW*Lb-m z)fPY@+-%YG&4x$FbCA6=yoaR zwdxf!d#S4&y|7sBUtXyVGS;ruFXUTRrgeHN0mj!44_UHyt1tm#cAV@{a8?g4Qs3P)+>P(JP zPnVTc=vW4#|Rj*-YGsA^T4)Jv` z;QV%V#DSW|u_Nh4D<|r>f_fh;^bzK-Oo8&zP?r!A%PONS&mKeiXA$bYFf9X7&?z%x zae_Xjn&|uzp&|WSmnERm2lVsCK}(|^pm?33(6+79n!*EHxpW(Pb|EEfOJP4*w#d2I zo^?0H?%g}eWd8tYW%d?DxIWWc`Jb^yz!cVQ9HtS<)npfX&mzY)LFH6R)MdKq#JtG5 zbPMrhnaXOp13RT${vrwBg9P$53oQt1V)Rw(fEK0bn=4BKF$f!`v4UMG;&Jlhp;$I zVw6dWmgW^4OA;-!l-$UTa>*fqu*^KTmsyWXTvM&=lc@z)XkVV!HloMSew3`oM$i_l zlmRG9(}BsEp@Ek0aEG6*6=k~}X1GC|em=iq>C|7r?6s~F!|D*p>zAE-0+IYm+#ODN zzweSiwVVtOBNUvRkTCl!<0bu0l*hwgQ;erB(oBqNyTXsRF07^V$!kkPnL7YVVN_RoSek&oXkjpLM4g~X;(1`z=VhpkyD0xvld%l zZ}OMxYkPmBqM^*%t2~iXA3H9xT!20h2^q51)sbDCf`xh}u=T58D)@8%0GUij%h^=! zRvoPucoxO8Ca8sJ&AKZ6hOsm=y4!Y&a!Qt~oSRKJx>vs5s#)?aQf|SsVK5qZ8fqmj zjgpubYx!IysIrdw0Xr`($|HB1ZICAGOz2{ zSa~DZ)EXx&yT!VR&pfgMRNfw!1cnBRwQr@<`!%IamMEvl3ak3^iz2GJ*EjX~nl~QO zLSydo70}ySpIjJqXxTbBn}JpQeoLjDsi6M+swz!q-`1Je>L`;pS0w_>dWtjpD)w3R zYoq`Z<{<6BIS0&e8xuh!%PDNy+EpMdp7RF*l|%$=AY zg%#}`T5wU+Al0q%vU)qajf*!iqhpVf&Vi#8!k@9lr$ZcFM*jdAtF!KGZcr7tFV?S#0Q(kV9gy#Xm3$l$=297;C5iu1TcI0_ZSVYEtZtMw-RrNmOa3cGxa=$8{jhp$Ka)H&M zHq_DAq{GNwwNdI)L5ecG&~A}!Jd-f7PgW)AY*Hn+89s)%SPM$PYe=SQs!p^08KF~E`>wItDV={D_~lc`q!0Bw{wE640V&z?D}Ef2b`9)b&UdbhCocCd} zG=G!;FI~V6rAbFL(XvfK2Re_$Z9y@6Z`C@VF|^#|2o7-tE~<@!K|@S$W?Gre zGCR8(+PnD!Y2+0@UVs+m?isE?r`n{j!!xJ$&~)4aoQ~17b?lm@98V=m;7s_(kuxq^ zW>mejZ7xaWM0KzmI`%wF($YxP3+~9xi#RFT#(f?GDp2Q1Dacrl0@p;h$ex=kS4|M= z`vgvjur|pAv~nil$;O{)!KXILUJKQ1XJWeUnVH#qTW@QWZHN>&_?G0Fr29mrKjGV2 zpNyWv@|!_9BtW{bRBEK{{V;Lj40IB6NBQX*GP1M zs;`T7xVk>nGHI?>5(JYO=T8I2&^4oeo(ra}*rLAa(CC>yaepk~64dsrlI#u=5@!js zm#ztdbTyDQrlqZol2-6MDj%(f4)DrJb%d@pqSu)nN!cf^orZaww5K0ol@hSPII71= zii-W;r3bMw27WqZO*6F7LMJ&zzR%#_(|zL|6JYiS%mjiCJnWc(*WR&Uf&}>fs%;$F zfLwTV@o!eFr67~wH$cEioM3uQ*mbu)s%L}tBo|^ex z9T>$P(>~kNISCpLrKpKn&yJI6BN2y6w!P6)AA+P|uVF0A0@ z1si2s;>d%6UIX1iRmjz!7z+j$tflbFoOo(!?FrLBYYdmu%zdSTC*?Tf%rgni07>T5 zGD0#pQQXzY|b zqN=`8a6I_=CRnC{Ectouzc@`!5Apg?OD4`=)r2mr&`54DFapDnI1E5IPP6WDBNRUR z`%TLJr8tME1xAyp!4_3f3(!$92D%f|%(DgvMWsg*h68R|qvr1x>XLO13-P=iEgy@4 z=?j=ViF}FKOf3O$t0r}`0JfZ^{z6RlMnZi1XLdxx49H~MZf`J3y_}>Da8mtDVDm>x z=S^kAzj@%YpA+^1`c;J);FPYpJrhtU+Ch8=jE_@OhcYCsPMCR$cI$ion4-Z|txclw z%!TD&3Q=^I{(MKm)IA_$fp7dR{iYp6zdz$`6CQ1M9dxZq2S3{HAx_t%=~VnnWh_Gc zJ-|xy_IS@cOJ;dCj;Bh1`kaN?U&eh7{7$^rh3Z=fJSq@tD5z9eXDfORx5Bd%8~fFLJ;Jg&EnS)dDAF^k9^|R+7A(GDFNmTk&adm!U%AN){_ImrACTj@dgR z3DqwmnF6+@Y^({@BTv{X_lq=Fs%1=_ij$^D?xmnB1#nTmyjBB17cR`X;CES+iP@s0l_y9{^dmM+ltx&KLWVS?ga%vZu){OB5T;W%`Wjr_fqF zzyQ%HtsvqM&H77DgLKX0KOEMwO{zkgJ!fRuO#ti)SnO>Mweq1ajnyURgr$llc-&xf z>R@ssnyOD3m_XT+t}Q+qD{wkzM2&>~THA01sI7ESLR8qSPQeMTM@#0be(bIG%q zE>4>N0HqXWM;Lmgmf-Rk`WE07ok|GW(or+Y{yIv@FaSie@#GB{>@s_U;)tx={)=oh( z>~eB7*`V8Ix(nSZpN(p!6l%;+4YFRO<$9@mLZ=}fDp_0GNvUn~XRCg`nN3kMkWUgv zIBS0=Y=C0eJQashmPEHoZ}MhaPQa zoc0ei(tTjdr2V(l)$3VJG<-how2H2sk@$~_X*85L-Ys!H%z`V*wI+$BT&Ey2BZ<6b z>aBlpvZ5~~`C1GsTZGc7c2!dLu4!_$OAf}Q)!Y4ZzI`P5RMk5G*DeT~I$%EHWl5fc z=A%C|auwR_PyRFT`sbgaq15=ZI?3$hV{Xf9FXV+u>#u*kRHg~31`FTpYM@_MoG|J4 zdfM`0-FO38DeMqwE>jz|LZlm-okKF835|1)37q+RqIq_48?5xMy*l_V-D4K+wlOzP8f%UbS;ro^g`cL>R zbwPWT)oJl$^{JGGQYkL%69kW5d|d*lS+z|f@n5*>A2$tXR3TC9GH2Ad{AR{|deo&< z=Z~-Luc^|Q9Y}bc433Po&tCrk*auU|qZ1ulk0g1U%r0GO+ezJu(?-&H)(#Q=kog*` z0qB8TFTzbGfKUYzgZ}_&2b)rUF_Zy*Bgjz9t1SQ@%3GZz?}5Ywr@SrvDdw{MHpHd! z0`I$^PY*gac}f7sU9I(C9`O3l>Nc&1n6s1Wo_%heTvDUSJ2^(bspMh#|l<+7PaNby_34M4>44W5t@7-P#+!=LEDnJwxl?^`�d0YT;$T2RsI;%H*r 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

JUBe`IWG8@!pP;gW$i0IpdVVO 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

@KR%C^LP46e^OhpS>f+W%NN^c|DRLIQ<#}{ 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

Ycfk9}G~ixpRiDI-(0@lz6HTQ}XGV=9 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%0DanBOLL_MdAYV1PJGJ@O2jyTb!Ze;*e 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%0D{ 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

;|`GIp1sCPY9&OGu5;= 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 FAj8;ogdi*4omz-S$2PQPPDF739AY` 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%0A-;CpEvvaW@bCcVMa3xpqlCV|6uOi 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 z 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:#Wjq5oX=eu}xL3V^Ov#TS{P$^>q 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

LzDV`4D{;b|iq1Hlhj_(0&9z2B? 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�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

kWYPkK27*+{4>hnKmz0rpB^HW7 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≪lahF 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�ooRyVdTHP!#!N`M0(F`#5Qu8P6dZtr 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 bx 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 z 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

SY;vZXjYJuB)m5@oO4~Cuir^ceghrVypdwBjQXM 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

R>Wx* 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

dDPwSxR}o6ENGo;=gzF1 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 PwY|@{YpG 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

oq7Hx@B6g#! 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

*p?|F=ZSRx`s7+kijRgt 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

n}dXHS_srIA^}bQ?%FOoKb$Q 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%0Dk;rP!Nv(#PPGR&R)5c9z79%^VI2cAlw5l-$=F< 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�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

NZzzIjB
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ΜyqR7<@$~lg_CYxgCMrHKo8VCaz#*X_QJ70dKuQY
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

#Q_t)Dmvm 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

+o ztggLcgk4>^N+Gs2HW*rJ8yv&4ODh}KZtUEn5TZrjUdpZ(rG$CHdgh#OV5&f~z~t~H zSp|SCwYNu_S8UFnzCJK)G%66Wl)cUVw_rb3dmk}Soq?_3&=cGRkej^_07w*NFsZWt zR0;E^KoG>g3mk$=6d$kY3zN$EV_D2wX{n$Jv@3jt02nUBEG_^;Ji-W1c_TgR59EbQ z$P4d#Jt*V}atN{g{YqNZTS&!~CASuo;#Ak|)#0 zgzX{x$z(7zQq6B44(y%st~I(jmxG?n&x6qkPhJ|Aa;fY(tqsVSZ_q9=-57MXmxK^9QAe4oM^;j^xmO5jQgvvmQJa(le5hNOvDhi<43k z6H-usKUnop*loE}Y8VefQn>zWD6D-+p}XynjG&Yyz9ukV;Ex zyuEa4n05#`j5Oa5ckgX+eb^_nJ!% zgUUU=JmY>LQ*4@-B}9aD8I;A|DR>G5Gce6S&4@H&o`b(WJS4E>i90VhFrOafNo) zW!pDAiH0Ngg#YQN062B~osD5om)w!Z^FF=%?cf-=fgL+T?@dkk)McWDfpI&;&GXxD zQ2X~uMo)cSfh5$2GzNOZ1j|#}nB;a8^yT1wbJ%l+_| zO{m7yIm4BdovvEwY{$T8v2}N}IbqP*Znv3hwW?y&IJL$32+k~0RiFc`ysE|C)zsEM zv)s{zhs$ADdq(#M%6XgBv0Za_Cc13)@x*G7rWjX)TjdeD{gfGq@| z_+RiN)j*Va0{uZ&yuAp1IR|;jd8lDr)+(OpVuhs{$#)_`6MW|Q{0PM&lr|6#@O@u0 z?MM6n)a9XqR2t;D6W18ji%=KC(Q`g|`+MmN4G2Sh{sk!LS6?51-5TLTCr`QIB_2r( z(ZPkb96LT;b$xxMwj@U^=F#a%3CLNX400H=xf*J53*fZ`hlPd(;idbNa#b)?b)g~X zb43?4I-e0U5gQdriu2L2iHWIf7_FeTg#NUwY^59Sm2(t=b=@q16NisOQg-aSBW_3V?tgpe zAROleI13`7FjI685l?O>NgFV^)y}%1C!t`5qeI%`NwGSU?co;^80>o?i1PP1?UR1y zM9vxa<0p@c3*4pXKUEawN)0y?Z(my*);og&bKH-gj*0d4O=Fz(irF7~A%yewMW3Ju zR$x+S?s<#iQYqi!hLr4VI;K`$9Kz=&g==e!{^3y(wfb@?6?ZX` z%C2b-402W&^hz-!aqaR=ik52|DqHL=bvkW4Cmd_ECiH&SR8^GY0*7lE7It~yL+HG! z(%01)8_i~OAoxQZtA*l75nmxvNSJXUAaVg0lb9lYfx0j=<&vMJ*()@GnVG4~=Os5UFlyEXw3$Vn0;KqeUeRI>gH(2&gVAJuSpwN@Pm%3KPR3!a`86BPGX> zkbz#-(I17Hom$FRB3f}kqJkjAQ0 zd5J}Nwx)9HXhcjZhY_EuVk-)S6kIZsl8vZmW4l~Imb&_?ju4bXgVF7;lWV!+LIvuy z+1S*g`;D(Gsx+u|RcF|Rd?x=$c$_;M9y$Kr=gyzjX7htj9F2&e`Rq`iqg3E|9(YVV zWH2}`waSD$COkMOE|DP=6)H*#iwbh2+_cEZut48hy~%D$LGhF<2N>8(3q@Qeq$fP+ zi;0T}0L2eH7#b8_%7i0Y zd~AGlo?I?d

Spy=m*{3W{$d)No)wY=V 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 hPHTu;7RNU9Wh{tUw~g@v&-RvgV*Oq;7znW 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%0AN>u0Qioygcy8B0)VR& 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

p!7q_@HM*aH6o&|1Tc{;Uf(I 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

0ALHIf*zhfWE<%3_k%| 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ΜtbX&Gm-SV<>OeP3!QFSlPnYWMd^ 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 z

PCCaY>H2!x^OLMw@@^b`X3u&y_+(;?T@*wXB}_S*Cuql!i;%yXv^00T#-NktIx z%r;bdZPxzf0UP+aY8Da5ZJC~5hLJap3rGhj_GwxQ%Uk@t4iIFaIu2d#UTA=VV8XWyT(DtDPF`|?YJy=h~ zVq^1<4-WSqy?nX9GCA(|KxbHAd}tt+>_-G;41=NCIJPz(XweT$F0SrlA>EloJ|rkX z7$RfuEhIXat^J1tF7?^E93OqhAA8HRL$HuqVL{vIg-TF2#x(JuI9eqrBR_k7xVO3Q zhtn6cxU!z5i}Z?97XeAWFYTE$1#dic4uH4t0iD3EA) zb-h1OO^q_mUQQy??(nvR9%$QHa=-TtFlak^v62NHeQ7YzJupa`A%)ENE)jWg<>8~J zugGul%jWVfxrM~TQ-Z-(o8UDI|L_5ov>EMRmG*>G4-t8YFpWGPbw3#H&`{c zBW42f;UmDd2ne2MVtjn{aQpto>eAfY?CM*T1o;+f-fKxPf<43|bBgKb43dK@h$6x^ z_w0S8qr9{NL*)R-Kn0phv$X?;w?;>6pc&lwIJ;m4z7v4dQz}GJFoM0-*3B(dFls8H zoggziQe2bgx|?Qbc1lIfN`rrfKo?YZlBFf9%29h$Tf7mQ zBOrky_nu9UPxug*=*;Nc+92gJV9wt}Rs%8GH|(5rSSgQp$@)+Qfelk5328_xpfs=1c*KFH ztVMjCRK*dY*ajnDKN-9&%Ar~g4H5{Kf@ksM3!36A7^w%k4f^`2i3Us~zy!xeO8Pen zio(591;wLPRZF$ynCM{T@NQ!V@%8p()S+%S$@p9r%o1b(xiwqC{^Z7HbFlyP4Us^F z6Q|Z-?~1c)Y37y&Xk*4fR633cDZ6@0r?blq!*!T+3t21*L?4ow8Ym4QdbI}d`0ehN zR%dH(m*>$|ZDOEf%fdswz#r1GdUU!1AW70(L=FHt&;EFuD5sS5g09WMIo_**2{kf5W{^9bn^T2?0kdV?*>W zI|}Ne3>pzN3IP+GQGMM#!5)YlP+FxByCLGMLakGq9n6hGJW

vN5}sFmJ`j7w$c7 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�ID=7|0YAAFysgax?54Ld9OSMQa+BMaI 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

9WgS3_Mg(AgXirD1GrqTu=r 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 z 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

urK5xK=`22Wvdv$lgV&m)yDph55#mz%y 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Žj|P3E(C?eslp5z_L0# zI%4BSy;@E(MXMj@oY&RC-JdFJw%A~d8ta>y$jJf=tptZuRZ{^t>wQJ_+uweF{jTEe zyZ3M2R=j&nnghGa*5Tpq+dT}dRG%+mX(%nz+_kub&3tx#rjX0}hhI0#XJ+OX!&t2k zb|+h+GaSL_U(B*@BCeTDXA?}IF*a23G&aOsE-TPi0NGJJ5>hnGG#mBDMQGg`@FW3J z2Encp%JkWVr5IX;Gw2RloLGfXnQ#l^x^p*g5RMI7XaR!)vz!utFPHfKD zkVub%+eHGzdu+4YB|1Mr-qncv)xS$kI`gHir>^P(*tY(eH z=HMiP7i(N^7G!i4(;~?)ib8spTup*bRSAfSbxH%2YN`{N0wrvW#5E`^$M%TqCfz?) zS3Ol#ky5TAt^E89+v-a_fzB%aB$5Z#M5f42rUIV*L~TA%!6CG|7F>&5&)6v1FjrRN zi(nU4}1%T}21NNfUivcrdU?c6Jd0YVIa$BD!G!LQxUf z*xoDXsJu4@WULe&J+)oxDSaP-QoKfpirA3plElFXfPSE_x}gf^tx2ck-m2Ehy1F2? z5@_jc2OB{E&@t&Ud;OXJIqpl&ZEaUne|Xngd3E@qrSA0V>gc*k>K<-ttEp;2g{%3% zOa1Wp&GFXO9$B!p!==I!hY^>>h(K`pPdW8;G8E=Ffqv&RrHn(zfPmPiG+?%yFso#&2($*%IANV(wQ-6E z7T9Tx1{+ydFC^$;oMbe#5CU-Mwfv)G8KR%E5RTKkeOBr(Ej$U~BhcPGJgQfX4w992 zDVjzljHAf#K$V&E?TjY2NMe==tz0UtuPv=^t(CXRr4^F9r8!?ISITq1r46+>?+s=H z3psRAZ_s7Mk#BIur*qRRD zV@!hoJvXHObZ}{mBzRR@-@2?N=yxySFl6i9%ZjWL$Ha& zG+P7<&PoG`e&Ym60&g{nQQ$4uOTdn)DBDw0&nL*DyrE~E5+hg}Oe+5;ePRS^<>(%Y z!2_$?E|?rKYff+Pw~QSFp&yrs5rMDI>09Nu^sMIyvD7Y~N0 zZBB_IYnnVlQTD``ZsRFh4Kj3jOq1=PRw@=xCn9Jd$!s>3pGo5KWSg6&>fGx}W>N$U zy{x@5*@#4X19EpXLi4J}<98D7pab1c+Lawin($C8?4VSg6DhV~!rSpo0a68!mvl0o zvJH$c+3u&UrxV$=<>R&Hd@! z$LIU|FVA5LJ`yn;7K79N62`_w|bpL~zgdg0s z>sx+ugBSWZiHf??zQm5Wvy%a|OYC?VMn@Th5jUX0_QPaRlFS*Pg@w#NIcBAtXS~5} z6G|Kl3>&8ds&CDD5AZOzNB`jJ+{KwHn4ZNI7Q?DJj2&d;Ci zcMZet@OZo8YT>hXjy;s7i-U51`)JE&sqtd|VqrFae72L#hkXuHE*r|&Jrg~Lsc(kk zUN-8@jh~;se*b*^abu%&xVCkAvJXqVIK8$sUo6ZJ=USMZnTgLAa>!KyVBQfA-Falo z3`!m$a$;pTRY2f&fhWQVNGwqV4ZEnTs{c_>fPf`?BW{7(x=(+6{rct0_wQf7ef#wM z`1rujg+luK{lmS()6<=!t3!;PhpW5gWoK`*8JY$CEPCJS?&0Mo$meyAmpa`v%H#gSH^m(k%bPLC7rG&?Gjvj{zg_%71 z24zNAJGcdL!G--vT*Q8&N2ICwX>hZ2c+{n)Y^gAlolY0hu^iT<)YPh21O+vCXfgGh(8fZ)u4Ytc{m6z(SO z=w7PuC_?3G8XatFwoj)p8}nEu#6QOHRhjkS*eNV|HOm!$vk>7fDuYC}D7UxcDZn&6HOs-KB; zZXe#v+OZCs6p1yoJy8iKeetZ9PcYE^j=3ot=_i(PGwf6S;`{U`;-NoK6yZ7nE znG&yxEYHdaREkK34(C|XJyR}tKo!|7;c&9ByNmdCxWBr!zDrx!T=t|qS1L|Ux;!Sg zHB^XWJ}&0$j@-(^!pux8xVXK%B<&*F?XNp}xxkDZB-4eJdE%Yvg^bHU%M4Eh_UJ@5 zoO%VeN8)07a1>((i-R@`3lFBrad79upqo@$VKC@*JG}vm*&nhR><*2%3Hh8;p{VGs z_UN%3ak!<>MPo6l<#twd%K9M*Xdy>hm)9K(u$kc5<`3s1ky*OeS652q_44xO3Pl5J zi*tEfKANMZGDO35Ht+DI+=T>ST=)ZybkJw^VRxMcc@y_rVgVP~0LB3w>LI5#7yGM9FO8|#>0mw>Wm|$rVQ^?{aEOv$SoFO;#-4E*M!ZplhGhZb65Z)~ z9c3c8AP7ic_hMf_-#DTIvkA!=3q4@WhV;(x7ElCM2eD{i9KidbVbT!Jm2tKgkRwF! zmIt#=($LU?`hiJqtYODQY!wRySgI+O(cE%PQ}`(+>G7EKxafMv1Nf5BeDOOV>zGkB zC~-j)Av6zK7>P-MH?h?+A7GN;6T_PZ*Gu%0kwMk+>>{GdH$?}%CtG_5 zNF4i@_?50c-d>y?Y@hDjoSdIud^|m)%I{37qRZn63~xnM?b+SaO+^)F!jq4cmD1Hc zuEWZ@2f`inMACp>SsBk&U^>H6j{{9)JAl%YTSVmO?eC+b0JrTBD}H81Mm_-`p$JBy z;sT`Pl5a2K23L$$D>v)pa6{F`NtFgmt3^))$LNbpx(P{Q{bzpQbZmA>Zp+fi?qX?o zZ55IK;`H|8Rb}PnJ#4MF6*Z?4I!8liZD)VC3W7|}P$w8PSy#M$&~a|VN`3VYJR)@>{d^e+>g)fgXXjA=okMR}UEv1_I(v3L8`Q%PfyOgQyFy=kV<)>@qeE*7A;41>wVKba zO{eFI4YYTB?d~W2f%m%U#~%_xO$+qwM$)O@YHPpUUDy4*d%8cn{r3HlF;#lIyMwAW zS3ce=W2RYKF0Paanx(?99q2Rjwb zMJ+s#0KJguo}Nh;GV`-3+%rpy(?L&(ez_?3fl0YWZt|LWR^xfmxnn#<-IMxY+~=2= z9^qmQ*XYOfBPy-Rh6-XgIcy=jW|%vRR-qckuF9r+xL1y7uhb5+k?$T=>mYt=cz`Jw zz}mYhjwJ3O8|rK^vP4zLCnnj1tNJ;Rk~fo!=O^1bnNq0~>w(U}VXb1M4<7wQ&+p9= zx`!~AV^H8b%d|JB(Nkj11CE`b%}E&pI+KrFntf`}tTh{ya@CMbVYUp98Duu2Si;i? zVx7>9YU!c$PS7@~9X07im_RoAQgFa^!0MkaKs1j*vJK5`6lrvhu;HB$yL+8v29jhU zNC5vZ92dAkng~^u_z)zk-mZZjEDl4XP)=8a2dj2G#~sT0{=N~uD-<&f;5CJt0Xqv;wtSF~2*DYJIPhzM_Jdm!!4AD@LQT!P z08R1Sl?`#LWF(-&W|%h75kQC}IzY7zq63and`&)Me2k>^P&a=&xv1XX$kMO4vF<~Op za(2ZqqhgC7{FzMJm@in9=oxBcy>I{NKT9<|a^r~6L~)1RMo5>+L-0Om8xEEd_-O5{ zeHj}4Y>`})BLo>2@G`(d=NV7+k)LoTX%3pes80$6eSwJG8Vm;=uCN6uBpl&B>m|bD zaWlIBqp*M&5n4xpKNt*#Jc+1}^YfJ59Sk9SQ0ij$M-t2m#72qV1&uW|5zU5OeWZ^~ zr&i{R`9yj?vsGMQ$!~71tn9)tq!)5)e{ppmWn+Ewjeom?Hgd&f?G@8aD%z_LUS-c|8G-U5$$M-9zeW9S_< z2COLAA@h7=U);pjwGnR^w_1oi9lhP0ghelYmMYDpWYT1pO4&>a|MceO&c@;K_U~`D_cwN4 z{rcP6wYMK$zxz=CuCArNcXXh)p|w_Atxdmo)x522918#CuPpTb*;AbPCG#(pUHz5+ zS`jfO-m7S8s{QL<{_^X)zrOoR>YuZdQHxO*jd^qv^e1(3AsGgT`=ru9vME;a`qf+M z_gCa6H&*5r;Sr<)psPN{Z687BfIJGMV`~dib-BD!;)qZE zrj(zZ%}kdHL^cYsd^9YtdNZ1to?TvE?^7jb=JGS;@^TT<2w3WAIy_$atOPq($U#yJg^ijda4Gn|Y!1Kpk|5zgKx7SPb+LUlx?plh zpz&=~3E(ed<)=5vbFUm>(nubg$7XWEhBYZHDklz54S&)$F{ZYdkbi7uhlN`w$QjJ9 zHmg}jmR_ecDeY5J8oOD68OhF`&ZxGL#-7w++qP%{)pBsrYE4F$%8Zt&rOjzf-uCK$ zV3KO6uc)i4ttZG)^ITC0fT^~+K{R^ceqq3>lL%H+e|^I8UsXfjXEpJTM+j5IFRED+ z@Y^jIADA8K)M##L5Z!7F1gyIl6sYweogoaCtRI*humSVme#Q;(4^6PBTPPQ6?W)_? zR}C#xu_VK|`ZCy6)G{8EhM>`_sTq(apA!uqQXK^$q)*$}{*cQM;{y08EETN{6o%AM zch7K$eUi6Whq#^MCB|;i*4*1c_XlLE`sO;^7eXcx&Pp;Z1W{`1gx#{Mt+sN^Y90n~ zg|V``9hzV}ibppy#$5CN)jK#&L7qj|FCKV!Be;>bHP$q;fEZN`$c$K3aA0L4p}82w z><{&o@6W)dK;on;{`TfAl2A<*xH?*F&fdK}-&uQiNr%JA=JClc%)7snMr!_{8WG`7 zo#RF6sHwUU!46R!{i9GN?aSX=BX#@@UsZj7eQ)3qv5c}AEqbWE0@W-1u#{ugJkE7q@==3yqM0UOY5uDPVH=OEN<+w zOe$|35>emW-+-Fs(TwcfHT0=8x*-TuoXWufu&cMBhO$J0Zbcq1pX6tLPCVWwIJiREQx7>6buYLym zm^c7gswqxIGMt=%uLr)0o+-fF3@}h_$gH46f9ujYAyFnt$bXf=aLjF))1sC$-pq-1es0@!-03+AvRiK!r;h7&@SvW zOgbhFE;F4a#)&C7BQ6X34sNTI*|P57PHfa$L`}VQf(*6A?7%99)GT_`J$AY~^wcV$ z{fH@ae7tM4ZPZnu7;479GuY~j!eNPJVNb-e(06==bUaK^2jD5Zy2&&qOUT{nWP!?p ze5zE=k>!tNQ@LCuH5banQ+a;U!oxub#E%)n9fEccV3tq1ae4yjwg-6|aN(Q}Ct>`E zjc+Cs%Ox_YloWQe5y=7g5f;&GGDHv&P!Otoc(UEOy9%T+GkW044$tjw9j+ba_Kw%C z_ID0emQK&_0ZO0koSZ&f+}+)NJiR?Q*gt!?zxsUp{NwrI^5*{M4MDyi4|lg0)MWqh z>EX-wA3r{Q`Ptd<7AgqYyww{;J zau4k@gCah~8e^!3L)RFw)B&n_N3_}ojigYpQ?j{9Cz4unhaB{^nEVrF$IB8453A3f zfY4;@Wo6|g{^DCD3@2K_uoE#e*V(<^XvVm@3`e|n~D2% zYAIpnl2>U5y9N{{nR={ktf#f1Yb5^VkDp)5hgeQ=>DOM!6tz7APGx`AGtZ}B`c(ha zHq<@Y)wy?&OohVpxscYskcydI`BhD>WkNCA6@3CS(bN3x;r9CW_VV!H@S=Qv^|Z6G zyfL>rmt9y}C`~73XP3#W7E<%cG!~qU%gw6}hk_0$2d@oq6 z)<;`6hXD*7Jf`R-}c>rOrs^-d#Gn+9&A650+ac5xe~r)D3Lj%j?USdeLIacsPrt(vGyYyjfaU zC_!mmSX?L;GqXs`v&C89owHoA(R3mi6pd$vG;O=MhM@_jd|A>poSq!8lb@#$$lLLFH3L>#9Gk{yH$rtU~6fmuZ2)she4iYL6} z^G$}JjO{M*H|+v1Ja-(S5!xl z819D-hUj`kH?V4Tbzc$x8=J5R@Js1)_45PINhFRoo~7SvAXzohV_M%x7?f{(11pbb z=5XpM+Q^OyhAbbZ9jT+UUjRnQU@}DU2SyI4K=^>iM!8ZtJH?WaQgbY&w3?%Ss6DaCQ50!O5t zxW|AtZjXc}0fG2EG~zg&<7$~sPHi`3FikCE#))9;e+kke8ue%L$?W3F&mLTkJm6$9`DcY4zF%c-k+aT9&btCUS4%S?(grf4i7GF z?mk{zetx(=T93E{M^k#dJG(yH*xgxO<>D*O%_Z|5m)7oMzNYa7x36{fAZ=zLK^2ZC z8ecjp@>E+a9UUy5Z_!mgHwstn= z+LE&&Z(+r~H=jRRO8FViaTJ;9GI2T#sOn~;L&H4B-5-FVcEXKupG`ja0i8pq_rXwh zXth>@0>6Sc2GVI(3Rh)ti&x!Xx{&oRl2ZsHt;!BfW5ZCE23cyyA~h6c{#$8Wdl zG!`@zi_+-G@p9bSIN04?-``jUF;&Pf6)A9?P8JtPw0L7w+}PYv$V3UR=VctQ*x0Lw zoCw(AfR7>v#(}7hT@NN_U=$&;0f39VA(2nv0ohAEJxdMCl);Yk0o{nk!6d0I+*)i{ zr%S8QY-X3Yilv3+t(DSj#4YbxIhA@i1@;S1qCxNiS;m-gBJgG6C>85s4kMT$Xv@-@ z*fQ|_0hA5gn{j{+QI-!#6QHbsOCZ@|w<7mJ^T{Y+2no-Dk{(c%f`uC9HewyaV0qX= zfTXX-j5#I;eZjQAQIsje1Z@Lar3xF0=FZ^bGLef@CoPU`zaIr6h{QV2AUms>j}GCOL6&c%l+)%F3b&cZX;$voje$ z+4ES~Jn1#K8F=h#4U|a(++jYV#{>w7P<$qgI`-+rJ`5%hRg>%k?MCq2;vfZt*a+$C zWgH-*qENJ9`kPG5Ny(IJvA4?~N`uHwB!H48Nguh>=von$x8%|ws3X%03{`>(ge1_Z znfVlf-!S##sX(mYBj%K)v()2aw-JuJ;ZivL$tahsfM3clMJj0fp3 z3WifjxXMv_&!wO%6pm%tWFT*l8VTlb=;6srheG;l{mR00F(2(;orn&w(b!(vjjwN) zPPf*#=4KC$E>1R&4mbAqua5!JT_0W2+i`e%efE5H|M~9f==}2A`Tgz1(*+#vH0DD>! z5;FJ0URsvL#nB42aezBa=Lr1+a+Yj3X@^)%PFOYkB)AHwC|0P{Hm(^KO$b_;Vh#RD zhg;{sRZaHTCeR3>5S41I3#KfR-K9K8FYTY7pOIfUxusC`y5=Kaz;$J9^#M{rZKDkT zDA=^&(T=9JAr&17QeTr)+1Tko=-G|U1z){=SMg?{z4N!48hKZ}dE5yHd~o~CW<{ek zSXGsowz#IuQU650Dekf>O@YFYuX3a>RBztro6uAxos!z$-`S)HV?DjHc>oH64MW_Y zDx}gOCjtSdU;XWTb-MRowc=HT3lY4rzUVQ(D}a6 z6WO-S?w)My!1mtU*eow0g{}jr1OYfVhh=IyU(9FcpnK;Eh1C)*r}=zgjyT$EA(vzE zK}k}Mr+F?HPg4-Xnk|zG2htH_)<7&AhHT-2Ht!2FXL}{G7sT5rz~fv&`uUbQm@AMH zUixH+=F&Ce33*)62)AJn@XcK{F z{&ZLOU`Knepjv&Z@1k`J>J^|$F%S$Z83?dz3UQ;GjYDq-Jp{}H-JNuBF%OKfA08cp z0Z0Cac91TCxnj{w0DeTw104gTJXtOi7)2#vAm~%tgIw;=4`m~w4`Cd@Ux-Va!a5?+{-+J}@^`Z9pW8KFq>EPYz!TR%Xil&MeQRrU{mC3k-*&?!Xk!ODh+G!*6#ujGE9wfbGB0WKo+O_QV2Y(_B2ZPz;sw zerCZiEkr>qb|a$}mE9~iSiKIOW?TRUP=q#X$exrk_;S)o&l{6l&pf1_@jGV1W*x0t zxQi6SQzosJjtRL^20($mfL=c|P7=nbgRaYdpPYw5HfCneJ~29~l?@oi6twHo+knn6 zIs(eds2|h8a)!99l>=8&(vsba%dc-l-ZgCCnKblDs$@lk25%6BUBmriM>`^)f=?9m z#X|7zecVOpiQ<~~IV}bo4N-5d$+)K*fVt zHKqc?z>|+2dIi7)Vkcac%}wmodU}ap$o1qpEIK>v81xiWM;z9ZoTbnWT>;80ot!A0 zhVfP@zVNEHv%9YeIRHbtY@mxLw_=ndntZIUe}oe}1&c%-KbTAOIPOQ@Wq`0Xivxyg2J4}o|JcVzQ}P$dxY;TNJBzOhkqUgdAZ1UghuAj^Qz*~% zLB>W)SOdBQC14|nBJ`AybQ#k^64S7?7y+{-W+QSaa=C`adJPXJxtgm_piLT*gSm z9n5*bQYQtB!-kj47lOdXf;fykLN#~L>~^Cl+a{e@U=TV$|A^O*gZVHVCWMUZUh-Jo z)P^E}gaa(FBR-rKQO<2l4a&a`%;rSWZ62(zEN`3~?Oh+8-JKq8?;YG9F$!EC9pJA$*tizT!j0;r~6#UKb`1VTGD1N)hU6z%&Ey?GTO2 z_1sT8$TQOM+}6eqm?5F7iwC4aH=^b^Gp1qw<1*9@j6y>gqU432)R=`f*-@$m^l(h| zoO;IWb|zI`y&9b~VH_^ul)NW9851GQfwl@vc+TRV?-(LMz@k&}PVH$v3k6Pf%78U^8gq#7_ zlpCU$jiw4e;ZBRuX)qBBo09Xj4GnanZTAzI<4(@Gj>i}++EPU|;lqkbB%}}TtKl3~ zym|fZ&70S6-@ShGir(^9zit2a>ec!IYRAUG=GG>RYKSj|LN+BW=3~JOotty1bT)_c zHk&fn{#t4Fl=ZRsRfv_vxgvn=Od&5g>IvQ{&M7|`3B^O0W;o$TqlHW&PcW0h*)-+E zfJWf$Gj@UwrMlcNggnP2z&(qfyBRASj3{=e(E}C5LGkUB1R;g&xIsg^hK>OCvyvl} zcx>~|U|~%Z7g6fLRgA_yVKyoF9q5;n9MBA`fbbt9O`9e(HXU;yCTyk3Xf~T*fGEd_ z*6GOdSdc^Ty-=D&S)W-)TL;Wr6j7`w^d%0rNmbN-Hxiwwtip;yGzOg73)_K`iMkqk zGkIGheZtgV&yi9o!~%2qKU1Q6h`La)3Wc z(4(=AY$x>@lx%R`t*>clshQvFZ5G*$&i;O>qwamIz0Gn8{2Ea9ivh9;bI`3+!_ES- zDh3E9;|^3m3>ei%?;F`Ku)M%lLF_{u@LQ=rC)q(Xnpj42J+uj7uc!y94Y8^RFGW`m z!U)C#A|U874M=2S^yp%6B=yiJA)1Ll)XqkNJ8+-UILx0A@-wERUg|(QWy(RFVUTYx zrJjRBYIW~W4=l{~9(=Y<%>&~yEO7)3T@JB<%+KyGyp<}B%azp~l}$ZhX=~pw@HaHP zJA8Zc_U-Z6$;s*Q+37CFiIct8ds}a|SN~q*I*4U7{!Q#?MO=77YPjLwq7qybh}Tya zYW|(jHbnYEh#h|~k*=t(xsm>^x?B1?deZ(uSXK3COd`ec-ym=_)%E|4T1A?pvG!2< z@A$)iY9(eq`m;!l2$e(6KW&0vB?>y)YW}VG7k^K62fwf4ukS$d=;qfV-0_kBwu*vu zK9gSQA74J1uD{{1{**p0kMAlj_U|5V9`4Euo4ZGsXQ$U6?=DiZ&yNjNU!U24Z0?lH z#g#RpT!o^4I%Cn=Bji*I<>HjrHXh#18C9bulU4?a)s>D0(sMKUrS;Xr-R0um&T`&a zjKEl!1mYfgy)s!>x6-I$)jy^+jA{%HyyYf#^D0~t z6kCXz3kD6VF&MLPH0I8PJ-wwLlw*$qCW1d;mg=2*_;$(L67881l(L^YO2MUG- zzHpCr$|0PkdaKpI9HUg| zG~_>2B!1;^y)00<+n6%`M!0-8METPOpf>lPmK3`La#0 zEl`Z{k^;U81UO!qO<3(T#wqMRdU7lp4%1GX+XBd4!f$MMI@yvSRO^Y#6F<=dwpD4l zeRPbNlQgib!CcSghMPY6;%q5c;z9QTQ$bfpJeG<^sHOC$lhY^?VOmCsIss*iQpKF- zCz~Zc7$<0%q_Z|TO`9CG<6*)d7&)RrFct2g6h3T zfP6>-u1|(81wpr>@*s(Ep3ehhN;abDoY^j~F3zu%7t8a>p(V$ecI9eo_4eX$Z)=^AI*(FYwLaz)T{q~Id}B3+MqRw+cj%nW1Y* zgi#0jMRf<$DM4bnOt@so>p)6}p+cgLtdEllFI<~eyG_DK%a(!Ol}Iq+48)ucS19PP z1#OhBk(}`db8)bxzDTS=U7~#C;p+Mv%j1oN#(w&E^Mw)niT;81LA+oJuR*TppzuuA zkJqO~K2Y1xJyd#l`u_3hw0tjXR&JauwLVYSv~Qg{CaisL%Kg&+CJFYnO&IA&ny+A#DwQc z^Yi&UrQ0zVaeA98V1Y)d#hE-RBh92{0Edw~L{UR8>1)C#E9}-bVcGI=r zf7X5a`Nto%-|GJWza{;6zJI!Ydc1$Sxw^SIK04pn-Q79ZJ={M#J|Nb*cd)y?xw8=3 zDrrv)v>6>89GxF-?;P)JZ*4C_7Fgd{U0qqGqO`a=TVhAL#Qk(>erBeyu)4ZBH#0*m z`4S??{A@8lFU{oUb3|QPedMNr%%k1qQ1{{-SJ|=BhbyYYqs;ALAD|brh0KLP*<9v+ zRY+%2IciM7RYhW{;7p`2laEsM5%FL~&M;l!??fm}MZgoV35*dWNrv;B3Zn^M(i4e` zzao;vp^`|G0p?>RL+)@c8FcdM0t`ZpFH}*4LKlPARfd|_&PHLjY^-H!=E=`WLwGss z(K86*bch58@XqEIMja-bZ*}0=z7qG~$5-F{xwfw6D|jmwOvFfA$fdF$srx2YPi;+7 zO9O_<9!`~A#6?8Tn8jU33pS*VhMOf#t2hPL&8u%?7P%=xUb;lgZ7 zPRDIiutu=enmt~V**-zgv16nMPI-GL%+zo$SBlLQ7puP9HQu*09Bo}U)YP{CIVGUfRFBc&NOQKHdGOeZKkn{pri+z0KouOvo1> zpC2#d&ELN@OFur}UtjJ2qTRO-QD zqr+%*x-?T(^_1CfWh)2A++;%d;8Ef7LzoA%lAI=WL6(UJiLqylwASbZ38zTJD%I`` zW8h?M7n{z9RYNK^1`2z$Sl-y%WevHxOU7z(u9(Zrm*%Hu<}x!go>JUl@%rHJA^a0Ae%zBF$2iPW&o8*W?<2jT=rA&#?A;tkp zzKHn?<&I@I;{_*~VPYQI$tjwv@nh=Pc=L`5jY5meB+j{NM0BMN8i{NGWJ}YBO0p0Z zs~0Z=O;D6O@Rd+~Mj zugJbw1q#b%HaMpU05cEZE}JrIbgg)(I@Li~lXGDS(qF2t_TEjIKsX-vCj`C^p*9o@ z5ZClLL+)549R_LznLV6>*G)o)+ZZ7yLHCQK3)mQ7U9lbajYw7CisqSlk_o1;P0kva$Yd*2k^1d%w3|DOq zj&-xF>FkwEfx)C>EzD#AF?&rlJgBpI)B__bnYCrEX;r;b1C*slF>hV1sCXltF743q zet5REb@66rF-1IWK0>=nBpYM<6(n$z#Eb5UI`DhY9b{FHXf#Z*!(H7(plB83$fV929 zD<6q@WoKgz{`%_1YI&)gn<%D7cQyI7b(*{mx5_I!D=QS#lH{PYgAygOsJT+60DZVP zLy2@g#ipiIDou-ICM0iuhfoJel>+OJM1Vwd8VE}&8bjYpgxHhQoFbwgNOmE~?xfbz zWW(-+jH!`V&P8|+Ow5s(*H2o*>GoS=P6)6rR&q`gi46o@FPRST7yN&y_S7~9y2pjGDX|;*o_d|Qou^=#1(+kDgX~EGoHrc}&_Mqj z2woI7YB$&e{B0lr%m^QXr3V-*)^I;afO1HxXCQ!T`30^1hxF}R9Rq>jr(+I49{Ho; zWgvK&2e3f=*LmP&D(G#ei}`Uz*2r_cv#uzWed{amoxm;gxfG7!Ms#t+oh z3Fxn>vzHZDPa6UUeoC~Ffqo9s>KN|n{Bs}}Ky45+0xAewW(Y9& zEO-F4@$BzGCZRi_?`8iE?HeP-%RoT1qzDSH^P?vq9zFe?b!ghqH%S(N z=Mweqe6t?DKT!Jj`Qy{(<>SLQY&!cJN5Ai_?jK_HoK8Y?ME6)OFV2|%I=}MzUpH1) z79pi_=gUk-lUbgFv4~ka<*|f!4Q-P)I~zG!KMLrljBx%afvZgHX!Svd4ZU} z$%=(fCezs!3faK0lB@=g0^*$-t%-h5&2ZQ7aC_&tfo@&nh(bLuPLVKnC5kF}hyk7g za-cV9aPcXfJ`;~Hosso`qNPv9dO!~G(qdNpKffiL<#M|D6q9!QL@$HZ;9$RM0t-U~ z6Ay3*oNOea=t}W|BCwmR7MVsntVH@SD$zbB<>(jnVM|j9i_9DUXrAp^;7+a7ES}qb>Fx`aWS{ zt9XWw>u@!wU};by4#e@LkGKcY?}goH4ZQ5C90|<a2W|TL^j@7^ZRcV zefVTNDJS1*Z_De=Nhjr9)EaovbDh*1;)7>bY?*RdeQpvQKBpCJBaGFCg|KkD;*f|4 z4Vg$lG=lZTjpfVbCE*sZ3W!y}Nt+ySWZW+{hu1z8@JnH*ml||CHAnoMnK^<I< z2Ul;XC4c{hnC06_FihuFm6vbcUWldrc}~7W5kg%fj_%r*O*F~6#(FI2aD#Es)2s~s zr;7qZdXbLxwX=<sDjIUn5{^!5^YqYPqX<$qX z{ufB6sy5viYs>z%y}PNgFQbhA^6S5p)5ZDnI#j>n+P}=DJk-v|>EyB6{VvkWX6h}F z!X_u|dXX#|k#pmLEy!7r?slZq)()(A!pnyNf@ST8_atWCeqeL|9*ors&g$)}-*ygO zZ5|v*2e0)rpGz#;a7c!_C`T5yt4(0h-B#vB2<#zO~%43CD z0{3Ok`15%TvmC6WDg3lzffWy>{fK2K9TAQoKvJUVbS4rE1w!}`S#n|Cfv_6$aZj

W9*Auau0Y3d?}J8XrHqJt6f^zUaHH4~xGexZ+$5+CHq>psdx8^| z5r!<=P@4t+8L@9s?n_Ra+pJPE!7Z&OfZARpR{uUb?-=pE7m-L%*3E2oL`sy;sJa>~6@OBMHkzs$L=3uxY)CUdaz189 z8v&1&*3RysLH+>gP`H{cBsaJoT48jeW#GK!uSNr5p1{=!m>b!SymCheTPwQA8MB+) z8)!ObfPpRFfddrpMqfu$T}3nJxlX_$ox&N>U;TR$z@5W1HmXx|36hV|v+N!nY;SGo zX(uDn+&rYxS-gRy8?N}9^TWy$sdj7aq!vtUOWgQX>>8B$Joq1^?L~@xiKv9#Ydu+JpZTdWfO+-{NECS9P@=jBia;l_Os8$D3;D z@Zd;N+m3j$@`9;q;6o#52u(wehGJE~uTAp(ij%=?KbN*&az zfA{Af?qGHx_d?Ik^T? zD4q3BIm0fv){wFloTf&VdXL!)@6sD)G{=(VG|`!*wQF?-hu;A}9HsB!mlPrTd5TbUS z`|su+$IHEqSq!ZUFqMmVGt=3{wAq{GFLcG+%cW>M>7sFbLJ1vP30RsDhJuDHy)krJ z7H6lYvxS+ZnOr&%r%*5#OQ(~5yB=l-9=d*NzNINwbcP<&g}E%WgUl>7vGb*c;_Tu= zxxBu*xUhcYqwE&)HR$@Dw%8x41HR9Y%O$JOLYm2$OA8r6#t28xOZ2!p4fmbr`4XsjF!#+ts7 zKl2>W`dE4+*~0L^w~5lidKuY8ug7=+WD}6Hh6*su8KP7SFR4=0p^hlE7yuxCpqYUG z99J2bFd0}yLRics#Fph_5^faIzY6lQO4Vl1xQ*fmh}weYN*>Sbve{_vP4UcMoO>hyZvuvVc8i**<=JN^_}&Xll|x{<56B~RgA<;XqS*VocJ zqzlazvAd^4nKmhqrDcn{H0g^*ax>|0G{EJ>&mI*68mNFu7FrXizwSO;d3*+kx(@-q%u7-RhYn2)c5uLu+d3zh^?5k6irH$6=U zDwjt{V!TeUrw+xDS6HIOb6H&c*{pwPU}b4>XMGWUj)u!+`l`(xg}r)1VR>VFdUp*x z%JJsL#u-cVo#WH({fqsRyW6XqTg;w!XE(PGcOUORJ=~o=e!u&4{Y5%EzyJE<{`wIt zas!X(`tQi&KPfn`{q|M*j#2JM?GJ%!`YzVYjeqFAe*-fBL#VT>83HY1a0h2Q3`GjL zte;~XOkK+CAg=P0SHK@8D~#`$_INAyTaaZ=^h@$jEUD}k2L=~bgoN6I5q`SPa16FH zlSC{Axz-tWn0!()n7+-fUTp21-`(BZe0{p-Q~Cb=)7L+EG(54EZt7xNrvhI$1T?X0 z1W;{XYj0<3Q)_RK#p~g1?WZ=?fD-1=#m`=q)&BjbvbRSq??24$Np&5q_2>Ja%&JoS z@Wy6xTsLjXKM}CCPmF2lM(?X%b2imWU%!3*geUIXyYXpZZMVUcA=*WBoGi!y5GBq4U2N5xIW~}DVJ$)pRWr`1&W8Fg z_0kWCFX`p&^XF$t`gZ^6`S#}O^Ti!aOA-Rt&Iym8y_4<3-JMOgTbujYxzYWd^~oD^ zpw(C2-6JTrxv{^oIlok1+Tn62E-WsW2*)nWudGqD%o=qO@p^G}ZUMPO+(*z#*o73( zM6j_Jl9_xW%5;@t8=IrnED*z}L>?PMC_}as^y1DWi3RF{MOEj>IC#)}G7}8({$5`u z<1erfOl8PG(ZB2qi#QWCHfd(7U?9Pu6{B}C4Id+xOLCE?yvckFo?ATTg;5;X!$jEGz)@u7slg0@Rt~BnJ$-=t=*m2Bauv$vY1Bs zA=uh%k@lOr+IqV?`^B#gGsv*>!^y;9kj1e0pKx{xjK=UVuFT<{9&VJ>bNq_yBY1!b zLMuTe;lKDl;U5do73qHD6}VaaB&R*F_`Lu#fM_W}8sjKMMFC{o1G0XkyI<;|avk$1 z850^;Tf4B2vMz@wVZde7o){RE zos;wWhNh;@PFa2ZyH^eM@J|mOq~_)Zc}HJIlXOjbx9Q{I>Dl$p(dEU($>DA7+3DfM zu5@vAdG~PpaPi^Y*N4;VyD#^*U#`yYuiHv3-+sP*_x|kk?D*t#ZDW7CIKMfcsV=QW zd`akPv3zwQ;|zwk)^hp@EAdP2d$Y+{e)06^v|8O-+F0LRKRa4DJXl;vrcg8H{Nemk zx=>~um=B_`l@|-;mBr2SytKHoe!jW5mQ`4u^kJat6(7Vo=6*VuA z5L-<=oq7`zfy(S71d^#{l9IdozSo4|-|O=mrpLgh4EAZXT2~^yyt+Xwvqm#1nLSCd)~wKhLZ)hVVQ#)O3&E~3I|tGRyv?D%s}I`s zL~mD9ovf>O#zD+cSg2?Pv_QKg1frwVge8m4Kv}0&hoNd3+~dp?yEGL&9EM5aoYMve z6|rUuU0+79k%VbTYD^$DYsREe9omWLnuL5IdbyyBb}NSl=rWQ|H1&@F)tJ-^@%z_2 zVE=s{AP<5>f>5l}@yoP^2$Cj`dfL4By{5*;NAc~BQgTKpgngl)fK7@LS%XTahU%<= z|2;K>(MNK}wQD4!l?9#GGl7+c({qk#KxDFPQ#72-pa=9SC zLyCK>h;n43L3cDkF+wJu^(1{{?kpi%jr`Qfx$Nw;gbAN+(h!(U6u%s3BGl?kF@yz` zdf+_s24e;@M?9B>GsIP6PB?fVSQ(yb8 zwuU|ZYv~SB@_p^w1|*TYx_X)$?*~p{8#iHkYi;BFLPvt4xf2gELdej75^UiBqINI6 z!mR&BM(H>oW9tOu6`QWG!cax0)6JM*Lzu9ukuNY3&4C=__M(QFA%L0HSZut06OL`S zL1U8w&cJrKda$^*FK#)nuP^HF8tz_S-`s&?KIdUj-!g&+nYNg2ZvXgBIo39|32SPr zh4E=&>*;oFcT1n5p=sqz);l)7f85#F*wfKe@l_r_sjGdqUfi4LOE@YUfav#XiajU& zyh6q)K&OWFWy;*}Lb|-XJims2b-cB_bGEvJswD>UKOl1cq39q;a-*7q_;zHa0Ox ztge*i=Bre`EQ!ZF&WLh(78({2{#>p?#YbfsA8EBThsgt}gvpX2Gg~NQ07_+};S>*G z63b~;ycoLtK{kI}lYVblB1uQllFK5rM5n$@Hb#FsV zf>fc7@C<+#PO~BfZ@g;x#zy_V7&xo|vPc4ioXhXGIJpIfLeU5uQCG~u>%nUBQ1W56 z&=BqAoM!h}JZAHl^mG_Tb_dG|^f;QIsZ(z2QnWSqpmX5oX`!xzv<*Pa_7)73WR-w; z1Fc|Nr)ZVqnNWQH@#Qn~fLy^m(AF#?rOTQ7-{t`ni+%xS`RhE;)}xdw*+sNAK}h;z&X*xad~ zWb?~Bzzl)2pMI}FKv#XBD8LRug6ZoXVr~G(gvp|(U&&@euwfWcdc-rI@t~)Bw7XC0 zArjMr9L+p{!q&?sxo>RT5%lQj(dnPqdM1x%^p0>ksnM_kojzgRPrzbl5 zhBPBnen`z^h^{25jZc_d&A0ao*{3f}*FRuw$XgjVTACl^3|Bv|UcY&Ne)s;Kd&EcS z`uhC#NFt25d$6&)y1#v}g@s{zg@KqBF=_PC`p)9Y#$1)Ft(r=gvVMAVJ%AkC7B>lR zS1^$Z03R%-L+TL&EjW4{Y*^J2T$Yh&F_9%0vQUkd=aNZ}UvIaOsq)0^J~qmM2z?kX zPl)BPKko8L{!pYG4}?u^(WpnQwm?{o_#CPp;oEm20!^8{7BvM?8V-~Ls-X$38x9?^ zw?9M~IF3joC)#N{cqGa^OdR?}9D&Tl(BL3|MS4M1XzFIFhAgaLaXRxjA!ni*A5dc^ zFuNlzyQHpLl}0Fy~e|c0dAK=-Gqd?>)el^Pp zn3I~XmIhuL_QkPrkW*ZqR|`1_deyX8YS1;pYi^8miB4nIkw>BSV`LP=1_O?c z9Eo6E32rQ~uPIC!LXM&*RAfpfRO3?vovlw_)V5EPUkj4a@cSeWGiYobLkQq&egNamxv-4 zB57H3(Xe~Y+#q(9^4i)Oj0*L{^*E?g>!ECELpj4hfzb;^1Y~eK#I#>H3GvMrsiaYw zTF55pW{~huve+EW=w?8C7$Cmr)ke_lgLKiG%*3QrhRNY+$!f68nN!QT*=3e;Ys@!K zPoC}X@9Z4@_WZ^6vzodmHEbw4iSjFebk!+9ch*0tefjjs(-#vSM=+83L-xSk?LQB^u9m*)1UwJ&-q}fS7w}w=KFd_m!Em-GYvgsL)}eXBER{_ zH~9E3jqB?xE3l|Gmn)g_N*?4hmQR|@qfWa8NH5B02xZeis)RevD6O9(pdq?P(20Nu zw6yZTs^!_!4$`Q;R;qb{DDw109ST!zEuH31p4L5ivis!G;Ukz=kB^@mAJgUe=(qi~ zZSwRBJM*M_6cs5~t>nwadH%^~is&EnL5G6p`q<)-S#B>72O&6;pUvkZSh8mesT}?V zkPSpYq8UhCY5WdwE5pe=^C_egj^Rip5wYhA0w;-tVe>g{T*f5%s3YeV<8nffXXv(J zw5Ey8_((T}9U75QZ&0^2wh8th*iVSE7NWjRtyiVf*ti4YQZ`ZXD%26d>IXlg6+Jp8 z#y_i`Z6&)qqXk*SgCqet6JNXEYJW^fYK%h0tc;|tRLGU zA&2ld5C~aZM$Mh9*Lsx->O`9b?}GFOb>-+aAUa!{sc>&rAh5N7<07phR1%`Gm^<3> zcOpU$anZN+FaPP!)8^h$zTz564Mw<)kImq-0OL14fb`ufZ>Ohs*yxDGqvfUL$4_hU zJ)zFsTs79+zNtTaQ`;!LtfM}yzV`SfA(`8){r%G&YVMA9H~;SFDdxQGrBQ+zh#^f+OE{$2lA*ao$7eRguVe{@B$&c@*_w(OHN zhok;W)0d04hd0}6J1jNUSE{Vh=1Q|ktv&1v$LL`!m<{Dp#irwV%zR^tN8R2`sj|3w zxqUJlUftVVNM|=r@hzJ%zJ(I*lB>J|6gk6f!-UIzv$(akakaZ4E$wV>FK+IxSt9e* zjZ&&O%iJEs@elnf!E8mjS0dpt^HP{1Z>~}gA+4v#2l`mSyX?GDv}P8pxG3+Jg0xRoR`Lie5`GC_4_V=qdtT&IjPbOix+$j7jHXCE(z);|xVho)aA5rVTU!Y$}fUq!dYFQ<#)CVK)&6p@d7$*Q~ z+F3P|!(*Vg*-4oCy>7dmE?0IvcK*=Zj_p2s(1+90Zl`L*0{$Hgm|5V$xo@NP7%eU| zYS6{z2wM}U-8M1QDgQcPik3=q>-oxBKAT#~<)l)fyiS$wZoh^aXevxO6XJ1WB|%3* zHkpeiS$m+V^Rx&Ds87hv<`((Yc$ma%B9O=xGps36^wqE}PQV@F;X@cPkn#uEl0^M> z>ZFK5upJ2(SZF{A$}`$P^cKhH6und-N%W=W*(l>0&Sfx>@N0AjJI4%1>r@4Uf8N;G zTA<>58Fp@Q-qC$<_-Z`5zqYr$vb4LlwSRqfc6@eqcy_RNaC&-lb@BQHOX%VGtDC#~ z+qXZZHy=LUzrFkL1_=1;*AMUCe){?O)A#q^gop0S2TAs$>ANI-k$;us-+7vR{`5oM z^6uM*^(u2NVLq^xNP_L~eGs4tKQl0kU2osWsA$zA5CZ6j^5y53 zub;W^egFK>+`9daXHxg@Gyrjv8X)b+h_;W1O3M(6_du|E^srv~-rC(fOv-Xb(KGqU zIx+Go+uZf};X$^zkg-|3t1TUG%dSWvGb$fgn7$iuYxG`|hw}k;gKkcs?cE2`z5MNK z5MqZXZ#S>ccMn#!)~jm^+gpo-!h~zR!Zs^R?MEQs!2ad)n_)IpW8` z*)iWp{(HEwv3Gv0*+{J%?=LTHuSF;FQ~P7_)x84%q?@Z0Chc)m@F_Btu`1o%BM@6z zDwB$xUs_pSUaL^gUY_4vSY2IMTq;)PW@qQhi?j1+6LVxe$f#v%OSq{M0kA>2ObRF#uBjlKWv|Vj_1mn1qLq(^P*}j&20YR*vqNud zcdL?cW(R4cUlVO7Pkb^qO%T6-5?WQXD>@i++MB=987~8n)!Zz7`SS4jqx7Zm^WED| zjWXGn4w;(gg0tC9MD+F0O8VvioD@V=}(YBty|mS4$86 zPKFeE%7+GrNqi_-P2l4s`ayvyzEFHV6moDg?#HMmGS6U-`$i^6i$Dzc#lGN00w{)t zRJ4#`-h3 zGc(X{GnsmvlLicD*ee5`aL5xhx)6cE589a|4JIcZ|H=Mg4u!fvzPxpL`s#t;YI{fT za9dYTL$kc@V*iBbFEr6kSvzUqIypy#yZXA_tB0M9g~GwZ{rSbofwXb__VSXP(k=YF ztCQ1{>xYMTZ?1OKF4=d*kL$a=+uhCGo%O=@<`PLM)U|@yn+&9~v$p02L0xKd#-klw1ly2@HN7x(xqC<5EX?ai(0{T*qI z(VvR%HB)qXZml3F^@LGHkA%UVS(u+s&@@sA+Z{FslQ?{d$#6WBkJ2iHtRM7IsAmHb z0g@ma^MyqRkt5`r7^VISi?UlJo~-6*z~xC4Kr%zFg%TG^1l?gL^-Fl}1I27ma`?u2 zf>SM&osM(pZvOE@**iP|T+&WPpY1QN?`#$;YYPiSN`y;M@Hnn%dw>Ix z)94HnH_&^ma34m{ye8G!X4EM@TPaFF&u#!6G?BSsJ!m7|q zTI^WtbIt7kh1Ox#!Qm#jhTB4zHZfM}2)2V-=2U`IZ6KSW(@t6WMLt>ZB;&k`dWcB| zf@L>gjA2IlzOg>}hkoJppB%@3NxG7~sNOD4Hq;v8EMV`!@2}xctsaw9BMcR6Q$#wH zDly;{oOT&v*hGkN052!h5WKlKG4bh6vBm(#r8AH!#kZ-_YsK3vE!5ks?+iRh81aaR z3JNjV7mFS9uPN*h&5L68;UAM3Tc}Dq&0d{M2mum_Z99p3a2FJo;i@IDPsKUTLo^T# zmw`FVI6xzuYPh}rrd{J@RGW*XN_Z7Y^m8QAbLn_=u4_^Rg?N5Naed;{jPe#{_8@9V zFd7I&LtZ+bW3gmDT@mGRkr?n(=vG8}qA@9+ET^)uWSAQ(onZ{jo+w*As!-i#3cWEy za4Ze*4p1#9{6LJOHY^G6f{L*~3_~dm#koW}FKWZWU^n3x*}7D_OY?oVCa_8HB@htk=>@$T04K0vJFtNrcWjqUxjldIdao3Hg3 zcX!v<7q8DxsG1Y~7NUCM-OYX7yZeVXH!o}7*1fHHU4K_wcVAyu|K`_Bm}`+1Ag#_A46yD&=%ZLdO>nuq z4m^JXv%rYvh$PJk268GbF(LZcgnALB%ub)x=_#f+5BB!Y&yElH^xnLAQ&Us(`s$=! zsvOtX)U|exPW6w@48xr4QckoI1*lhc${Jfuk>#Uo@VZX^vQ=VL*Yl`Bc|6|Pv}b!- zN8I{JEaI4)(8X&SHUraUue0MtOKf1jRXZ@EpVaqvbEodc(AUWd z+Fk=fLF*UYhm|Z98o5X)kHODiBSt1AnId3;m3Tw!Ug zN_kv0rzlF~MWFU&^QByAd6rh8awQFDRb(`CrAR1UL^P(FE1sZxoZTAEW%5fQZzM=b zo5SuSne8+opjwoG{328>iwacALD=;MO@#3vyTyIj(YzsK5K5DHN!sz=`fT0^Ot%PK zjuHx&6T}P8E2{8>bJ|LM0Y0V}xh}iU;iJ1qZwp&zwC;f21z#h~RtbZ>Rp8@^T)^FC z7J$pzK}v#+FplGv4uBS77NGc(SwP;@(fmU${{{(D&Whm6w-4Vw({A_m;o%GO<7cTu zE`|a22Dl7aFNm#j7tj69P9Ez3ffxp;@<3$47TJy);pf^zAg}=uwy8zg%mvil2@Rab zK27A2J81(pnrIr3Xos3Kpzf?0SODmFqlk)5XwIK zM*D`9T_c=P`$q)=i0v=?F##EZJH%^=4KKT1psFl{N#!vMfE@ZY3v~1%BC{Iq?b2$r zJ=P%;+f!WW>|FVV7~M8f*?@pK4_R2RJDjM;#Ffn9QssZ$x;}gJLDt03LABWcE{QhT zo2wg{oG8^me@hSL@iIW>G8$A)Km0g7+*-K#{^|Dh&ABwYxU;sg!{T&t846#iSfyxY zp_CZu`t!zb8|Br)GDfdl#+N0y0Tz{m&5RM{ish~=Wtaw=YJpHFc7i%T`!tL&=?w1b zxH~&rOtLJPPo>g2V*gH$K5PgjkS$!ez{j}LXWjHFEo1=$!f+)k67JPvqqlMBWYvsy zUz}{g3I@>ve0~!W`wS&3z()IQPD_xwDd&`W+G>J)G>uqpg)U&#Lqecm+oGZ-Vt6PUFD7{06>EK@GK*5NVh{qQkWGwlu29giCaM!VbF+ZsQ7qMBns zG&F0pHitKmpvnnTl%L*EyHjMNa35Ou{4}HOLn`u=16_k^*iU_`Q6)wjm?T^Ks+;O&**EE*qGjVNCNp0d-Sq zg-PPso-x)?w9thD!Nn_oTrB*H9MYHg^k6ScOpd4p9*Zl96a64Nu?fghnDe)(0OCK4r2XT|#h#MZEf->Ar&x z&`Z!{as0%Rn(GiKEdV*BpTqG{9l1@`gs3n32kn z3j6ve>FB@{LH)=;FHX!MQ9Cw>Oad)yfLG4I+@tNWDXf>w2$a4|O!0B?P_mquw30!c zM)klH!e7*@55q4|K?!B*nGuaH!*s-qFi@RL*xCbDGKgo7GUDJycOb`_r%4)|`iRj^_Gl8lO+Mofz@?WkqUkDVI z)9nt0!)_lw`%siyT_6|%2SG)wN8${O+8YTuLwGXX;3|0C22p(pH+vE&#~~N*$UYjt z1l-^NgjO{a=P!o*tK~&P z`wNxo0`LH+Q5!V$;F(*MwzrQqR@N3)Huv|APxnvWzC66d`F(hCz?y4!@8tX#FVy+% z$@PottLuy7r_U~*Up~7)_;`N#^7)JNldBiC2WRVjVX5wA4Pg*kEShAP;=$hFu5Tk7 zN-m@w&pJ40rHIFKmu=@DjLbDS4xMgHB|&E64fPB;cV<7mNlzimG<+p3I+V+&@sI`K za->YoGyzDHwi=?O?Av|*3Iqf~63YiiXNQoZ9zCLB_{odpGVS1XP2Iz-9mCw(de|hrHFB{qR{^2k3N}D9BT~z=lnaZikNbSPy~4P?<~9!-$2CFGQs#9QlMHvDRir$Xh~ zli&XG+vCT-Z66&zKH1yZ1qB1@a&HgobG5WorWO%eO?5V3z(_r}R4u}_OcoY5`kl7S zVikf&#@gZTTkdsJ@JX>b7BC6sD;*8jB<;_GD58N|TdB`%E}ih*RAe zPtpW{kta&qEz&JXC6XbW|4nXE^bTtG1a{Wqv|IHyL=1yYZzPGO_Pj7KI$I%N!P{Xt zpyJi4B4g*E6dhj=yEi)uArW;wuS;s)7|ZQOr;}zz1Lb~NiOyaF`E5MoCiAq=KBy_= zC^BW7F>wwUow6bS>Ub1Tz39-x_BTvTwbm0umbJ<-JyQ5hn;PyL9?=T+Rn2U{L1P2K zY>~CHWp9>$YHWNj$XLvT58#g83KG_<+lRXP`nSyuZC$OB0{0}fHAG8VSS+-KuC1$2f!NW^yR{M#>F7ifY5NC7EAokw)lhd^m%NEvJxzKYps~7J z2}p?Y-6pIZ3@HRiaCz`@>h4u^*Y%2R92sc-+_E-dnj9ExZs=7GwwN202+$m>#2H96 zGo%_H9-P1oFoE}c5>0w~NZH53PGtr^v%0i>@ccQQCv8euYbUSY+RNiZ#1OQW_J$UD zecj83+UL*DU%c2peYLeVpV_!N+uqq)ANjX_a}mGzU0S&Lr96ms^F#E9kzYS=LXof_ zFO2+>82;yfl|FuH7yJMbLj0?t@$MHM>wh5UfjlDqH6!bk{|CV~Clc~27t+dq+hk-* zB&mFsm#L`4@-J!L(us_XMI1B2n`8am27_^AW&PE}!esNxUb$NVUh6NB0Tl4{U zOj}s2WHWgNVvQ$JoLzvnwZE|}+a-z6Vy(4t?p=PZmzPp zvbu9X`SAJC@&3l%O1>hh1WUz*)kMy+o0mY26?bF+Dr*??L%CYhjeMKXmVKd#E*?orEF*(_(8QifQU+1!Fm0~VwsvkKhaK)W9A1ik2R(b;z9pl>*xj_PsK9| z)&>nlu)a-{moebzxV14gs*C^->BMHb0PZ=83t2P4Kt+X_C{RbQLg~N>I-v%%NlJEl z0-J_zS}}#ili2t)$_b?;{H}yrVQ2vMRBOH3h>QES7smtZSQh6&XVC3)L6~L8FzfI* zSxL;{+(eAwpzLQlF?(Gc)$D*W+`3<%C@C1jG;+M&JPk8s8b=OTF2iJZcgMIXRw~d+ zi{!CX!~q95F_$XMmI;ESvm+mVI^txT5@O0=7Xi>DODB0Y9;VDANDVsd9}2tacn(q~xH#y%@V79TjLir|{s&)2>D~hduoDZ~B z-1~htmf>sk3cq@Nw|8)K0aM}n8e7Nu>CMfXR|ltDv#&tfy#My~?Ki58uRgu{aR2b- z-A}sEe+a?jr@$%8zboGTcu!=LCUm*sRgKEi`2okn36kg>nw#iicR$J z%^sk`akO8MvBtPI#)XfEyq$0zle&ROVi%whlY=2J=%=jS9SahfaEH9vYAR|AdO{)s z1H`n*G1|j80d1sQ?(e@izq)>X_4Vx+`Fl)z4?koNKU&(Q&g0i@vhU5~Go!?XTr;-d zbl(IHlim?3`;q!H%<0rSxh1d~Kuipgj#^G?3c=acr!} zZ++kTtpSH1R8E_0)ATxY;BV^gYt!Zq-rSyD+~2)DJw7`+yFJ?3JX+q|T3FcFon4n8 zN`OLRJ)dOFZ^gT4X8@)MM5jUs1ii;7J%ckETOKB_ZnXX$WpA4xMH6#u$F2abfv8P$ zo9yS0&p$ukU%q<(>Er!}FOu~69p9x}3^ymY=Ucl+jHB$O_^w^;!NNOh`na%zgtfI! z2kP?1T1ofXq5o*+uDP_mO&!SU{>t7yJk+_lHOd)Q7H113+Rx@@m*+5h&ZBlL%~cAE z%dE;~OXbzY#bOa!VKrNVET6}{S_mX4>=lRt_#V*=X*$11=y>eDpc4Vv-=2#Va?$bv zOslAbYLN&d&moxMD5Kg6itgVLv^gb&3WINsg-Ac#To@v-6onj1XQF7BGg9774bdj?k=~60sByd`o zH<396WqNRAV2pl7I+K7V!(<#rG9IDzeq^wxU1a<_2ROhDp}`OKcZ=iWNIzr&w!pn@ z9c)FIkorjkb#s|O8shNU$8uOj`*}C)P8@KkJM4P!lVVO4tHpk0bH(@HY_4p=7cIpL z1-mgqn9UJ`5DkvO>X@3DvU|b==lS-rQ_WVl9=<<(eRm@@le`^jlRBH*>mG2vG7`Ld zeZd^w-b8awL(P3d{oSkkgM*FY+&=E`qeJP2Myf+PIrh)dAkk6}-yB`ty-kn)suq8=c9|#ZVh-%W)T6LnKrZk z@WNlVB_cjQ&ugzS81cA;77-9)UaU~ahSCrhlgMv+f*^x!3fb^ve^b|RU#sj(+mIR; zsL$p}kZ6U=zqt>x=IZ?TWPg2oAL)96N zy4W24J_r;GK+B3OAbCOHj96aYE+ccqXbV&8#wFlQp>UdXRk6UvJnHoXIH7Q;Ddvm$ zrR|N0RtAAF4v%_`aTohuwb#8QgLw8%vectPR(V=9;_q@D&^dpDUt zc)Am{h9kw0P3<}it(hqzpnP2Qq+TUDJh;+F8NNqpw`35&Gy1QCfZ$<>X0Ts_z|{E6 z1eyy2$MnpMXd$ECP0heEDQUFWH2yjYs0N%KaDd`bj0kC3Id~%VoPV=p?~g>>)Fbd16HbR9S&XpX5#)#Ql+f(~3T1hIv6_gO ze0U`IcA<2|urE|o38Ew*iBfcn5fbrJ;lp|vpAH620s3YrAc~ic=3~WV*b6%=$?Y(M z={}i{b2r6Rf$=AhP8aAo_1ZO^ne~;0`2_@RA|F`%tDJ-@v_XMOD!Jt;<9d&6Z*?6} zj>?QzTe}Bm2WKZ|r__Wl?w_7sU(l5e(%J? zTD+3mk%%igcenTUkN55_-qhW^eszC!UwihtL26#!YebuYii7jQIzD3?X&V5P3|_gr zU9OmRJ%6@$vfcXpxw512Y4c;*i2TJ|Tm5f49pyx>u25%H^^R&CmD9>-=*g<~ymi6| zIA)Ta#YA5lWr<=7+|n=@ke2s$R@RUA_g9wImezN9lCI>L=hBshcsUoR>cH#4^n?jV zV^;mTR%rnl8_-NZ#8*-1Dw3eBVq=XDkrAqi<93TsK;U7$!1gJGj|N%o{r&Czs|(^e zuWrt-U%iCC4iocmpY+bruC%bczPYusdwzbhw!Oc?=4$ulb#-HJa|b)w8o}`F)XB`m zYkf9LuzY2n`|(C~eSIBG3;_fMgu<_EHos8F!Uvzr%yPHk4G})i&5EC|RJbnLT*ot+ zl<2FDr`+La3aO6n?5yL&X8U~mu12U;u_{~Me1nUDu z41Ns*y&z$R`aAo<{{XqdaZlt!6o0T3<~G^a&X_=ZT<-uTQta(rJ)PFAg^ii3bVN-wEs2tKhdPVzRb@oA^S7Lm#KC`*9eESIvbECs68;N z3jvPfCWFo64QLHfJ})~E)J&Y3Lsxcg-m^4UnimKmFKBqyV&j~GIO}2D>z#5iVsrP+ zB_fg|333G?S>J`p5Pi|-g%>r0)(C;l7swxa(V+k4&Z=ei>pX?-y~$)(Hq$S2Cttha7`KD+#)Ye0kHKsC;l#Fa+7 z24SROgaXV6WKrxqC9<&YMKevDChnuS~&P9ECU!zP*22HfXlj{KAbKlW7t-V z-&m4*1{u8x0t_+j3T2OLd!%oC03id>1?wclxL%@E1nGzRr6DGU(Ge;^814oYqXPyN zUje!S^dvf{64kQ~(Q4Fs6`+fe0Tsy={^S%<(Zzs)gBeJR07gngBi0q{r3I9WYIHOd z*kohVw8p@_&>JzYDe9j#_2~F!kYn>A%-Y!2B6diAKZVe4r@gguHiJ0lcAJ^Aoi-PR z9swK-LAQgu8%(4KSSyq{6k>$sr%S6FyBi?1_m@^z%hcQ+Vcl6?KLEbG zb9!@ic)7oRxOu*Jc64%ieD!qy^40U_moIK;KIXqK52fpqy5}!Wo*^mRz;b$dabX&M z`m*+E4Y37ee1JrxKj>L%Y*w`P$l3PdzHcY@K{B*coLxF_v$yv0-J?W~*ar?6NPy$R zPyg}R z|MRH%@xO#>9{*FRhIQbdyuYbCWzBsW-%_&A{ad`F{Ip|`9;mJ^f+{UF&t5!x`3z>& z^X@4rK3B=)m#T9)9Ig2|0I6W653ZIagXDDyo!4V!lv@uqdibF zSf=SuT&zl1VrR?wIdrUIWibzUb@53#Tw0{=JeMzLiiP07;?Ur!Din;xaLIs2D<{c+ zW^$1Txip$Ug3O-S!N`7K-HFEtfk5jg`auvr6v?JoYtVAX1K&@Vm)qwF7#(yfTggXr zkFt4L8y;pFq>Uz*-s%^5H@nfTn+9NK5|@H@6w1#O4Zdc24#CHa zN?Uf(J=EMLiH9=YM}{>nv$hV2b3O7~Lql^zBZ5VnXys^lX!wK~rcNdYL|XgM*jV@J z{{HS={X5wQsZj_DV6RZ_;6O3Y5^iR!C2gRfR1ESJ)*c)dur}MJeNX>rrtw%B5G!{^ zx0)9XO{jWo=9_qK^4M%4ZGsHb0-8cWjuKr0!UQ&9A$ri5L|#?d$6z|hIiD8?X%J52 zoxrYmPtiBl$!~yy)72)HYb=W-84c+CAvvBm(iNg;?p6xW1<;Cto^}cGM_ifh;?Gsz z!1e&pC;A8tef6Q?hOQa)=#*J)vXA!9aJL&bjSf!ncXugW+@z9jcLy~C1>wuD ze@~$;oS`MW7156`;$J@-E$9)U#{c+NeM3kVzy20qJKjXR;GbW5#9Q7ZgFzk3-=lf_ zQa=zs#%2Hhm*&y+R|VvEE|$FGuMv=88MLZX1Pi$&#Ex!0flH(pf#R}?tOs()ujofJ zng>7X=Y7VJL8w_5s)rzSDfzI1%GCi+>tB_R|1y_es#fP#*S0n{w)f61t}fovk$T=d zbbb2n>(`szy{q+&4Nm>bYfH)1m3&emTo7NBCNz`Z=V5HeX|atF#QJKNhUYn82~3NPr5z4bo-Ty<5n zN5ZL|ROuXG!+io_Tc%<%9W;T2AWBJnMJglNW9EtR8NF_Vhjll$1C<%p9Bx1wCT3_} zSO{B^= zMtNXyE1RNz)}mKWBcAAiZ!%M8rns|BP7eZn=^dtjjcEm@D5g>7mmw92Q^5npCCUs& z>l(}pR^`M>1d4n_tD2sK!GT^i2L1}Ws0M?kmX@?Jjauc74bzYq_V_)_h2-$ClQAf8 zDvEi8e}`zKP86+Lj7%X0tI6dt5;~-&#ALQptrGM=!C>msQMG15Y37%rH#CM%1N;>Q>q>$J-V`eh3SOT~= zDv9uMV&)Ba*qOvpMUp{}Fad}2e6V5)Ng$Jm7^by{tLt$6*H?B9IDzvbU07rHQC*>r zaOZ3rJalpR!r}g*%`S3czPhHBjZdjri8&n-Tr#It=QLSONcs`7yliSc zbT5^#77FKoAReSbi?w4co1a^*uqQ_t;VY5M$;NjsF88k9e}DV#`@J~1z7>%_Sua7j zrVonN{y{D&i^;7U>(UH&QzXfWwM9NobM^Mzr_O#!(&1B{nvu*_W9p)3Ox<+U(LSSA zzWdzV676{Cl8W-l>5wzv43b(1I>3zro9(3&yBQI_wP5jXz5e?8;PCb7`J2m=85>~NM-qU3OOCh_L(f=GS980P z;G|OC^s`yUqpYJvA^-OA)5F94^~2}S-#&f&_VxS6oBOx;K40(O9NwH@#W_4UJO%~6 z54Ys#Rch6`v9qy_=d-f3$L)DzW#_Q0-kEVrp4rX)^;Oy_vGZ=Ot}Y!fEmxLS()rot zHJs?{8xkTJZ-Ua}nt|Rtzm#5IU0Ir~qQK$@BJP?_=0j*6>9{{ljYlAfx=55QDWcdu zC#DaxVeKTIELMMIY14sN$b%r8jFsY~(JE!?KoZ4JvJeUs!X|i|h>775#x6+kLp))v}$L$ zflh${K(j{&CbJe=&PcNoNR_14Mih}Qp!77GiiJ`Geh;AEU%tJ1ct;gF*^OpN`FEY| z9MOotvUOsgrD&J2GhqiJ(iWINTf30)lN`o_sbIZ#^l(NT93JWsX}SIp^&oz=A!YxtSYm(%XCp%JnE*+r z#5hF3BNqlbNq;v)Pu!$bM-C2Rlmc|YsS@aU`@k5kAwDASOJ2GMiVWirmOi2b0}~^y zsl|TxaPgj<&KEM6;a9%HUEBo92 zQzIs(=6)QeJ#9@5cbCUCjrd#mf;PW<3Cc#+SpWL+aPRDDYkzA_TAc->vc}5s06FCD z&Fia&*Kc2)G_>8G0}#2{-@XvT0Brh=mCVN0Tmcp!G`Lj0TCrtQv(AXm;BgHMcTX-8nm4&mH878@qek#bj#M%_%1ltwt+pUnIXA!4aAc$10ly@|QQ~C9DwD z`Q`0{wN78Pvcxqa#sT$|(Gzrgg0p4XFiLc|#h^M7KNPhWxx6QBp9Xbkg+4tw%og6@ zHd;MI1RZ{kI6j+$o-C|JR7(Xow0a#JEnOi`B;w;l;E%wsPx~CUXxtxk*lCse2i7$% z>wvD{)|16i_4l@qD*K=kI9XbAorAPoSttE*L^}53{BUQF4AwH4bQa##q}6OU&bT9N za*|Oe)KA6igU-IdsRe zk$ky?KNiqT45`N+;yCVFTWN1%^TRMO!$O&10Javxz=Yz}subO8=$OE~08DZQ&EJ6A z-bNP2qD3Gu5Y*sE0X2iR4hl)hY!Wyp`eB4sg*g(#!6Yd*sxfA!#YzE;HYQ5?M@4J{ zILIh6U4QR{x)%%P1WKDq5DIi+8lc^Q*@RC;^S^_i7$^TWGSmyfN1dx@~6P_Y_w~QdK-=zCrtvhP5`Cwx`>IeWumNIBz_qE z35{qCVixFbe5o{Ycul8r=`_w75}i&+6r#{0gGiexp!SB%qj9s(p-T{DS{RxZ$lighy)*WtD|L7F0E$UM_jp%JIzir8v!s%0>R~9$ z03j1gC$-+C#6AzZ4~ZYsIyY%zdL4tk5CO;g#DkDj@3;yp4VcmKNrF8Zt`m;|V+t%% zi_w?#*uc_whfj2myQ&203Nxqi_nE${3u?p{A!T)(}ldndg=ZKSK@ zWgDP~nzNdQHYFbBX^mmLw`ow>)Y`-StfT&AxAU+uA3bese*Cx_{~Rv&p#l2}E9@u5 z7d8FL`kkW}HHNyKhDZLVJp%%$U^^{cKzHG-5ug&)HW=+#_(A{fVq?zC1S=8vhoZH&MS;l> z>uFO>?dv*<AQ?3Q-%R$$FEtS4a>yu!vIaF9rSrH z4DjGZGsB_WqkNa>?h8E(aatK^y0K&7Y?HTj(j$h!rVsBW3t1&M!Cv+heag;u=$9lz zdpc-InjquR-c7+H$g}R@!AVu`Fw+2Ph;neWzXwcKZx3tUQIJ_&4?T<%zYhcG9$YD1 z7~h8&28P;y4~-7781Cv|9XvVA8M3>3u!e95IVz?B_9LQMf!lHiW#WwA7IM=bS0oXn z^3ZJ6dP7cQVIdx~m?z0w)5#2pv{)(T7uT-8z5DUuM%KiNTZs#`w;e1CePta@)O*PV zaJ-jt)t}NA!dxx#k8jD0-W^>YuS*rqIJ4rM%2hMJhP{T6@p8HLkMo7awT-z#VTpSu z&XrUq<;fKiaG>2nfAL3S(|&hE@4}3z_xPe_hdoXkVld%J#zNWoQp!P)VqXozeKqVR?*!~&(Gb7_#ofa3#Ko+7;f$~e$l$P~B$55W4WD~Sd zk)|{T_yIgpff?vD8mCq@$!G<|nj$a>*>-wTG2odR!4^Bf8n>^dV*;6gN^c&j_?ZLT zwA0yz3XaBng4H6aQm4Z)Gp=##QO0^YhG9Iy{u^WNY$G41l z8j_!Q`@w3_B*vuMMS_~H-d?=_l;Til-c3TDlOx#^Zp}E0dOJ~7`iDA(M+fLOpQZ&5 zv&0~ux4NGd#LzHN=yBnw7#ZN)Ij9+EQER6tjmO5pxFI3~3`9&M#;K`sPG7^rq*TX| zW3X_dgG|p1^Q-7Fl)Owc3-BcseIwITEKz77L-b-5F+zQh;_092hV>5Oo$#sxUayx- zwM*-CL%Wm$z7QZlkJCBbWtbGcQjOIE_84xm1DXgjFXR&>TOZ&*s8(DLfGEPLxC{N4 zk<;aOF)sLdQSfpM_;}u9dkFftyShSdd(6*A;LH_Z)#K+a4-*82O1OY7J9-FKra(|4 z499EPi!_b3B224hByI0&<29Mfz+bA&(H;lHC{24<0?R};S6;1@DkX38yxROx9V>0@ zkn-3QPn6xg^_3;Ugln7o$NR)V_x9&kCm4pX(N^SO1LQja7oS;TX3WzjB1L$82e|1F_yz)@<0AMZc; z?b(xO@VOox?Cx)EZ7pu@?;q|S0Djn6+@Sk!aXG(OSe%up3LxM^&?l8oK}KD5d56J^ z%;pIJr7C>OX{jyyJEI+%C%Rx}Hk$%&$vTSRHaRagPHC4flw#>bjvncRLpj1n1TPkl zhLk6t&2Tn}_|cz1RdTcp0Egk8q-XyIj1T6Y(P9N=z^QUX5KDsD(- z3cM&`vEYN;1AS&dq&!C{=?e-Wn!I}duN7eUde_i zhWa{1J#AlDU{F0|Yz*q_;2Sl3`0)P2<=vb5kEA!qIS`zvua#k%l(VM?e?YN1mj(44 z&6IVBVh>Q|ZLK$<)(-oLl9h1RvuzD0W*M48gVahsLr(c9$SdxF=zPRI@Jq5ZLsXG- zV(){%D#wV^4z!|KsT|;xKh#NXj<9MM4jsBauyS;Q;%--9g`wa?0j!PpMHGSJ)P#kj z6K$lEcM~xa+R%V`kw+cqYR3`UOpXdeC{l~iTsj#$+WWc{DPLHsuLo4Xy_gs>ol1mM zp$_)jgGSTnSPxB&2ubAS{phFB)au#6<QIQr zaq(BHL~Z&#szayr@6kvlsYCWR(uC~a31y=TtwSOI8@!nR{qI>1g)}J?j!oXZU2>pa z3?f>bijQ;84?>NtLdvj1v})mpB6=bsC!WRu#_4t;Xn@t~_$$q7Yj1O7HaojMyK&7O z?dRdYZ|2UIuE(wDXx21`G zt;3@0V~l;@sc0ISGI_D)S83;q#7nd5OFLJ$hwFQLdxvLd2d6s-;*~0(muS!z<-F|) zt87};I0;Ub-UMtj98UNc@?EhUX!C5MkWBzfAQzV_S7z52^4RwS61*jy zN^SE6qHKD-u5b*FX~vTX(Ce8@DOxdGg4;%>VEI2yv{k1kFv{a$a5oQL8F_%|89iZM`R6!MX$lD$)iWb=p($FyqE~8_7C7cVcpGo zj{lc_Qbx%cbPtHmRD|I1fZC|HfY8J&Lg06D#-L@0qB4#ubc{A2ztKM?2Z!6cmIb|( z77wb#?8E?UxLugrLtuiDZ}?)FOfWX>B<%_L`fVgq>_+~a7JRgr%ZPQj$gH?b7Horn zqs`oe@n$Q>Eb;Pev5cQRjgxIoMEZ+du!TaQSeDS27Bkt(EDcfD-F^5lyiib*@nkMZ zxtO2LD_-CL$3Ib5MrSD}!6fdaL?DYNE?3D#Vg86`O$u291Vw?^2Q&=vNC`##xlB%Y zI?*m7*(4r}QY-?z8>C`3O^YA76}T5tCXZMWkMnC$ux6!v!J`@U9&Au;zP$-e7v9Y3 zB7NKBP#4#>*S9v-*>-R4obK$buc|-jXAb(kv)flUr^iR9Hy7vUhi6B}=U0~x*EeTZ zw^!G<*Y7XCzPebKJhy~w1e!IPY|MSxiI96oXzkY3(ef=*VztNuYf%~-#mLMv} z{rnvZUiSTMqSAvktte&eCX3w98g^*7xmP09PsO8h1Uuw7-{&zk3ck@!_RvBW)eN-J zWwDyU5&*1XNaI3x;1=`{m7xgJ`O7$1#wg(l#{A%;UCBcHtVreen|F7#D?Yq=FaLh` z@$ILZTgB%eKbffUwqw4bS$w*;dqfRTwg>HCqPum}`|;=5!_HjmnPPkbk!6?~!?T^pWRv+KKS*=RoP)lH3c54LqNWDoT5RQmF6-955@cXxF~ zU&hY<<_>#|#p*UDiY#twWXW`tc2m4JXlpJf2XV~A#tA5JV{H7!*wu})JsIU(+ut>S zEsFjIZX}dY0hMmXAJEj+OAPYI$G7*N-o5)kPr_&E+Xvv1_gHH$UY%cGzot;>cz^fc zaP4SoTR3k{2RAZ{3!5t|)rI9Xk|p%qZ&Qu5cd!_3ujm##teGlhZ_+BY=8GH43k!?O zNlI@^*Lek87Ev^mJlxm1jkY%Uc}Bqa1Gnh|1&LWZqv zB3<&Nko;m^;27at1l#g_cmct%l1a^@3l;%}Q|8OpGR?1rQlxTA`6#GEH%?O8X8T(P zyRkpC%iD2rV%})_gzr+;`kkP3YfG!tCgTdl@E|}TN-UY3P3?Ff8ozvHm+`$3?}ogI z=P}=SW*T8ThP;V^Q)Fr6l=1zb&76uAW(T67U9Hz)RbTMkfS~)ThB(W1Y)mUVn>q!o zdt{I+yStZaK4m+!W3Ca=ThCgf8^>~IFLx}09=*KD0&hfO;lQbGk~^4y1c18WRiW%2 zhGj4^K>&!vyApTq$D!KS1wjLc-O#V9)8XFE)&ZdSoB;+0 z+L&6}S)25C>92lpj@3_%_K#{}X@4*i@!^~S0p^(bKMMJX+r!yE9dwHl=3+Tp-aEZ` z`{5%_i$-F$gM-SR(XoDvo9*5GZAwK=eZ#x^J24Q-8(CDgD;i`{!wsb#M;C0-j?Rt_ zmnzE#i~DysCl?sJ&WT^Sw28!l78WC^YPnLeSK_Xc z-_E3;iF&*w(@N2Wxys4aYALZ(nw>iL&G)&vfej}D* zH`=&U@6 zo)Xj+p47lGpiHuO2li;3urdu$`K&froC5d__|nVvFcZf|#XdV04JXR+47=&s)%hId zHhwV;XjOp9Ly3?t#&QUu(VcLFJ#LdJo@i>FoYGpvG+<&Dm{w6%Vc=m3NOH1YwpUqs z(>?$Iz$i?NxXfmz0B3M)#200ofi(rg(uN%rpA@YbDE%4>?}ff$!d_tJH`Azf6S{u@ zRHYdubb;A(oD&)WPYrL6jCWi$jIlQuRn3g5Ie$Qh()~USsK*s*iA?7pEv`c>Sw;ko zWsnhobp^2`LDQJP_D)!HVoF1#liF9!uVKK<%4nQj3!?}H!8+OyH6VS*eBa#OQR**QGU$`JL@k|U^1BXgBmIxwYq@d{f zg6>QLXk|ngCJ^>AcW1h1`&ie^?b2wboI#Gxg!Yz2v}O{{oXm}GY_v%PWMij4bF~l58q#2-kqL4o?X+i{e5fw+Z$2haSh6-n^w%py{2EWp;P!-rV1|OG4yEDuX~VDsSyl z%9|V8U>FRx*7wZpA1&|AMPJQ5Q_y?eMI}>zJR|*f{H#gYtRHD`cWu_cOm@#kw$tXx z5X&I9#c$Vv8fxuqz)8nrr}5Q`^Mj(cZ)yL44Z~7(esQi!nP?`lz*dSiQ^*sb+SJE* z$yCk2L$V3q;<%5v019L*0_laKQ>wAG5#IT$dL-n!=1z{^4_BwB z*B5WDuP*PdU*19vIVD54zkRfG0E0}lv|&n^f6a5fMq5W`IX+KKR~0}dkM@=7(gND^ z>y6C?e@jYTlF!78mFk>SU8o}Z&STiAL`u10ny^N(uwE4x$$FAnu3s3v(&G9;tx(R) zCG%K=DJJp4s-(gr7I(8(i-ZVPhC~N>Oswf#S~IUWP4y}s%3|b61sLA~UVDsoJs0yZ zg$=AR6Y}YKWtlBJD(~Q5BSqGy~Ts5lODII zZy@Gl_j{0xLr#m{F=I2k4A#*OX#f-aAgTo}1#FEiABYi2a)trU{b&smL1gTkj9ApB zF$~BQ3XbDHezdnV|HR2jt49l4r0;l*{~QK{I>Jf;+zHd|_l~Ys5LpUrnH_z-9oG?! z!hJ(|*C^H}B4-_|6N)bU4U`!1#3pyy*G2vlUKIv)P*y$YcgzCpFQ_^ISPAEKu#0oj zumq}zW$hSuL5c~0nh@*Y>5Iv01cN%{@N?As+dUWyT@yi$KXKM?vE)4q0@hNrR5R9VH-T~G>vL8RbkdY-o%cR=h#lY11 zo;$+%?VeOwU9Z*PCss3a>@=#?^5T548Zj6amI{AcOP15z--yD8@@Y>BI&Z=f3MN5G zf=$uKozr34%&gNM_E=0*K!{AiZ4aK^J}JpR&0u z2D7q9F`{ENz;YCh*0>57=(u)xbV`8sC-rs*4*`RINoSx6pn`H}t4FF_zF4qv(ZsBUq9axCqnZ`0;qg%|MJX7-&hh z(0uKQ1=tH(3=;jIcxT4p`b>=*C;0L;lVj6EI!y5@lj+Gzf)QvB_ym-QsRMLp@^BNO zq3)JHGVaKFeLHs}!uKOe_1Gw$8_wl|u%LzPG&ne-9-Wu~m&W5*N$z8CP(X>1H`s_l zk{U$H8|fXAm|{88{ObK6o;1);5D6^*FOiz0XoRXMk&uDWuhGBC4^##0#b(( zIDl1xeo^?vO@9pt<0Xo@W^xKt1kqO97Z9t!XsJ|4fkSFFAhU6#6(*wDaXKa^7(WnO z3~WhFAd{FF4D_k7%c1WHw@CjiUjM!`N8dWI^~Ef)aio&{+OJ7CT)y7Ee%_V`v>& zT9_*q=gUa#^JOR?@f?eabgDq4pLIq#U#_e&P-go!mFk@VsBw(!8w8QT(yhG49k;!8 zvbVpvdq_?1_Sxn&ga7W{?cve$%geJ%CWY(M>*vpJ=s3Q-Xrj~VTRCTdj25}B$Owc)e?ilfHGs{n`)FwS9VZf~dYl5wc7o>8KpkW8yQ*B*< zh{W*~NkihnFK6@K)cERI9eT|3-~V{=;@R&nnw~#>a=-z9hqKi-_|D%BwztK4XA?YS zg-{3mhLp18ip6*-#lTp|RpoA5f)h6g)O0pQ#eE@FjFaD(kDFe)dlS;6CqmgK{j-dk zFmU6yut6 z)xq1!&bEYoM-NCXvtp%ESY|ouEf!{o@B&W5cHg#13Kw z4N}wlUzIcH9pE2Y`B9Kas;{qadfUPuXZqvO*Q)4fJq-`bjJs{HG<%T$2L~FGDpm@0 zEf^%|6Ge95KOLN&1qz#C1TEwj`l_{qny~gR-qzl#XziwqiFd#`F#tZh2OuU{Qdv8) zOm`QpcU%_`y3r|^Tok>X%rJapnqGMI5Zl1K(aC$mt>RsT%E92%+0)Ai4#ktbMi*Q~ zRF>uz;;8M0^^H(n8tWVRR=;@p^5xOd>gMMDKdlaAB$br<&2b$tDjiPKEh|eLEjeh=V;~xe83{qx}mL;+r z|I{eHx?c2-F8=+qN&8FhaEr=vHIhdkPS{`7ydf3_(b66jx(iadwpOX_Y_1;6k2oze zF?ZU_A(paAY8~T?I2|+j>e76G*B>YIan%ejI?s&GI5I?aR-1AVloApH$wxddupCWP zV(Lu+mm?B!;^7ZjeO87WaLsOffG!IzIY`!%9sFJj5RX1y0*S?dbF~?N(OLmZTn}sCOa3+@zZT zWNOgiFuG>37f{Zv)&TW0n_(T;?BEYD0tC@|{Ha1L9jTPk)z_=pmGvcQA?CB&!0E7x z@O#a6ny;usi{^69d`2UUVLIR*!+k^KAuu-T^a#YnSaGux?HW~lJ1XseR*XzxDWQav zyav>&Y2&QPWT1b9+!9iO75gJ^M#r1R%;>{0GBIN}qK^u)_pD7CAGhm_#4I$_m5u;h zMl#ici5*sGOT+9fhShvpOq&*552ElKrDBM)>;x61tSU65HL#8h1GEQZG=jf|)-<(N z4>4TNf{w@8Gy64=ay3s zpjHen4jX9zj>ClTJdPQl6c8)0<+4z6c<9OIVQFE*j`mBxm=mUe%LnGvZk{2%F{K@c z8``OyFyp)|f(axM4*36^KCo_5zmdtX9m(XVKF=+{Wf%N0T66&=C*m2FdPT5?>k{;9xevrX-&$q=S>H^x-D$_4Jf(t?zBs zXwfdsfySR-T6(>=zRe8?1!QvxNcZOU-mbrE-8l2nm)STyI6otQioF=-{^iN>^~2@G zBs%~o7;EN_n*?&kKaE&{%C9d@JaggqqVu^+t<(J{>h@s zTNnC%GNf=@<;LDlzX22-V#hFI*#h_Vb#VqG*F1#Zr>~C@1{6CEU2HTOU?NzEiLTp> zMuF|6dxc^*+B=fbOqydgt*u^{pHPPn>QOPxiawVHI9-*>`81XB?~m`#zJK`i=~Ii; za?kzn%lVs|PqO!K+s6i)e=3x)P9`SJcE?1QY65IspK5YIJ}`6GCO^G>xH@d^|Ncd( zHfm(qwm@ZZ`CYI2&2V`r*)wADC+E{^msk6t{2XXpXV3>Im+Mz0cH)o`Wk03Q((UyZ z{F#6qx z&dhmupjW}sSI7CLPwMVzmh-4i#ckkA!3$@j?jm7n~we_u4c%>VwWLjPF5Z! zL%bk0Em4Z+74$J06fMohAYlO1lU&5lRUL~Y{F!)(Ha!Fnd_s8|JaX_>e6&jXe2GXQ zp747?VI|<2BG)D0T4YPG>5Fra-pG*BIL~l7}hb|eI&Gt_DcQH+4J!Jln)7$akq3LU5(?{S7 z_&KpQG}e3IOd_ zz(W+~^tE1mRkzV6HKEsmDjw_a7;&aOuGukw*Af4u+T*nvg1Mw89nDmh;;E(ix%JiE zH+SzY?i(?&wtSLxtA?~nQY$^3bVUuw6rJ_Ar+YU?hj-h1^=(99q=$xvhWfqTlSAqD z+tK~`;nDHs$!c|Le`V$5VC&)182bM1&B5)_(b+lW!FxwLtJ}4OmG#;RdG3WuB}+Ic zm`NE^Ay1e*2J?4zwR)JS)sFV(_74}<^OeJmv-Q2>)3c>zm_EyKd$<$|7joWUY9XGl za7|P;ms924BD7&?aUHMv-uC)IS&3H|&bJ>$o(kMRCYf9;6rs-7))pgf+EGnT;~3?U zjsV{N$#Hs7ddJ7iE+~giut>C-T4tw3OMulC4|o%(3^r$60P1lY1CHmm&cQRAbXcbi zIOptUP+-ghPPgRp`Orkn`VO_nW7LfG_o~$jjo#tMbh?m;xy+FYXOYb_wyJBpo4b2! zo7|^&b`FVJmEsXEUm5({nOUpX;{$qN^;zu91Hw5tHLTY1G-eSPBw0dEP&oI%u6q)B z$hmX*G`IRxZFNzai+FH!0?ePa0|R&XlLVwF#!1>UDRmP7DGkApU-JMZg1_d03FZMP zlJKlF>h`y5v5oibLpq`y802PPUE@*|F7qiM;LtpO6pOwc1l=$H*!%a2Vz#s+1BYJlbZeA)9%ZKqiqR^t_#;_aYcv2Cvkw8-BLcuKH zus~q2Wx+1oY9w-taRM3?7X%`x5`l={>5Jo_aWeV&3c$%&F9KVkcq<7vIax>$ipwTb z;S`pLG;xebBAy6msIO0D^Vt}RWef^;G6mr@7zS1W_a)}{qsDcM9@=Gdy;!WxuTU#r<=3*&}IPwMqC zPR)&z^J75WH`hnId*|0Dh#sd$U+xcXZ?Dd;ug)&--d`LXom{?p_)z!u=H2bpyQcb^ zJL&FGbeF%ydvF76L23xKd?Kd7-nj|+xEby+*dNYzgf~QkH1>H`$9R0vXFF&f8f2G6 zejcl^c1m0t$ae;f7FHQfKA~A*Z}odf3H-`%&_YMZiV6oO-;`9ADX5suN=alSm*af% zWb>Yk$!$Yj{aJn8t81Q!XZ07yO@oS;x6PfK=pr;><3;o-+pnmKowDdK!gE&$YjNK^d#m z@RGJxX?Ob=!`AxI!sf=>-s(auKTm~yA_p6f=5En7OI(XFhmiP;4g2Z1R;9wT-Kzjz zL3nSpA6OzZXx8a%z?lbzdoka=Y?HlcY;MCi$jO{^OkHc!E4n-0UEjTdHj3%t@Z{p~ zs@IA1^lAts@90NjC+~?l8C)d`jFH9pKEY7LQ2! z(9t_(G!ar9-@iUKf0vp+ ze}&K5t`NB+=7Ar~1MMV}TL^Rhng_n{AzIqHvDU)BxQz^TyN>$k;83C1vXEnUH9EXI z@Yh*N#mQ-^21Ez1Qq{#unR!4wwF$U02~Y-#SD~l33w9ONZ8*J#nF9K{SS)vTjS%mI zaw)`K-i%?rPu-=4+%v!;e1K+KxK>KmyTmt`2V~t+7fvElsvw zpfQFEd=s?GsFd>C+g{lKvao1N(5idoN?X$FF==N2BnFrU{Eq2RF6HGGR#{4BRu(H; z8;7^=K3qLYvX+jvpYmSy7}F{zw%%d&1o^~)md|$=A8)Vz=g+5aT8X)KLil3eadL9= zM%uotQ4uF3w|t_!kWMZXGi!@lYmfSXjcZPMkhUXN|XoMYH?%?X_&mo4TAH~J0gGHd3QV*j=$yEb7 zA?)kbBV)Ktpdev9&}t@86&!X0OL4m%B*28hY|w*2An6Ftk%WU103_~#X|#Nx36gk# z>Lx}9UdVNZ(SZT*>iw;QIAtAfZ^U7r8k^=m7LAqjfegkWnn`H|!_bwEhFIWX@FOfU zHpVQe5&1>+h)zAK93KH`+CPL40Lq6paU)ZPo-c>Bl#WLvhE3BHJM=&zW+zuA1I>p!G3fIEs*At3BdKFdPP75C>G6N2pwd1NPfby64`t0&`@W) z^sK3KXxbv?H78Z|WG0Yt{eC~CIHB;YkZ(Pb#qSQcs(Ys?l5~UUg z2@be0{Er1*pJ;rB$dM7cFd=m!Apw670w&x7VP)VD8G`H^r5=O?F+pMi*Xm(cxsWbluf$D8raqM*A)m~| zz@An_EmNsfEtS(ta2Lt$>FZ;viCcSYdHePDR&8sSecsOL@itKGlf4~q?7I(_8)s)^ zH;#cn(BQkZd+_}F?)k;(_4x@Ho6~dY{EF%h)R3$5lNYaGI_c`}+Ss=?HN0woVkJo& zA_Sw6n=%q}EA@$NWxH6}f)=EoS%i4{denmh-CV}10TuHhKVz+CY)AtHRX;gv!JY!Y z%>+qAk3nJ<7Ru!0wA11v>S84m6PDnK0UzI(U#%SM?CtG8{o~0x*^2$S`O5l}joOp; zrr-9SHS$Tg+?2x|&zd@9a3Y)Jb-%royZ-jKNID<&{O70D%Cq|BhQDb3F=95`3QwEz zjkC{&f2->n(&)8Tpy8SslUA)Ff(oh_%V+)H|Lq@tJbU)!AFuzmDlIIm+k?scQoK~k zR`YQO9%-xH9Wa5-M;@3)Z{AreZ5{9KZ;`Co-rQea+gxFq1KzQ)DAC5n z@jb`6J6~K#Mt%qN=pYG{&XQpkIlNBPExMG-NDH{W% zMjAO9OJp-)qC(=IR5X-B8UdHe)18wGDN0@kqAb@gEW=#bHXAlEx5*`0aB{I;rB%;3 z(WICXm0a9}jXEoP+iCNZZPo+Diry$DBd38sY}8v=Q5vUo7Bt*hqHKh7bxcb*MYw}G z-K=6AE~AI2$F+XZBkoCe)sGEoHv&5CQFm5_$i!mo&2h+=bWLR_bv^4^v{nGCxH zTehBFxv0G9r&$b71A+}T_rSPB`FXpH3Ql2sY;WYX)!8Paij%Z4AC{?G)P;05o}Je{ zX=7oa~rq_vx(`ox|(^DN3b66vb>~_we<>AJ3oH*IhNr zx_gI2PiiM=lKyTArs}VbcX3YN?e4v5By9Zhky)cT)VM`OeH zUr7!xT8F)fu8k&1-h|bJlY*R7MJo}GmZlErUj(R%f7+yf#}7zGlw*`~jyB>PMd^X z7I&`Z(%ITt%o8FW6$HJIU-sq}w*2eXAU zJRJ3od}Xn=07=MO+1kQLwY~plt5(4)T|3@gs$rL-{%L8U6wPH*!6aE-YOC1fvBUFw z4OUyg2&Z*S*#{LASccQ>WRv3dU<2fx!g04qYg_CgR_RfnM9&qdNhP**ZWugc$w0!@ z3d9m~LoL`Bbb>Pprb%QeCPuaF4aSMBj`O#k&|obZ#po_OPnExP^lR~Hf(Wo;nKasH zvt#khDgb_v%|(HS1yVIQ2ea4bu z?q-H23QI9ijA|GbL@HIQ91>cH2Dc}SPPV$EYBiw^TI5Al0reZBs3nxjSWo*#Dz}xq3zt{B7{SR-Rh*o#BR3` z(+C9;*n1&Y5NsnvkD0^riKit(OLJ)&aDT-xyoDJxIUCIHB*Ex$3=`xJN5Mvf zJswZo6(CP)O_K5}(K}0}d^%Ui=ac2RrFq&7fLElmC7vHp05Z{hl8;!35$M4ckP@FM z6AuTIiC{G94Kcq&levU9;z^|>KrUCv?&hMWQB_>(<3;Eo6mx z%7!Q$j_2bUkRSn%E0m77z3j>>&=;x;x#Ge~RoY~au{`~_@%HNd{Vm$dPwD5k?~-(T zb@i>~p}D79_4A8-a)kQaF+9BbQKhcGtsRGyZX~)Z-TeIA+S$V5_~vVWtJa~N?B95! z3h0#HtFFA)Q$1NbJ!x&exmYX(W7c@UH9caTnjPw#97ERrC@ESy<)40hlsXDz`)d?@S9aEF*;3l$PVh5k8Q{ZS&TBYE{sFgdz-%#1X>eUpLrnSIgnAr%5(ig~ z9KAdbyEql_E#u+S)}W@uGkMO|6z&-dS@pAYXpenWt|etUOyb+)&Aa4hYe z?j0Rrw4pI>PhSY_uI+3etS?fEF!%cP*7DNc((2~c()w~`c@+u}dt+yNK^JMW7K?a% z^7Hdl095C=uP)BzS61P)&aE;D)3BDUQCkO&jm21I9;$1qn9ZltM9m7MG62tq!T|=I zWFRaBydke65MbbO&5nSkg4Rb~KBgYqJ+ zk>OPm<8EDuA@;?~@nk4H4;M>N6Xr8ps4QfxaSBq}oWnhxij|W&&UArD#AQ$MNhQnV zw=q$6LiK1H|K(?j5YWreuQoOwUp~s-zkmDfv-E?f zX}heu?MLfpo|imnF?sOwrIAcVAq~We?v{1i;E?Y^1<+D7SMt~xWtWTbd}2)fQTlF! zvx7Bxh+`J}vo0uA48C9}C~X{3FlK%hAKtezjNy(`^iAl-h7`Rc06*li)`r_#>H6;Yc<1V&srmiKhnqK#b&n^f(!1M_ z4=3&_WEMy==h|D(Q0LJ)x$!ioK7xP!^QcO zC+wPWgR+bzGu6`KQYf}lDO5}Ag(7yc>dO8>W&fIieSJ3{j^$wm=JSb#*TLfAUf5k+ zuH+Whu`}0pr5d$i0?o6%G9|N227^)UfWbI!5yhpetR0t%;Y4nJE}e8+rtKOd=?r(w zWYLcp)u7!608-5G!~hy=q_9n7{Y(yTx=2%WB9zQ}g4Uqf9wCL~jNm@-dO#Wa-5CG9 zK~ma0Sh&51B)8vXb=u87V`rZ;JZl_4Sts#0<1PU8EJip9RJOObHt0gQ*jia!d;Pk0 zxLsY`$BwnN!YW88ckU=6y#s)=FC2(_ydJ&P8kp{Y@;x*_X)_OFhm(?Khtuf`M#zx| zB7n6*q_;_0`NCcaPUjS$ZE&`h84pBmCq6)@BM^y}l#+lz{u&36F(z@7iE%(raR(>F znVAWIXIzomp2jV2{9e|hLG#h;$be57rmZ|+XGqm!6175hoPqH~@I+^|867UOiCS@u zaZ)*{8rA5Bq^@Z_K38E=)2l^%X_z}aJHWmPO)D;ECGifiq|rl(7^UN25Gz0Vwjqqs zyx#<`2r?m{GQ>Qf9)_cVNds%MMvMb9?)N2rp+4^fyZ~;zva0GC(cTp!fr@b(59A%%Em*33L72 z!V+k>wMwPBIA6gY5W?$Ms;yS5%d6F$z178q)xFKt?d6?=)s5BcM4i8X^0RpX^4#Is z?b+4s?d8$V@!{F!`Til*q^HM??{06ePw(EIvBe-@`1bMk`r-P%zUBSnJLv-lM5*rW z?Zw5-9p}N8<{ZskJ^g6TGT_{@2044K78y0%;z*BqjS4hwTR?qS`ICr({4h2=+BdGD zwL&$j!}SOpMFU<% zhiBvF9q6pbw-2vgV9dIGb^21)(sg@PKLiS(t6$3)+S@VIR@cZKR;jShKV7{zepdGf zC#JRImM7g~U0u!jjrQq2nSNbDI*nD6m8GXo)|R6IlWEjum{4|TRhrHQ>NOf)9zSb- z)l`3Sc_N*i94n^+hkL8b>(v5omQ=Nv2}Hfq)2>LAv^K;1-X}-ipFZuQoT{dRe^$0_4rBy8Aa*H%+J=U;^%6y*sh>zUDnP!=D{JbIe+z!acCAcVV!l>`Nb4xA+bSxV}7AvmZGD6 znTcIUiQqWMwNYEIxD6wXD z)K7fgC()o{w|F4a(~&H5Q;rZ8VAZgf_Fi^)PT^k$uR{vN=}r@L@_1(b7?u-m*u{y_X(LD%P+g zN@Y7pCovANcO|;n%T9J+SkcZn(AP->tC-FUA4ZzKjF( z5>V5{fQTbvWRMGky)D=l-b8kTa7f<}IHVpvBnx74tO`EO(16sqQg%AY1tp60y3v-5?G!#fnZ0KS! zQg4ZX;;BZ7`E8($&ImOu>L|H4fbBU)Oo3;t6w&6?}OcDYLPp~nA zs;)_E8dbNCOia;qp#cv@3$>XVY&yTh0x>fmr%asySRv{0666c>ov;Fwm>M6N9HWtY z4BeiZm7-|O}a+oK(IFAFEnpDe1C8b71)&n!8rjJOPTG_#5+dI_J2n>sX6|mY!Z;!|} z4KnUBY^jw`Wys4Qi3W(WL&O>e&IWoFXAi$ks}AjUl$3yI69qN=5w2W;oyYCdrQp0c zibBIrgZSwPL{=(9Bn9KKz-9GyBX$f9s=J9=W1pltM9FOcb#VY)<@7(72!;rk(S#bN z0N5k^nSd`ztJ1;({hC5{XcU@BG9D8Xl-iGL!FKUYrn?=o<|KPlz22zNc6GgKXlNTY zVg~hyTrbM5WJh}liC!VM2gw34f`cpbLlEec(*kpk#u@8`wXX*QE96WsMijT#F@wbw zC>6eV=w%i@m}fTTNv7fqe*u_l9P=YyMhp_j!s16Bl%R&+9SC_5#b7ymqIB&LkBf)A zK?yP`a*JsA@OeBWkTKlTaYRo!H{`gN8*MNhF1QTs9hpip9?#~%C}-!39Q^RGCAo_- zG?Y=ZOXWO|hC+63b+KHVTi%$Pp9>HDVeTG(oXHE$F$c{hllihom^g@9ltrfeA#$&cYS;F9EF4C@}skh7eqY%mVCv&SJ8}R`(@p$ z#^=lj&2X5cR@RD=*vASDncSR$K%Anz1*{G-ZO5>xpOS)pGCf>QeFN;T)idOBbV!o3 z5N6r+SR^|?AERT2O_Xld4{x+)M#%KPD zd|dWhd*ENER7z{m;*b9IFS(p;Ml;$qCQ*yf(B0A7@B~27)4wnN?b&Zn|ETc@URmoJ zoL;Ju@J@z2L58$2V8z){wZZ0~4$eRe-KctW%z)oh_;*x8uxFY%yK(K4Xp$?MTObcm zq~6w4*I379y{Qf^X5Fhl>Ylv#{g0QsfBbPkMfo$t4(aLP#^G@m>GqHl`E7~#wm{WbWdsEg#=E-`!q6J~Vv5($_*L z^h4v@hWdIg*rw(>Sz`-=T|@mlrrPHA`XzI(LMPSQxT_9wnTh}>vMwo1QfhlA_mH4KW?L*0aA?wR$J>{HVvvKM+S)UsTG4DVn|$!R6D-&8?wddV-KU zM2ce>1>*fLZQ)O~Bgoq{1Tuz@I@g0k+Q%>&2y}M@icLYFLZoQ>vz=TNbWHONd5ya9p3ghY=WY50u4?C3$U%Z- zC4Sk|IKaCS18U^UK>Qf~^#%HV0kqIhM)Mhuo*tg9tb*uV zFTP&f&T2OvK0V%lKRf;SfYp=KRiZezT3M?^L-Bl>dNPVP7+wLo8fF3!AT~+TQpxn% z4Zh!KY+-9Fy;`fiJ~&uA-p=9HAV{4M%WP+0!C8p=q6IuizWDaxekEOeEtS_cb~a** z3+tOH*$75{_28H|yX#}Q!s6?>T0ZIzd%UH^RM4z8&sb5>oxDP(m;t+_2D)C6T8VtZ z)$v89O+-%(R{v}y6(pM_Lf%g3{B}D{)s#I<@glTB+jn~z#Ob|cpaNIpll<61Z9MMW z4o&}TDuO-GLVbmO+LGPgDb>oAV!2#eT3-hM0?=Y(X^R5EMHV63n@87so3+i&LN@5< zXdAFO*=4}>X5r$pO#4iR=?Qp~8ub+Y=oXqS$$NNMq_bL2C*do`h4c~%c#YB&FM6{X z4V2r0m))wxXV$Y{uoM*XQ7wC3YQ<+~9A@wnYNlScJEMbBq%gD?gm6+|;+UksRNK{Z z_vWFcbCBlN8M;m2MF2zrMmh=qiM4>)ijB(5BOlVX1v~zv2HABQ9_W-_QjY<;qKO0l zC~IxlReasL;eqbAt^K`VSy*cbyeDP~0SBd=PpBdcJ)kR?EqGt%3ozUqAx4KMXmQqy zk!~FIg?xtCOkgktnIYzoah*{;IZ1exp+^nOlr;`B;fTbeP-~bN9K}k*o^PnuF=jK{ zT`oR=H9#XTr!Yd$UTB!J4yVP5JCH>ZB}i88%`m-*)X&-`9rkIv4e*f9D4oWE31^n*UzVt7nMYc-vQS=-ss$b?2}nPg!dfL;l*_+Z15nlz zR0PAq3<2UMm=O=cd=D_R#4=1V34a!VVlJPFB^kyOz_Rj$59vC^wU{Ut3y{3o8s~|D zr$ZRrlc?+T*AtHng+f{27U43JQ7GXGP-&i)#48AD93O~U?C3;aVtZqEwUk}oq$-p8 zh(e9-s+ID}66f8OjkVeuLC@=5hM1F+qvM^U^V{9c{q2L3ll}boj!Rb_Fc;zOUtV7y z99+I3{c-p9`-hvi_qPvUeti1;A&|K-a^N&4{VQjyw-1|MJKffpx-@9(w z2Rl1^9eu0TPrEaZhWU4;#Kx*O5U<>QzgjH&gGE+f*`UiRhUf9lv9A8UVY0a$-QU|j zUEWKNpWYwGXY?yOv|Oyb2645#4SKIqj8{sKE>j@~nOnZ}V1mULIZoZEc34X%l+ge1 zJ^%6@QBA1?SkMWvTS4JetBj=~|E6K<>&N$>zdpQsM>+f#srlo_FOOe8e|`7y?%l)9 z)tj^9qtm@z>FjuK=V0rQTg%$@kJ9FACez)O)un8qT0@vd9@$%~EtHp+E31o~JGWMr z7Awo1!KDe$?NB&R3a`S9#BMBETFHSzt1PZS=PqX!76s(JoUc?-{_>bWp|7BVpaQ~< zCt!q&lT8SvcoB&@4=zqluRd${q?NX$VyQTfG)K$>9zl=>B3?|qjuM$DFqkZas%R{d zCaz6$FM4h^M0;bJrt)%zHDHi&ESrHOm(G;tAiw3e=Fvim5V#hLNhq^4rqSCHjOP*@ z58UuItp2|Q>{FcKy1`e8|LMf}fM-T(?*S%F@Te0?nEZ=O`pOgYvjXqu=kEkUWR35o z)~~1{dnmuPj zvvkq$D7`xKr6(Imoov-hTOb^X>fP*bvR3MvDTZmace=r#fIL*^O+A@Uwa9nNR^U(zX9NOom zyCK3TfF&y$rm=(AxZ5D<@I=kb=t(QE&f?1w2LtNp?D@_%F%CeYWE`-Iae&9~)U*|Z2&Dvq=#`}coOHCrlbC3@2tM9pPxK=2^u>l=*BP*ynp~j?-dv*1_2(Q7+Y~b z=r!zi@Ij2hhLDET#!1XVC>5f783*XFT0O4nQ=Byl=o`jn49zs4j$^!ps*TKtshMA6 z#U-b~`;z}-=Phg!L!{xfY;C|yOdHWFY&HY4h{X&UnSui?$_?Win{t+pqcf8Lw@`RS z#w4m`wbK&=qe?LjOsG;awGlc6NOc2FGNTC9JK+DapfGTBvJxsa0~5n_Z|AS&09)#s zHfgbplPqvpJuJNRU_a=u)w>}?gu*Nz2yFnMK!FH_c?#jjq>S88$O70E8RM+PGe1Xx z0gtR`ITK1WHhs3z#EW&o9ZH8_QnJ_$P&4GPc}RP>BXPGg05&n2jzL`EQIC5*#bFuY zIR4B1Kx=shI97xvumaUbzKkyr3x{IS2!3WPrhzm?=7AzvxIoMy+@T4HFDgO33)YEv zAe|VM+^b6)D}`ijnFeYk@Z@~CSX#&~l!}=Y6>#%-CDu=AyIk2NgtP+Hn(gH3CjTd? zS~QJjdS-GQs*g@jx3ST^H!Bfqbpwu1v4bRKSseZ$=U;Iwz) zQ`hw2>11^Ul?B7Cjv9Jw)yByQlfh`V39D=n2^Sb1&6Oc0UX#m)6|tHL6HO?VA&yq& z@=FKq_0#L?{nK;4&Z~=yS7(R&Cua}01o}H0;B0cvM7n5sg=4L^tEs80wY__IdR|&O z-LHRj*tqtp{bgOlgp?RP$PVp~MD~5wbV4_64Q(E;h5d%v;H(95#-tWBMt5&RPZL}9 z7q4D5HDA`9tnEsNr$@^U)kt9>mq}zP3g{sM98h0(cZIlgc78@r{N1ZpmzOt}x7T;) zS8#=>T-&BSab-o?*`zJKis7?1|N1(&w#9MMQbja zZ4@s<6ef#1=#%0hA@ey5;Nj$LGpRIs9-iVjE1)nU2A!rs53Xc(hCvsTk)W8nsPQ$y zoAbk_H3tZ=!>{+bh(+Nu^AmRu1S1)?F$o-Mp*djUL82uDuY4hr&lWF&iw#t;mBKf- zcSdLZi*0(SXAr9+Ay7pJq!2vCu+-bS5tG{6e{X4T{@evV`^yjB+9rJj zX8ElZkX7qX#sQ)tO2z>Ul(L`yV;tb}ZF~G!wf77K4;AXRQPgGXgn;Yt^HXBz0rWG} zR@Jj@?PGb{1(FE34?P`X8h~O6==INO06#Aqail+fdr;jsr~qR`3jxyrvj8uJU%lqI z>`8UtW@k689%3ZqW;CMKj4&~X=(J#54M;;{3?85_`g?l09$96R0p+Bn9K`hihuMF!N6xK*nTLF$m<`Z16$KcbuyUhyvmP^9LJ{kX zle=id@5`@PT|9D=rGlHRUA8=zspjF@vS{`O%#@1HTH@0|rxkFNKWMaMiaAh%8Og`M znVf+Rn4SHj2Y`Qfd$(vd>o>c+v0N~PAKW=>j%Ucb^y3Avv5_!SOOD;3ySbsWtDnOr zs77ittWJ$?2r+irs>LG*yvi2#`KMe~f{)WifjA&Vq5;T^p@}CSS#Isv#PpO-FHH-C zl8#5?c$YNnwCY*3!+x64PI|Ig7wc;5jUob;Bwdxt0*XOJ2i{9~DpjHd$L}}jhE$VW zM}10qsVJm^7dJUNWPpb&Sg3tnO7bbAQ>Y_|E>IdMrNmc_laa*S2-1tDUz4+Hs zX5k+%W!=aXJhFwZ$Ny5a$*CPM8`nGM82)bf5k|>ua$6O%D@LCIsk0k(15hRZ#hyg& z3BsF-0QlTk$n=|ZWY%wo@ulVC6DxekXDEu zx^V^!{^mMTqiW8NP#?y|VY&eu6nPRzno2?{n!bLCS$J?vg=Ew{#L=_M{kwuM65!b2 z$Os@#yp(F)*a)?sdX{}CBf=>pUJ=+c$FzD;2Rf=9)J={6@1zrgAF*ao-r7*#s-y>n z*NWFl_X6&ACpljyDPk+h12!c#pMYJlpMfzI@lX{`5Xo#KJZ$s6{Ov?%<0tR)nw>#D zgo_#@sErP@$&S^Pl!D#vNk;KcdL#HGxVNFKP{bM_9%lRlv zHmsJpbTS&wl}Y_kL%O}hSY5-{JdY=8zEmkw_gx9}X0)o9!kA{KzqO0JzqPxzv9)(_ zbpl#>@8I(G&BgTvTZAJf0uWe7``ahG=Qnqk5}^+adP_;#xedbB7}>jfUf)RNfV{Q- z`KwnA*t2=WwIF@Su&8(Zsx#=Mq@a)MkGHleFidu^Fz8XV573y_i%2{v20#r*`Y{bY z9cZgI%)3rr0#j2C3nQa(%IQJLwGohs5P2ce63SQfC7hB=E9-}cC)=BwzppPZF0UW% zG_R4#;H# z(4c2e$gDKHs(<$6*|Volj`sK=Y;0~Ig-}(#xplC;zkBd{8=CM6Kef3s!-vE}K37Z; zrq84oYn}q8$I?8NNgiJ;nO@ET1ev4gHJD08siKV};hAtwpK1yB&K&hPf^nde@U0Nl z9D%eajOihfK}92R#3)P-#1|tKkDt!P^=Ac$14Dpkh}G>h+gZc0GPGMH25AmPMlIov zj&3ErTpZ2_L9wEH2Am z<`znb96m~fy~MI@5vR*)=3B{W3^xCaUOPjmjg!#q)TmxVCT?gP*55#DcPG#BM*2_X zNDXyTQ+=HTM1!M0Wh^}6-$@N0L5aR^hhFvY0rFaN{oBUokB?0a{O4m+BO`2c&tvmr zLt{hJho(k+l88~wZv`aj>ZWY&8gQ&MW8^`xB|Jyi3_~J=2c4bV(t7^)R|zg%M2t>( zOA}QS?VWHZ_&N8|_1OuI0u4~XwgR9jreT44B*aBTKL)& zl8l==W=zOj3dEz97StiIR#$tQFD~9}9UX|g$E&*iXP1DbBoVLpGxOm`lBl3FJpS2N zE(C`#Dv0OTJ0V6iy+i%z{l&7HX#Ss&qtG~5%Cw7$4uVgTg@TUe4&;v4QU?-+2#QEL zKA!o%%PWGSrEB_+e4t+tD;dAl*7P65|NTX{`cv=#xYgLnKeDC{p}+7osD6nafu?`Q z2h<{>{L`=434+R>a!1SM-uuIohWf+9H;2os`ErdyGR5-gZquhb+REQwpB$a-@2@8| zx7MmzuP^6|Rn|AxYm1S5!98tv(H-iv`rHmu{lWFQg+MAi7Yv^+SCWgR&Gog-S{c86 zfX%dNTx0W3CAkyFz2;27l3vWMtzT{BLK!K)j+cG8mM`V!ftah=;cIxIV5`clly_E2 zSv>tF>cR^Jzi!etmGZ}PP*@Dp>b5QstR$V$t(@XPHS4wkax%;~XN^YM@m!pztUgFl zVJn55rb!ArF~WF7Zz*M^*popn3I)a+kdQ`D?OpD0&~Bd42iR~#41iCj)UyCO^Tk{s zoG4N%y0p2zz5IHMLV&f6wXNOFq&T%UgR->U+EvA|89)+gwB9nqo?C;{rE>GE|qGSh%7;Gtwu|jS5xg*5{G3Y$Veo5 zC)I=9O2Vi@txz$Y^JX}q&?{y!o?^J5>~xfR6%&Q0j0}88kl&L=VZg*vElNH{31!of zHXxiGfS;AHvGm#@l_X>n1L;_5(}ZTStdt9=uLqd~>BsI6$77a6YzDAiu-b3{KXq8` z)U7+PWU%%?zOqqRi^I7!x50ZS(jk16>4m)B;MSAi2@oCPM;3xW9Sa3)bOKx1b-)3NL0XTnw9my; zsX#i;GbkGuvRJ8DAe~KwKcAZyB%x?XR2|S=N={WMVKGWcMEZ%PaUufx8?a9(o{PIB ze>gXnOC=ZJzQmo%f%w`IzWrRWuvkb}Sz|D^EY#Lk*H-2hcQy_-m)6&IF5oU42q5Rq z?bY%2{_*zS*#So#o0X5}_P0*n+#q{r>Rj{QAwi8=8k7ZZ1AO zTpc}pxqNf+cz6AlLdUD+iL;rOmZ33hN4gP*qV_Q?3w^-U*)N0L-9ybH-5q^h;HsHm zarg8?a~K*V@I%rVV=z|&#-o`@gL*_mRk=wAjf9R|(~NPJg%k#7%*}Q(#8DguevU=_ z6i7hD`6lIQjaaI#N-#PWYKI@+9qzq-eMp^3$!V;3xc(Wcq=Uj$)?+$^*I1__RvdKiESC6{ZCwf*vZv zI){|Pz0=*_37?{uaig!7v^HN921631qQv_ICk zk>Nh%kzTPb#^)x?c{thxrkiPrC9-OOikjgr2%96k)VS9}O6Dl~MN%sePxx&=-#8&l-MVEI*EpB`L)IQt;Gec#ljRw#Ogx(7P2mf|46 z^V!4Rr?aiO?$!O*JvLXZ!flX7N9ULRb}zB9qG&U z89C6KljGat!;Q@L{>E}K6f6ajOPkwF<;nTQnB5;SJ1HpzT#Tv~+gPl{i<#wA=4^GP zgoy%N?J~W}r7Q?|*R;Wxm=%Re>3}^SwzKA3S-sdSrf60o-n8&~os3egzn7)Vuxgy= zRK)AZE|+)L=Zhha*Fn2;wGuJtJ=6Jcx(H&;Y@J})NN|8)yh;nVCg|X;tj}Cw_7O3f zF#;ZkBbY7}W3E|(*|U(b+)Vmj7wwQ_KG?UpsktW4?Z^ILvs;}`XDDDdX{JKOj4y0t zGe13Mf;0rV$mM0blTOdCf%zh+vc0mpR$JfRppFN)@Wv92fi={;7-1Yeg<&Cfx^UxW z99}&Scp8AgRYL0apiT)7UjnWSgp2@PPXWG)U@U2pupQWpdcDC)GuH(30QIY5%Kpjm zhaR5G%mcv2e_0kLxQf-22E2|mei4~u=fQ=j{xuJ1!DT>rP_&#B*FUx^kRWK~LT!Np zs%M?TD?m>zgrA7+)w35`Tc2=++b_|O>7Y2cGIN>X*#C-1HF3V4x{ zxodcc^`46M8I~I~*|4x+H6kA1sE2CACx#U2D7i6CPMK!4(+Cny2%ab%A|H>nLIvblL-Vp$^cs^z2Rgu}ry1H{v;tB_k}?}@ z?9k0dbPu3iXdl*Di^EButAoA~{4BJGjdsf^wAPt|ggmfL66A=B^B$y1D3gd5UQ(B| ze?nVIBva*VwmcsVOLzx zL{k09FlmmMI~GEvNQ5#uJkr@rFiF}mo=(BeL{DLx%;X2cg2Q}}JE{{CC}K+{Dj-8y zoDYOe(-8+jS}B1 zQK}?YuC%+kQpl&xx%pINWrfEkPqA1GqOF^& zCcsb4>2Xt_=dze^s7_C7`}(wuwlwyR((u$vXEk|%J`Sk#B;W<)q}M>5D|W!v`j@ZX z-caCmdVc%%>iX5))y+fQ(G6nG(b?7M)!EVh@y6Eb_U5Xzwey-s{PzB$${Sc>wY)<3 zgZpA>ad~NebG^KExV2PD7t8r-UYH=L9;q%buB?*B@5znnHu_zObgocNl~bi;rkq=( zvN4y*=F;;Zyyq|qXTns-BvV<|Nr?o96WV41Vg(nDI_aPjtwR!vldvO1CdXs2O%%jU zFPJ8K77|RiU`Xt-iLrBA64_<_;hsf12)I)zL=FO8Z;Qbe_#O&)Uh<3%wuX=u#| zFQS~&X)$?S9*@(g z3lfAGXfOtB2ogL43@~s2jDayx=bW87u^C?GoXH|9ldNJDE9aaOS&0=`#hi0!c8)vy zdUzyA`|RGmdy{PT8}8>`YhA0kzqytV24hhB24?cP-!+gUH@0fULak8Dy7R?cEM&Ka zEv^`zuV~C3O4umZSTcJ#u{l=2Ia;YvHc`oCbJocUr^0KT%c4+wJZ|92aAlTl3c*Bh ztt|M=T4&S|iLR$S7N6uzF)pAp``p2{E{x-S-6Nblbt<_%=F6urz%3gV$^3_d%QLcN zx!>XqSyxsx3o~5x$fSv}q1kal6SxayW3p-LY)6NBI>$$MB+)R3Jjb;QyMeQZD1?E=hQWpF zb6||U8x6Q(JNBSgOiT^8epj#t_n&tNa0^Dp34F~Hu&v}s8}OuP(o$)rDVrIaBbOvY zWI?8znvn3Caq-eLjp86o`;(*mr+s}LBQBbDga$awCuX~c&#Q+c88h%Wv3Ib@q@&sR zib@kq5qu4-5Q%DNW)LGN6Qk5~L4(G@K#NL@SVJsic6xXUBN4`Bg4SZ`sF=ZWfn7z6c@l{H%T*Ld1dOOE}M2K61yy&{IJ=g3A^Ke^-%x^ZUUPq zOC%hav%|_cIKURC!^jiQN`(Q-U>#*LBxo(rfV>u$i&9n>2OF>1?-rtoJJJ)AqWC5F zu>Np}7hMQd!$Z%9hYxH*=VJ=BxkwyCv;wl__G3LmKlVp_W;=VMkk6BJqD{L8zFyAd za)lgxkyOZsfg+csaT;_XV3cHqjYg(WsO*=)MO5mAW)V?5zg{bp8f6aHQhj}=tnNt9 zjz_x`v8~GP;qmG5{vHjI``8?|aY>z=^Zq&ByE)t2IK5>9e|36t{o>|0Kew;=>OVey z-r3UC{jBdlI9`RiJumyI3qlO4VpCGa<-uVqeUs+DDUC0eRLJqCtcgU4$nhS<_3q_x}QCH z_TBG)|NF1L+We}q&Ae62Fc2=aaGFYQ+<8Y zMD%dEO%l4|Cd98N5&{C?!@~CI^OlxJPoI28_@m{!Z@#@aIoaFa+C4cxJp7h2(erPc zM?_m2Tl<^)+s*oB2}8qre!Wu2tTF^I8wP9{j_coK;k-d z;N~C~NB+_VZ4!>GhaKs%V^M1`YeU_HL;V38S0)#~4pTEN!7Ens?1ak+su`9bRZ$p7 z65Fgd8ZaIax6`;6R~!ofa3uIyCKpYN%;|Q!2lKK4A>6-WvU>=ah?z=5try@09umtM zXt-*vY5^rlv+%?r43C1OhN&O(>&2+YRws#G; zcSv74+B!dXbi94r*45ueY~o?F{_+0pTcOjTkUW2NeVkrw>0R0bGRbpjnm#sY<)i!! zl>y@;^aXx?c(@}nK0Ac(QgqD^(AYw}6q!#N9;Dy{`9oBRkU`}iC~pldxdP+MU~Ct`}@;loVcg^xRJL{socIM zkU?5vwBwJsi0SnZ|3`$P-HSr8_6Oyoy-oa7JGw)RpLBMNwEyFdwl;ow#~bn=ebOIu z2XuB0NlTso^zRjr2dLFBS_s`9691;Fqajhs@t{;_P%s>P93iWG;>Y9see&V6^TU54 zJ}Q5;)8WyB;32-KjzJ_6p?XXr#)SS}^O*XB(!pZ%`oqVoyN{nvcMrE}wLmHuTXDa; z>yYl>eSdj=eev?Lyt;RNx?bIkh3QI6R(4>%6zl7>bLh=J!lfAFV4lRAWME5$NFm{^ z<)H9D8ZPdh7OA^+t@z1*ulS?$oEpQiu-@cA@z^NWgZ0x@zm%yqi>1bPCb?BMzyARD zTxE7e@y3;R_Uc>P+^)27Yu&Kny-RZAyiu$OGG5ox9Q9&!MJz7Pj?K}kEs}`K27E+% z!=h=)$XyHA%CzKy)omc%>J0I(-0U^TUIYUiGTAT(ZMJ2H$0Lyt6H5^gTx9Ll<5n-# zu#-K6g78Pus}_xVY!T6HnJ&WB-QU>St(0yy4=)bSC|Er?#4NY7Rb3UP{v0P`60dlg zY-X$7??%Z8LG|);B6l(A2koL9$V=3W*C$8XAk`*u@TO9NE<~GN54edpuSUa+F*#zt zRCNQ*93N%Mps-wv$jR`-u7ZL#z$^mFBFAhwI5y7wgOP;_Ue?V7a}BDA&Yx+eeEmuq zniFnL5SC1NCOmaZe81Rp*iEA8108*l=MfPQt;9&Bx3D)stiUIsUC==5mhq?#3^ISu zkkOu3OizOhosvy}D`xa&HljgqXcFW$8@hQSAw)!IAqA4DStQ4SQ)bBwRBMG&RE(92 z3ry>*p)kxWF32Ed$!BONn^Vg$bgE`1HIhm>Pq~LuFNY>7Rvxs9Sgi(!-cBsQx?qNk z?&4248K#W|nFFRH(u@`Lhwm)zUcPO1=Za>20UUGhwA|z+IwPb94CoYkB{HjNO1(Js zp?Jguw~#b)JSAXPs~cI0VyXp-Bq$wUOJT-LRniGgfw|1pOdl!*3kYABOoETlsi<=d z+o59kgRDh7E`h%S)(w|9f$KQPD+g>Au~zmR!8q87Tx1<#4xXHR|=)Qt?CA)FO5ch7o-0f zZRL&aql41=?(W&{;qJ-V`N_rA(eCN>_0`GA}`y zborW8$LE{dckf@_zx(;q_italxjMUk{p#dmwMVkgu5NWL_%hAivzwd4dMTv+I8&=O zLqCrU_0puwNWw%tIl}rEhuH)UH2(0}V&FeQZ6xX=TO`)0n*$h6Tzbifhsj{J8tjW) zWp2CCYx8)y=PXdYa691z^g*EWhokWM3CGv@KZ)9(jqRh%P2=kGhaX;l`r(KBuC8C- zzxa4?dHnV#SQ`CZycjxJs411B6LQ!u?uGHm;jY2?{N~|h*ZsS|;B7z`JsPqUv&XM@ zt7mtsmD}cOHEz)dtTBH+>(_^&T6pQ+Semyj&CO{E^UcnW_u&ZWl|Fs{gY-rEaJ#i% z?=dg$?lj7zJF@x8PB9Y?`e-Z*17XF|;X$+UxU5E2m*QZAWtxPPnmJpI_@_bx4UbB8oc!vhs-7WSRmGagh{mr}0%Erzn#t+Ke zsvFgq_9y$&TDLI{$YM2|EV2bFujXoXnrm|T>Uz3TE>{sZib!xkT)?;y;)px|V532M z!o$9m83=w0wqiEGw)y2rmePfMZi6%IYB8Qds0~D67qNs&#^BM5lm`ycwQL#)=;|6R zzYJ2r4BNdxhP_)hQ!eBn9z>GNWI*L2X}T>l#Vq)j+*({TffQMmcvql@`h3Z-$Hvwp z7?J|9r8_mc08WL0Zs2Oe!vyF>(v#&vF9uIqO1pZn2+-iw+xIIY4p!r?&YwGeBIZd# z6vHw7V`F1jJn%7g{M7ODkNoh{L29MHUs>%Wf~1^7DS!;HC|5z-qtH@4PoRQ$hm6I9 zjGjjM^xL5zISvkHqqF=0GV`#*qfcWDR5Edou`y11lS7OdFe-3xPEE1Gn4|2G^~TsR zp(ifXv0;E*!&7J-c%4asj1j*>6hXtE7GMlHADN@*I8W7i%zZ+|VX7J7tS6h7RM6l- zU~&3YvU8!sOxilguyhfuEUtVeX>K#|8sL`WEilgrsn)2>j+oD9awM=-CZmyzFO$%BM`?;bMNnvc1*FE!qW|^G~WDRON6^rad)XW14%`6meb_sK{ zDjAzPeoBNlm1FH6&Ng>1FWdWP5Ji}pc<(R5nPS(Y0Bf~KY(%H0BNBKn#|cV4r3Fef zj94ed;+8z7meZShhIo*+p9>Sp3h_=r8Uo5a##M#&l+6f03NlVJba_q9YWa#ZYDNpl z>S{JfoL1u3HQQpNoFgrOnE7u|!D>bqyt;Ae_B%{>Bz*i7l zcb^u*22HP^SJJQR0 zpI_+)_U*>6j&~s(4%vc4i$Hd>F@ZRZf{&HO8xE#Y-WblgScc>qMourD_;@-{W*DTL zBSnj;9k!1LafSATC}&M}ABiNk&5#W@Bk>SPlqN8RSk7VXhd1L?V zw6T_QD_)G`GG)(aQ6Ej3o@G9YbRT`utkM_}`Zy$#{SR$&<5m1wi73B?4m*o;EU zqnGv;?Xn!3t$A5%1)gqq+LzpJvw=1Y9NFXoU`8_u2NUFFb4e+cig3*EHA;JTw{I?K zygH#;{qE?dwp~BF=djxTtVe2l%3*S9x~FeUwxBig_pYaH!@*R(`e^gS)V`sgwv{AR z&{f*b#;Y|?q?Yi6Y^s?Rm2JiAT%NVq<8j?^-}LOLdUkkdvh!K{;Ba^A^RA~YkIulC zUp_h6S}SFqDph4{4&Xz?V-=f*g#)7t52As(os~sub(R;ED@!Er1k-I!DVX{+Lb2?g z8U*q($Y~XwqrFGipgRf0w6?tE8{TqpcX9Lj=I!0v7uT{ede3m`f-`n2Z-mGueu{~7FJNuCSb~ozKJ*bJRZI>(6Mx{{RsFn)F zMs1TMXHfonaX#Lz53SLl$;i6*^tQG>u(0p}A6vdII*O>-~1JN!Tn4nCxv z*#0`LL_k7TKSM*np9Jd)#geM85FQ73MnN~2ST`l?_+2Vs20*t|G zlPn&^mK?wM(9lpH9!aFNE{F*|w0;g!9@;<9-OKQXU$BRHpr3hwO#=NMa8bK3NdmXT z3(?mzHr|PwrSm5W&42xonc@4(f~CJ_HrI+^Fh9!@V4Cgg>>Pmr(c=uibp%NQ$&Rafg?Bw`#xpZDnI~jpF2bH5ypksKgR$0aq*(qcu0lg_K6bB@*QI(jDpb zM0h?X;`!BJh^xaC2ND;f(=w7PQfMErEW7l&1)a?|X?D164m%Ji(j9Ss%oNUhEs`h9 zY!gk|%rWoG)@|R&z&NuThhbMd6G>&rhVaf(J87LU$R@Ru8WVQ>u+5_4yN6FitzDQN zl~Mgc%i0fm13Wp%pd9Kr04r*u&M1}^zse@;SKm{zG1={Gi zOg2B>_01l0dA0scYd;)Tp_1XR7a&T)7XaC?+B0#;FiuR%COPzx?cl9HHBV@Rat``r z&_9NU>GtRxm~LVF27(?zLm0b;Xei)qKzX6KQ3j#Wal4Qj8WCp6*=Y=v3a}7DKw>r# zs4*a(j0p>i^K%%4s9v9ixrQYNNFo@SkqPR+kpISqWfIpvmis9MyGO*u(LSknghQtS z{cn0&F*YZ%Sn~`_dJXpg;SNruEEXVhF5=gqLq){~NIf$)Gv3+q)$`8j1sp9-r-wBz z&~agQr6mJ_0V0Ht7#jTrc20SAmf4;JN(5QAu;jIRtUfzxF7GJ|2oR^M^8C5k&Q%8r z6(_INC?0_xkIO`-JuwkbO*ZrsE`8{1cCVXiSs@MwpbU9=xH`OCDiLSKM>3AiP=?PH zCr%}=BjoXrJht=IcqonJzvOZTw;7T6uQ5_Y=rXr0b#yvlQk0`OX2YqqcqFl&r(hR9 zUM|BnJc9F;r%*IH{&%_L;qoK)UXJ z*WK}qx@Z=&6btlHWX?6$3zUZX0ooX$U-k@=wI3Y>bT&FOI6Z_}a(GHMK2Ez4!rG*A za$2jBF$XSk%gwK>ET}k@;RUkk%=FHgO|a_-4+c<-?BQs}6pfbl_D**WPmUUozB}Kq z?WXgYjs3@u9zFVf%hN|+b#%7%4?Jz@92lQg54N;E`Q5keI!ZUB|B@}KA7xct)2^=u z78m_#k2M(5>2V<&RHHp}!;0Ajm8@T`vDoH2Tlxn&CkCYUzNcS(2Yd3HZ=U}C>)+xt zX#Tdg7KnPk9v#NEYA1ocVs(Z|Y->~oY(XLl26YY+B5bQEwVYDVNe+Z#QzPi&Ltywt z3YJAT>u6|7Ezh2`wzjmjK70P?$)j)2k53N2Mb_9m**ynowS5G!oWk<$o$WdpB7U${ zF4u~U(mD~|I_(~L7l-)*m0sCmh7fFuj-}O7v6RbV;ANIg!8A;-0a9NT*$oci#5PUR z@b1i*_nFE@vdC+65GsyhzKz8LxC}`ZJ303g{%{77JKS7*;N6h>1U8=j@I^v;P;f~F zSi}TxvMx?4pGOevsBdQ{;_~8Wwz1$m@CeKt7yx z!NT@c)OC^nbm+0e+N>nmm;(8+Nv8uut6#A!T3rlQ3)6ZP))Cuw2fhKjP7!JM)@R!G5D$;(jE*T*jhTohr;}W2?$98f8j7C=Ko(GGR6RNt0QC#9vKPA1Q0{dF!ILa43Zh9i$MyJhH28H zd8Cmu(iy^7(8+^-e7tAu{}OgfZaBP}NHj!JhG*nD1!gi6FCFkkP6OfDL^ii|3T@%~ zyQkf)y&ddU`UoFA?|jiFwMl&aT&Nv{IUct>Jv%&TR(47irpns(3{~N%36k^<#X-m% zIUrIgSW}<>5bpSc#F0jKF!I-!sN8r^IbIR*K*H!8lomRF!vd#Q@-wpirc=~x)E*=a zGapdsC549%_M0{na>c;kv#S0(h*jeM#HSu;7v&zmc8ov7H)2$h|E6OS>E$2&qyP55 zk{Y`Nqu(6um#X_~3_O5)YL3abpWeUweE%~B@Y|ao>gU%-$AF}^tkL57dULipDoC*}HLGGz{}mbSyWW^-@76d=QDHXCD^u-m9J8e$m$ z0YTsL0yt2;m5saxV6N2`_d1i1qJloA4h>x#CQch>ql}hhSUH5sd{F;5FFtIh6H&x? zW@rxpI*%J3Kt#M{n6yO=)bhA2m`=M5s&UQI{DNMovUnooP8_b~U^r8)Y|+hLsvR8f z-<%)NO?vg}#qs{xPLthYVGRlqPY>XsgcSvh2l+IdisAJ01~HBj#??_qWzteJD&-RX4%Gr?Nj0l0LK<{*@bDDe z%n2Dw0mU>kkVZ6!BXZ0`2~th`c-G9Hy_fpOXEizmB+D?g=m=e= zBUGa7c7;I?UN&M0(G2D6j6yy$bks99KiSV)N6w_cszQw66q-?ACffISSkKV6Hmg+Y z3`%gM*g)}Nu=rRexR0rlq=gBs*ScavK~aIBP^pb7mK^Y{7L>9Htew~^RD#Q>k=O<^ zgsV_ffE~%SYLjl%Mavf=g%?wg6~-^f$-WifeRhloQ25X&v;nR4=C2QjFG_ zY&oCKCgSxkV~dF*3NkNY61vw861uO({gWE77-o=*loZAC{o!GiiHK=ijyMlgGdC3MIs${veu`5ESY0>f{7`Y$;Bfs<(NBD zZJexzH`a^myY*UTy|LLWlPW9o8mk|iZk;xFHf~Rv8{4(RK%@$&r#>dHU9xxK%R zpEmoXF>Uh~3Y)=Ba7hi4q@&TXp$zQ4R!O}BeefV~c3}lVDaN{nos6NDgaTL{_F5dm zlyGEukI(Q*2X9Nllzo-f4)bM6YXjD6<0drOd^WM?v4Y4q!?8`|Ir9XgIhfIvN?m%W zRo!g%EL~i_qe$e3U#@T7fB5kE#oqZ3AMx#@(f4|RBD?gaQ;2Wki(_;1m6ApoTGkVDk zEi=PVS*YTcgQ2US#uu><3egC)lDzwdM5EL%#Qvn8zkDYB_VM$FPai(K`{B#ScWi9U1;jgkIrtcj&F|6NaE}tG@(%q6x^zT(y!v>`7xB$MJpwl|&50YdC^3Yqew|Q%3&_MX4Ik zK>73{6qdNMQy{;=+=JoqV`F7!7msC90vikHo)&WAOHn#_)8S+=EUcL_ zGKMS!Wb`x>53CCdP$Z0w*N5%LL7eAa=;2(rZRDCiLX#S&6m5IEjrZZ~}z=Ih>6$ zfBW6Sd%Xi##bv? z3fkQuf!!1iq>7wP_D|k_d2{o+V`2z$C}VX00MXT9c545FfPVINF}8JmXua>CS@39M zXJ@0jUf$R$NQXx^Z{B{nyx7=0TQ4?uvz6w)ul>#UAK$#c`{DfL_Ql-~wX>V^ldYYz zZD*{sQLi5C@kd^16q6B35da1TW0|Nwn|ok5?QB;{t6Mw8dLz#ZekY%-W|B#E#$=cS zv95u|Dc9FZMPJQW&lmn8bi!AS-MjF53)be3_zV^mLQ7U#6fO67`^b`1)! z7k&PCskl)q7K;@~#}~(Yo7)%XHy1dqYNbM{L>piLH&iegix{nTVolT)F>)5!oFNoq8*NU^JH@oa|LtWX>j zC1!&R`vbo}znYlu$~$1QhunO`XfPCZ!GnniJp$4c!42vQa2C?70lt9aBw^vCpLH#q z3L*Q3;)PfyLCh^I`nWhjLZAS%BCaz69D-U&j~BZ?Rv(m~r_&N&AA?0Q5^~8pO^n_9 zIe(>)%QuRJXtuOo&K0YSEtQSp=3Zs5Tq|AeRZ8{z)($!8y~;*G02bGqcrY7Bkd{t% z4!7tbJv!tK;uG|DjL8v@Lt%N^Qaq8haTFOE80Qr?KHAR#4B3`l*#K=t9HH3oLegO;#bt_!J0=8I z1su!yB~0f~#w-fiveRm0e6ubRxAA%`Zk^p?T44XfDZ+~9KTI7IlTaaF0#vp3Oj7Rd zUEkhZy?%dibaQw2;<&Q;;;MygzCb;+cC=29w-5B8bqy)3OJkyFqer{ca&CV*a@4N$ zxbns5N@nfsC~dAcgW0rWYxQt-+3X407FJ-AEZD7hGp46TdOF#6k94(kjCHo0ot<=D z-X1-Ba=yR6hbLW99z4IO2H-@HY6x?%H~B5daVr{~Mq^o7Fj6h#>mjz-r7AokH#d`G0g7c?Gxmw=Fa98qSY}>?@g)@`J$@pBsFTaYNb}GZf=wc z)SDn`tXJ08)5*obf^vCpz#Pmm0_RqVci=sMg_=zjR^v>rO zXlo99UgX<-4z?RS5Z&gAjynYWp>R5cW2=~sX^^3kHx&0^X11^R0z;`j(d* zHdrloNEOd1;FJ*h31i@k?Cx*x?Hgio&^P#F7jS55yJ$f9Uh3j%9Ky|jkCM7_3UPY| zdzcYu_7u|q0mU95*PWm5U+nlNKM#8kdwGKLz9();lLn}N=pu7-q|OP9&(T9D2evmO zqLpJ4^Bor^HmS4IBRt?>u3%4L9vGh;VICMAM$(uPP2uD@CouLPV(={F9nV&nVSsc7 zHi>_j2iPNvc|fI}rsj)zU|uPJl#r`z>%Jr>- z!{hfqyuEta2|k6$CfcL$T};rRN_#NgRKP$3zjl5?`RTemz%{eIxwU^(lQuTC4iC{n zbG)o$nL;R;DLVc`YO7IeR*tAVESC>sHR?986R(;)Z0;kOwAo1$i{A~bz_4u6TU~y; z$>oewDzKVNh6Ao-#vcQ~;{nuXr`FqUvSI|*;+Xe@Et-X86{tb4(dDDQkaTxY;xTNe zy3&=&cnpUZy(6-q)ygx(7hiV7;<<3xY_d^NrNc_E6V;EdfXQKX@|an&Srz&vgJzcV zvToU9Hh5Mj*tIBmr;sRw%#3wzWRkcJmH-N%IEGS;Y%-Gw1V%)vLbtr6Mtfb7(8_tk z7(uTXbvo5dThFq?xvZMO4m&n0pO{eT$P)4jo6_qo;&O-b;w2S`do2*m&=?&HL_JQ< zK}G|(M%d9@;qxjDyFUY9dyz~c%ch41W5h>J(m@gUNbQ2p~+%{GO0&M9%}CYreqnS zCN9q>7?D$$NZ|*=2E(|#pSe7ln^Dn1pA;~Y*Y8*m6% zC^MPc=@jLyZg0S6^CK?U1LW0$xDA5=DS{2wZgvHoPV$;ymoXnqKJn;Cn7Jqxa)UYb zSoqK$#9Isc1Eg#}b>epHi!LA61N8_|PsHiK4sTY|Y^2<)sd%cGPWeE&;~Qe5y^8E! zuB|q5`Sku~UToKD;%$)4r`GGGLRLVk3Jvt|?b_x#=g3C0xv_5Qjw!}eSBg-U!{q+) zZR6nlVsGQ9>8!*BHgRdoYrbjw1p$(7raLiQdScJ#TwX z^>}Aj_kh@eb_4C{6$^V-3B43GBRVq{jP(n8+1LQ5BK}w@HR8@0V;QtGH3s4VBdeCm z*d+ycS)&4PtxWVoxM_D-Gzfec-!F*;ihw76JyF8aw6}eHx?b7ZIXI}NR(CePe*Em) zM_+&Y)i;m7?dy3YwQ^l{j4jQQk^Js=Pse1BYU=;=B>A6vG#a6G+t&@zh~;`KtqUxPTUwqz zefH$!@$*ODo*f_U>^Ba8i|$hfKx6z?b*E9|!MnY`h5A%$*7G8gDbdqWY;5`5L*-(n zQ5Vuig#yfcGFPsxm#b?47dU=nHb~}33PVcI^USn`Mio^_YYhdx zd^53Q;XM%HOm8I2J>lW1k9&M%Fm1rs2)2Vj0oI13XQZLVYLbi`vPe{{n3i^@jRCw@ zpmF$h?l9qKzgYltZ0;4h$aQL_A~&Nxgf*7|AM&y|S>VN9Ug1;&0?uYewxGWpxtORm z-FsS-d__y$B9-(ukXK8~4wzvo{WMWJrA}dDpSiHSq?eZ1P=14xroX$l9k~GRC)@Wf z&`^|Hf9UuOG_8%1weNi!0&Z^~4@Y=U?Omh<=|| z<}gf0ViPPPh-9#RAj5?0Az&xKwK?IV>jEo-IzicJXGcdTKgpER*E>uf5q!w*?%@G) zp(LAzY31zdC$t7@ieEn3k3EBrH%NY?XLLxyBst2vdJK=J=z|^Tk!6w{{X^sZz4(b3 zz-fjRfzdf(hd?qE>xP6_mobXS7!iJqj3JU5e=HIdhzvP8 zGc^2kZ^wl6-|$myZ5=Ps8)i^3dZj?;KaoUbya;Z9r)n?qZ*WobQ6uOW8S#-m^AGb6 zBE|qe63rl!e4;->ermV!55IPdJg69P095}q;He%09uGPOv+@3V^SH6Q+q^iU|CkD+ zw?B2hr-StFzIpfJe)HAm`@Nlu!}H^eEeE5g!J;=;E#wO6$=M>R_)#M2>#K#M zja0mfN&p~gBN9pHE42*Pj6_zL|1I8ZvS4+t*a9mC{iK6nd4|5OWJYS1sNUGl9vwD= zjiq-33Uf4WHzst^`l=&XE7t1-sIo$6$X7zB6U%rVlXw>WnPR5kW=))-yU8U$Pnnoy z*%7>Yg#Mgq}wM;Sr;lSgJ69r4*=<@_o(COf|!>JUcnWwrdKA^@>45s*)L*?Z2D}R;g!QA%h49 zSj6Ztw`dojpDL6xBBvNL6T#2_0~|QU3U_=)G=<^Cl{f<-W3eRRw+B9LRt_Sr)$MSz9!Qi+fv8cTb1kS`P9+Iv8DwRq_MTBXD0>HfmfoT( z9NnE=9%o~h)q}!DqrP1xa$3w$4hx)#Jw3-0bPTJ(iap0D(ZD5)KD?rJ3l!>-H_`|| z8=xfNMFEo7E2@-wx_-is`Qzs=Uw-WT@Z;z2-+X>gd&pZ>7%y*ue!afExqEqgdVO|v zeZwEw&Gp#rCKJsyf3(-TL@_qE51Yp)+gDfQQxCQ=)KqHQ`@4s1tG1=>{d%*$yHl?r zb2Zj0m0~r!y|tdu_oNnVCsS5ZNcq)5u~Ni@iByzG(#26&Eme6GL4l8isGVV17v=0p z%_|Hk0619KOe|vpr`g!#7^zG$q)Y~6->KffSJ{tOgZlsuG7seGdHEFm(9m-xNOH{4 zB0exm_<0(j13WfD6SJb3Mi|cE1Tf@q5X22RLdG9o`Ye^BW8k*Yh(QL3YBN!~LBt7D zUGK>4jjIp!-u?hqxvEGPSt$`Kj?-?wckvv#7 zKc6JeMd%NiT>gBTHm!IpguY|3I<&B~i6=OC3df;Rg&7H4Zd7JCS>Z6=Nn{Q|P4>EA zPoYNpJ%qEPkpRb9yL`+XBzo^2gB zw&^=zj-sY#Es;pXyncTmx*GBqSR+ES_rgo2>WMHoDxQ_2D)?pM?7S4{xej_If6Rl( z0V5O3KHnUd!)({z{b3y70Zc&xOSeQP$!ju^!x^N&;m{@gUnz6EX{K! zLe~Ygd+`wHVN!z0SS6k-rqc=W-7%j;TVzTI!$TjTUg@ zaOY7)`?4^k$2{Ix2FwIbnLyAPSzC*TSEEjEIz@MBi1K+#HBd6*QA&2b0%gG*L0l(^ zeLdh=ak&tYS!KWs;8OJXh!jI@clg2nkOqzTQz7TTH1x>=F+13-^~QQR&r7bHPuBN< zZIin@*c1x(_IWv3TWd1N?=|SCZmie0*oAMO?`&V6UR_*V?olp!@Ztb~^X=v7`F?ci zbzD2{=$l)mplfsY>h9If?e*Ew=`}L`?dJ2$fXpIY36Iuq|IdH*zyIyO`q%&FU;oYD z{y$%_>K|(Lm7jLlJ30_E`iP|w!5HR{CE&pWsI{P$1ZaoLW@Zd{o`~xb4Prb+I#X)r z2m?FKOG}vhj@K9||&cmR~xe>Y8p*n?G%}D8dDV|!-UQBInAKYD@ynKFp zb#Z-le|2#Ds*3~Vv(~q5cgIgS0QR*%r}}hQ<{Nx|Sm})VrNodYmNWoRwEL~Dg-G3P z+yC~|n~JsUMgw`1)|ob@V+JVd2Fv{D+|u;8ZgHfYcQ*CEaD|?AwzNHd-gfhd3e&x# z@(xYz-j&^4g$DUdfo2MfDrA5mG0@M)O3RD_$ZfO&A(nm_84qru?BVyAq7{tw-VnYTz9A#sSfxRod9x*n&A#7nF+P2E!vLPvVqonS8Wb z$%WKyKACQ7)W`^nr67~f3JC-Gf|Pll2J#{q;UtP4y9`zvw1|*hiUhnN{568E?Q^q< zb84zDlXzdr(?`Q@k-NZK3`dn7UMkZd(1(%^o^r0B-Ak3J+2i2n+*X^zMD~nd8FgUt z^pno8x&y|j-4=BCq5B0)s2kjWc9Kzk2QAh1L;kt1&^|)canLar~8MW zE;e1Nx1FkH$Ec|Ko4|lTCl+=pa^VCq0U(Lf_#%ye?Pp$`+6) z#sQ+41AP$1@V7(X9s|QYLke>O@c}#q0T28N^OI_YfI&?$4dAosXBq%$#WXN(NQArWJxC{`o~`G8oFguGP#oO zL*g4G>ZsWeNfMQ6435jpB&lE&U{*kEhxum%Aa)Fc#oEr%#@Z>j(a$fWPg2(}bhAV6 z8t5fu$KW(L1kk&SHO)Xz&wtNO<>$|r7kBq(^?XI5>$Z`v?yvzZZ`aU#1L4Rk=kM#a z&3dI4DwQgcje}+`Q^{A>LnibuEMv^c7-Hg)ftGWn-~@A=rZXcJa0T!kfIe~h%r1Y* zj;<9?aEaKxVYtPrB@?b|?V>_!Sl6V*osYptVllSMsi zn>B~sNjePlU>FBgB>o|T|%tp;YvU--6 zu>Mr%ER~ak9A_jQ7S;74BQ!sQ3z(G|g2EURE6m>RzK4AH@R$Tnm0vPA*7Ib|rqPD> zj$7cm^SCBuiJn04S7hoq;UmJ0&G4U(BQ8u#u#zJTF+whx1;qGxXJCTiaiE))TYpI~j=4 za|=xj&%vFitY!)+MK~nJVL`}{3Mud<*WC9X%oB1gLLE+rY54?POyW#SvipmXHnQ!a>La$BWOCW=F&^ zB;biT@tL^1zM$9ZfTcm_g*_}ffk0}+{QA`6{zX&kI|+>12{cMy^oG<&x|mR?`tG#S4@{sQ~BXjuQ< zQ>nf6yRTc@pL7fuy1%Q%TO9KLxcF3Sv&k2AGL@b)pdqSLWd41X(g*49*38RZ_2i;! z-tLgoYKm&>f5cq;~2CKM>mr+FQj}4{-8Yc z>4`KBO3R`V&2d4%>{MLLbMsm*TW}?ii#W#$*{}zQ&BaVYu2H)iv#28-0mK9#cfKRB|pah0aG)5h)C)hVED=W(FbuStm`+DhOY)|NOwDfRd-ik z5B1~i-JS3F>tja`wvjFzBZ39h)-l9l9+g8Z*m?1Fjv7jTk(N1>}K<8I~aE z9Yjj75%VO)V}Lfy=N=tl2?B-!?$j`(hYS+GYZHV^Ze_c4w>}FeE-`!UVxSACxzM{&@#q5|1pAwNO(*=1T}us zW%&pER7v_Hej3u%Z=_{DNQytyXNe3MWuM%8!Q!L$$T2* zf8G~P6~obl)8ZE#YIAa91G;Z^@7x7{rx5aH>y<(ZnK+PcHqw5qjm||=Bom`oIT41} zqIblo_~ao?m$Fn^PgIJHgVVE}gL?MY9^-;NP%c^2;b^@Qw9hZN)}eD3zzgQrQ$AZJ zRm`!d#$8X55O=emMRvp;DVdm2vhlQc*&cCf<|hZn$0-aWCJhP*#uS~AaVnXZzr)~W zR{@}`3Hm_L2MpXKF~>W-Sc<|C4y}x6KI4qcO$F|10=*GN)BLoNEG$wE1#PKJVU5F1 zsssh-;0OfO$@!ZXXS>@RFE4j+PnF33)f2949OCVIzL-ss4ND`$WHBtm!SJP`9E;;D zeO(?(HX;F5ia{wBj-*qO0KbT*2d7_OdF2DT0yB%qFtdD?%jk|ZEviJ|lVIrtZ*?3- z3`BAb)AQ7nl9ISd6ayIBB5g{(6KAgyw8Pvag2d!d&zt*VroQv?`+;djCjJ%vNWqt2 zub~*9QA;u{YY4qqaVs%Lz=hW^drS?fJI86DWwH@vVl(Vhu;t^Jm{u^~$rolPDH5M! zLo%n-8`yvdd^e@wXo0ve5v|3Hi14wf&@E60q*Ce^m%!vPCQ|c-Pl?}=Fr8}V)e8c1 z!NQI$p@6dRo=|EhO5>>XE|b|~M>IA#EtG7;95`l-W(3|v9*s-$(<43KcTK7+c#)`R z2cZMMpHZ3ZMT`YihzXd(9GnTB^fcI(@)U(;(>XdJfuvN3MWpg%^|EWl^=4B-hAbBm zJ~FuqU=(~sSldbkMgOXXzH&wl(lvCD=U9X!6Tx6PXLFDTN#sa@WDvvgxy3Ruj~^C$ zh!dhGgxioSj_p=FS%~>!nA}9>-bXu!58_mW8r~Ey9+$ixv2A>*^HD%h5heqNB6@-J|n8vZ5z<2Ujoe z&W|oH=-7C9ck}+^hu0rIzP-A-dwu)))BCsQ<>i50i_EasBllJgPRVF|czOT&ez#vY zA03|hqX{}&dX199A1|-7cJW$`f`8s?$mT!&gxt+OgCiawRjffwuhiJVScU5G!OR$<`@AtTU<1oTo&|rUVt8tS>*`X$dE4U>_Ime{t&GW+=}HWH9e)m23dpc zS|0V(vmgb}Pu{+M`~LI0PZA={t5^3u;)(v_mw`{ee)wSm>0b8bwzgpJ+P`0{49dpl zbk2Z$x|QN+3@(n z4DF}m13&%p{jVPn-oLtjadN&Z?KFC)EcBP`?jLQI>l>MPIFrPJ>jS`G^R0+Y3`S~7 zvCD&QyJwdqaV~IYQYKC? zV|RCBXJc>YY)aj0yIJJ)P{-OYiAQ7eVL0@xHs0b*=*5|^p-%0%|T*w@oT+U z&{Bz9yim#{5xN1ZB;j(0;&zP7Xh1Q-d4RZM5CO6YbUd0v({7+|woHhwnN$V|JryV+ zf%yII7+?Y9ar~Wr2e1OXo}qlS~F959<#Rz;jRBusWKq0;v^>3_K|kcVu3lh}rYLcN*-=Nefl4bRZ#tMw zB7`T57}Z_aM@Q%9FK^FJ&))p{Q*Y-FKmGJm2jwnZ?f6={``SC&KG2EQ-Y(M5&!4xy zy1G5xE38RpuRpv!+TPtcKHuIxz22=umS`<~{`}?b&B^h}+Yi@Um$VMvokKzkMat_* zYHAy$we@hEmtJU?z^oN?dnDpUSbdot;87;kWtpwsbj_ zjTEvl_5c~vkW0TPVp&>ZXrMgi4tRWY zhi0>Ac}b>$CWx5&*75P(`5q3r_03}_Fr_s{lJ&4H6)l400N;j3I+p?Vh6!J!o4g5t zE4~m%T8AqVWed--*DG;HfN%qL8L~S45l-1v?jqUboJup49?|0S*DcdTXtFF=5IeNKl||GO1GQpml~JpejSot%TL)+K z7-fUhbyCxwEcl4NMmgfK;Gjo^E@PG#m>|;;0%XF95XJ19rGtQ6O)8qnWplijv!&8M z%@q}pR`;_V$wr>0u-T1Yx*cpMpHz^$VYt`RcU(l%EhjQBn_U8l4JvX=nfT^y2>V{OYXwXt>Kn zIDX{YzxlI2{j6v4)!lfip|eh7GS^XtQscpOVinEt&}k>5Mib)Ug?(iz+V6x_Y<`RyPh< zzY~GdO%ZQ00cQd-CN#@rwXUpay^dL7qA7rTIyg4=}itz zs}z%}Q4Y$mT%>N=npyd_Uf*8a9T!gyw|3U+`F!?ik1n5+D&^ApY9f>MyQq`!1?*TB zjfX!VJv<~4Kp``^@BI{O!x}hahkQYym{JzQ?sR`<^D~}{mVOS zCNIw4U7w$w!Y)2LI{+%l@9^UI;P7DYc#maV3|{=ZnQ!J}`Ufo!4&;SeXNgY{*!_ zrh}Q)W*tTq&9flBqD;mROei6tEpBQv+@9-BUzP`_lmQo&03(F15%xxT zTp0wJ0^_oe3UHA=%EZEWpz)YdCk~qeoC}-7Fkv*0+Z!S)2eT6y*=Jytw-~_fV&zVO z^ z9O&d??B|sKhjD;>Q8(kjPd{Oy?0mCj9%+%5^564}VI1Ir2kC@WhKQQYj>=ft5=>Wt z+94f@Z~$VDeK8(&8Q2<#lCqaC48(ax`bH^MW*mU=fB~bgZ4qfkmVrN zG0Uipk&NsH=8UP?F>CUx(&!Y`1jO&Kq0dk7%$8$x!1X?>n$=RMq{aQfJ3%3+J4`)l z1LfF83uf-k6E38a>+@Il7pLd1fBm_?`hX&pp*&H^rg|rcR9zHe? ziM>)b0@8@@hYyIF1=4`epmdn|9+B4sG4FQROawWFyh06xd08!7QLMDpd5R;aoUkPn)0|4o%;b2teg#exs@1ks4 zNpw_XLD2kQW5S(~Q5r%&2I&h>(>Nvwbnx8dcO=$(L!_d)0VN_Dd^IGa`nh5HiBNSI zC9+nes|0;jJxxeSF}*B@c!{?Im3c}%Ju}iLJ>L7OwQqLW3dJ9mo!#Y)35Ph-oeKoS zij|a*(?(me&BZPzjMobJ!5gOjGD0IP*)#H$OlKVZlfZbW3|MhbO;dB40%}ZkW3?g;r65UkxFyAd~T*kkVPJw&^vr_ zkBx^T6e}K#CIi(5qOi#24L-Df*ocxiYyq2FqQKe{a9U@+9uJ1Hv2rez@+Vj;0v5VYD6CEq5-G6Pv&}SqugjTHY#iqj*gFakB<%k z=O64`ogW|6L(@;{+lO6%UUON@wYFYJbKjH$tjluMQ7XdRvI@Rip6_}MVf7L5@e6_dvxVg8n-7+vR-g{DwPH4XK$2#@jP<7rt zshpVAD3=IwsVJzPGWw#rKn68y)g6pl(5BHAm!>Aw3qUmc+PcR^dqz4RKYc89cRYE< zDe396r{8RX-jb@}YB`Hz7JTV>qQ@&mTV_m1v7dhqb!-A8wK5AN>lZi-DOrM*gdbrpNzDvg*VzBzxvnI?xT zBuh1yqZ{ihlL)EIWIpVP$8np3O-~~-li6U`gJJO1aK+x{PhIc zcvAZob}73`vYwetvy5xnLv)BjEYeA?m`JT+2a0rT0CPago60n$2 zuGbT%*3nBM$BQmsAf>UqJfadScyTT-$(Lu%qIDUYtU}CZu-8@0VVz!@6Nr;b)1$0b zo;I{G3N+Od4xmE=L9Lk!u1Vw@HNCmIZh9w>4?snb5Fi8FB)-&G&2xFadez=2JUuJO zJMKLgcb^e^=Pz;(qKTrFTnCAW7Svf}0hHB&-VWZv{iNVfZ4roZGy#& zToE|fMznybg4W$j6KJQjgBH&LaiPj~fnW!}C1M=nTrxhjs4{x-yut?0uCL{D+3Lx` zqld?*r)T$%A3v+R|KxGqfG>s3V9a62y|u2FJIL-}X((pwI(g)qjGT(a48y z>=D|3CukgQ9dE5A!6v*uI@oxAwX<5A?G&zFz1iKl+TFZ9+dH_ry*WDAUk@dt@tED0 z$ksrZgnXu0Dx8Rs$zw_H3*#=PIG)=P zbFAoX9+NAQ)M#L;T3ktCGvX~$jJujR$ZTv+91pAPEBRb9Vz4?l*X>GmFkPSqFY1p* zvHzk?Q+$wG^<%S7ZmngbBFaMHkWDXu)sDL@R_oHh*px~SGsqtbald;4pkjsSnc*YbH%A)8e(_HG&|GGa%F z^59}DLpxJ0gA=A&#UQtJMq(U8b+KB`#D!kj$j4HdVkVmorYLp{VvVxd z9DeGe9Y73-g?OC=8@+ykMoFh;(PVXH(!8uptB3Qwlg!=iU40_gp_}Ro-V2i~wlMFq z2peWsHa4|1GAEmw5|hr@;)rSX%}g^fllf$Z5N(zdlUVGr(o2yw*yoLnK-qb5l#gZ4 zZ$1EPW8#ML#7Mx_g3JbCR}92hgQ=ZkFN-_G6w(l&1& zb|hl_L)0{;;rW1%U_-dDFulO|I65*tHwKjoKj!G{!pzbPOARoeaJt29oLFzh3Y>7r zIIdCf6aq<7#2Svi{7Tu$jEsMLRe-#~%t=|6N^3$uHZ4<`Wsol`A$D3PhPr64`VzlqnT9#f^Uh!&#PIc2Bsx7LP~VfI($&&_=z|+UZA}nJ`iN2D(HX8WSfeVU#s0 zPsZm^q(n#XFj;uywQ-tmQL;Gdb65~_+`Q(%znQ3x1iWls;_g_tow*?0H|Lt#4ZUT0h+ES!Q4E?n+I2Uxuc- zJMi|*$uMH+bY6$wn)R<)X4RRqlYf5yElSxd3v(He{i@{Tq`d3ckk4S(P)7_&SWgf+6zT$#jN2bwc>!# zKx@~7Xq^KChp7q|ARt%P*I4oTd)nK2+5jOyO>Cy!iZFrj<#W?l;j{4m<>jZZZ(h89 z^X&BE`Oz7ui37MATli?vppK7)i;Ll#=>FO1+1~#7^+}D4?e5MA>l`3de8MZ+pwaUs zs!gcR$QD<3_jb1S_9~U_jas2l&TbY);pHi&TemLx@)VY^o?Vy39|_C*Wn zEDn!CI^mCSCj{KcfP^)oklgLyuuXzaYq43>PMf-mBvU$%!7~+yp6#XMBIb4_>~XF5 z9Cb1sdBmQYga=Q$hk6XQ8*VpULoS=2XDp2}E?>ms=dkJVh2j}s&`)J4tN|h-&V-Xz zU0>Ag4hFbO_*n2@fO&f4;zCbYaTt|~j)_6W3JzQCqL9)0wHa}!g_uTHOY{4W@7{hA zfRQ#g2_IT}S~~mSShjY5W~5+(kbHW5dYM{o-j-UnT8G(pqSw-tH9(jMy_9!7>xV(U zG%zrQoI9&v={7ef2Rkr}^2?EHbV?W}>n?uzLuP)Ww@cE2GqbxFR1+RYI3gfQ2&Xcp z6YZZG0yNf%a=|v1wTB3b07KQ&Nz+U_3D7~DliVFZ^`==UqdNDugPP)_b#;hFG~ApN zi^7_sPn6>&b5AccVq6_9xZQgC*nTuOcbvAgUk!@3_({49#_3I)K|up^jIhB26-j$~ zo{qcuc^OKKsLsgdm+;oe)i&b23Z2Cl%p9Gc-@LxPy1se!?(Nl^&q!)bk{9BiREy;O ztD~z|FJ69naZ_J+eSP)n$>r0=S2t(e1UE-J#l5S`FBiw#m$yf2TT>64u5WKPYR~pI zpPldTUA=sHbaJ@H$}99X_jvAcxtHZ#a+I8so)XTl=w3OG4gP_hN;fS+VmtFsUw_xlWm{n;LrqT*i-O6;;hDvWNzscs%x-RIun+ds*f=h96ga+;hZHj|rS!e5 z>Ns7F4s{CW$7=z5ke2us63PRk5Ya}!TnrBi<0H6!0jS_E;5sE$G&nNY)9D0SF#%1U z=>XyI5~kq%W%ULez;ZAg;C`U_$_IfjH{$X?Lr%xqq;8Qm*dp?bi0TcMlHEk9H1WPQ847^z7Niv&)P9{U|tX zOT9FGE7h#z);DsPV~-$&2)%##2S5JdkACpO@BZX3{_5ZV^`HOQpZw{c{OdpYhrX#X zsj)S;^`e<>=5HrJ9?>0avM7w;GzFw&1UoJ|2L4~5snUK1S5)08VjIMR#U~Ujknx2j znsBr>{Lt#DWtl>^sDwHNIBvxn3UHWqyFJ0U0J4x^cXTmb+86HE)<{VLAP*+O6GC$# z9kDw?02??s=pgE{yHw1|lzOGcBxjWj-%a!#QO$tdhv40ZeQprf<~Ou>{bSB$b#xXr z)QJ%7o140qPi~()KRdjA{p|GF#s2pG!6u)xQe}H*dlmE8CdQRbVeg=G)4#R9cTn3r zJl|a{mddrt?)L89-uh+*#@HGfMlzR9vF?E3o37TX5C@CJ^->ueUc8*jq|#YOGM!J5 z^hw9UG28Uh*ra@|LqX(?OV;iTq+@ZKvNFtiXtRD7@d`{f_8`waGxiO=pjI1A28GQi ze?rzc7{#tYNen}xMrZY!O+KxA!N5XLPbUzLFaW2Nr0}tgc|h7m459lY|0}Y!zrKI|DywWRwknH_ z{gl%3U?O(jPlB9l1WE)mpcG~l1=@JLrWTQfCm9a$@xYRl4j}~#!%|#VNDA-c6Qe!M z1B|}ieZ-a6P!Y~;Z>2g&N?it*IaNc<1K8bpXo1=xYDsiyxL2G9+C=}tDDwatR}2Xw zBt`hno#2EZ_|byEqZBp|R$q3$bR&y}p={dN2THps*kwqSGF>B~TuX#Y?DVu%)7COF zi~Ee92vZmaGE8bC6Qh%J3uB~*5DF(Ju&!~|lA$50%xXERfyo~!Jioqr`TF|u>iX6D zcQ-V;eg4$a{0dM9;EXTt&tJZM`R2>}cM{>l$B$oyw?gx$_cy}U`rdjWn%!7GTgyk+ z){@@H=>PHSQfWOJEJVGTbRw}<1M{AW;0Ul2XL5SuD`GEz5~0@T)hSfaC@o^ZjYz%8 zodxIUwdvi-d@c;@&)^LvJT|9xQLCCF<~^%b+o7n#WY<`nayg)SS__1*N$2BWeNHfKTRS%aP#X$e5PCTelB!08{=l&t{wo4!?mb+?@(?Ss9huaTR|U2GJfT zlgmcid;7_V=(M0?xFprOWqKBtwMu#=7eE3iaEoh6f#6cspiclwoEIjfUF}l%N%KIJ zl`QOV6Sv&&Rhb;f7Y?ILKG}05T~cd_8>;mRqg`uciEiY9#u;DC_Qiro*mi^xgNo2P zJ?=)c(qLrM;1BV3`i3LcQPj&STrOiQRm{=0%lmK^kKruV!TCjD0q09^%fRpia=uJ9 zW{XQ3z}j_TE$?R6CJ~!!Tibd-_V-A80H`Ca(R(=BH8>`P!%m2t@|BMEmcfCJo?dEv zV6t=hqFmq=LXnU_9>W#f)%NsWA?sBy=(213b%M~*E*g5cy1TnO1kQXokfBNOqfqX6 zTK06dG&}Dye`EIHtNAwCGN^;YY>Z(C*E5Giz?59mM3Ir~crb#Yg0e;{R=;!%!V515 zWWO=i&9pU>mckPx0$9m{vX?_~>?8F-N9gDvT^jUwkUe4ZNNTzlihOtP*@}Z52qNGp zs3~A;2phvoL_t_#jNz5Ockkh2N#B?ZB^7!e6e+V6yE5-=y+Y*TF(2#Lm+MqUachgo z!6`zZp-ah=Jv4Dk0LyF(1 zL3OaG%vPRXK=8%32seB;iezQ4(L1y4kAJy5{1%KC#12A zB|<53dzm=E>JlmcR3wxrSBm-dbfuIoRx9N#K-QH?sZs)OxKmpLJhF!kXa9hs?|x<7 zEu)eAL0|UOpw3A|I@0jyX%&Bh(EaB>{NWFN_=6w(_-DWP4pHOhKmG0xe)8Ra-#0nZ zx%4o7a7H~8rZP!O1HA@3jp-dGTi432fI=-&KvM1@lrn;1U4uLp2l{%*`+if9VX2b5 znVXwg(9EH23?e)%j?c(|z{!@iDznH!|y@Qjou zI@)U8vKh6yze_nhLCCWH{^N$m9^NlPT_cO!=K6<^8lKkQdGP4bI_mDPlF=w@#t`R} zm7zxu@ZqUcRHkU?E?lHBn>M>C*n+rrm$@WKZv2*H0A0zy3<8V|mI z`0(MqC+v;yJ-B!G&cVUGY(sSjOkQPm9 zEt6l{EI}P%SGAfet`?IyD%C=XSP;6Zn+qf4cY1x0vl9g2>C6%bTvyb`$Q#u8urR`e z_5(^)_TOC@n8^s!5TuL{dv%10@id5!Y9ohnn-SesOGOO1BLgsh)siqjuTaXTRf@Tm zMT41ql1XPV8mZ)+UsM_ua`S>=Y>8gcr9~BZSPT*L8gsQn7hDDpvpi0IZXUT;u9x9R z(lW}^ExxSLndQrJoqTyxjgkd*azOzHUneK#J-Q6Kd{ zSVi$ONMKOCg^VgRHa~4_X>7QDadY$LDHwu=`ns1*jCWm4t&L6XZ^Y0BNshO#p53Mt zl3e{v8;&&`WMJx{$F|etF7RnW1a5%>!$mtzx=rLu<4r-pfO6g0D|EL}>B;Bx z*xuLM+WbVsvSU~w6@r2x)Hl}iIBnyz4RLIc)EvKn_HK*|-mj#w{~=Zr52jnp0zwE zAdhr(eQWFhTiJ`4OgN*F~mz zWn-ID>*3zX!GlM84^i44y|aIGcyf3D?t_z)?IE-V;di2j2%`Gh z7(-`}qcglmWq8W}(XK?f?7f& zdDl0c<6rPWh=cr2;y5@0#(R8rv37Owf{^s{>(f1T{fpPENRO+h$Ip%~&(HSGPOAIa z)!ObxXuTYA7I${5X@4f=Uxgp&aRfR3ogc1w($%6jQp0@YOVIrr!)(U+Kb7<+auK#! zF7g{DD|=uCWHwOi`Wd;_AIoj+3On=zZ{_prN40}j71K$_^fK;`ObsAL#FwQGIg?q- zSE}g{Aj13#^qFX}P{^girR>^vHBX4b<)8*5m=1=Bb}lfT1S9O10j>BUCzBGyyN6ZZ zA)*sa?ASsgg96%IhyyBwAc{N%hy`}yfhMI)qo*bhIE&A#ZtJrIL#fqlbuFfo_jODt zEv6NJ*hS@D${B|6lF6ql$g67<`fOs8-`lQ<2O>zvg;F*a^yf?QY+*eUkK&06Wm9>0 z_u&{vh)|TXgAvXs#y>{@J>TXH2#J7)UzN)dhgz{>2nKqjR1FOdQA`7faCEd2I0Wx< zIG!N<*>DU3f~PwSoA@+i_&BRF2I_83RYa1w5jksiLu2Kg(m^{dvph9m)P};ylnw%& zYJPiF!L*nx@1DPDW>XCzUXaqz!C=qq%)SoaC!$LKaNqs~z)K_)mKY#UCZ?y@KY+Xz z+1s>u;8w;s%=e&aLzF-WLW_Q4j4ZvB@rnhu3k&pZh_Min-Xm6n!Ky&o_!je+o}r75<3V5v6xC97$$5 z3dTbM(np4%M$nH65)P;Q(L^x=&@1MYG-VWe5B(@Mzm2o)iWj7ghprSC7Q3)w;f z01dUGb3R)r6p15+)3Ho3kPqU;EXN~Bf{LUykYcLE3M8r{*4c$s>avI!9Gv35AiuG5 ze6o4)Z0GoRWB>Gc`-olS!SjpjXIIyUN6&A*ygqw*_4f7Ww{M;u-(Fmtzj^&Er|Ubk zPIS6BAoUoPawZ5X+n*qdd~YPRzJ<3xgQHlhH7Po#!ZT?TBP=iJ{{EhCEy@T|s9Ix_ z>}*FMlZjXojKkv$wUek;?49ItPXEj5#ia$MLZMoe(+g#{spwagn_Mc2A$4SHSow$| z6n~B(;GaUekjeT28~)N>?fO>u`n6ej^Wo$5(c4d-TO}`VqY5Faag^G9`)}XzxC~u9pm#Uet*(y`b+6+pAXcHZu;P#oF z7(r8qXZW?J^UDXKKW)MXfr7+~y`z1wU)4e}vMXkIGU6vWDE><%kx(IrIBB<%T_-)M znIVaUTa!jzY)LR)N5}dQ==uk6vjR>4w#YlFi4LfyFJC2J-@oPX`0?%S&Gpwew-=W; z&ri=!_l{3aPWeP_@8Xczy%2&0%i;O)!TI^l{`MjJj*EkxoukW((*t%K)V^Y)-&!qh z)`;XLiL>&aXm7bYDE+q)Z^rAnc=n$P5-QB7N3r%Syb(Ku+L z&%y-?B_f0==>749S;~3HWYBu-#${#{kQ-c7)#`g^m!hsX_D^3h7J& zPK}PvPR)*u<0EJ9Ml%6?9AsA!8X=$!lTCw@-JyRcWpyV$Z$#V$6G>;+$Hulnz_7zC zAqdg~k76kSH9`!9EKJdzj4~tbg(y5R+KbkOeQa!SYH@To>V1jHZ z_*K!-#ObYDN^JrTx6$4KfpMz0LyR@|G}{vk&HS1O@lP+HDAPWKPRzx|Gj)>l^!(&J zE`9XG3HXF_3br%+K5$0s3=V@8Z>`-7E=3#Pzqo89`gHN^#hbSuZ$5nf_@$}o!y7~* z$=kD+mtWsJe|dg(ynXie@)~c%$(3;SZ1-UM`StDI>u0w|l)&7aks;^FlF>8A6Ue_EE~vC05WttowP#=oMdev33N;IN;Mukqu$~3s9Sqj zza|PC6Qfjav`^9qX%oHn!AQ(baSaKlLE~1@6jX(tEwQJUL@?jI}u3Lik(Zm(5Hn0C1Pz+u1igPAKRf=Yg>< zh)~P}i%OLk!TA5?0YXBP(`*yaC^+X2lP|&;C(Z)^C2&82djOZl76As_Pd>T_@Dz?hLN++!V5lJW zx+v11Xp2uCs=kAPkLkg);wM$=SwUM1;QX}NSDau|*o3hb1l(e0L#H*;+vu|Jvsi+H z+hbNP)(?yJ4Crrumi;ML!WD~V)AVj666tiQ5KRX0>*qIDH&>JBjhyx>ZrDB|wM$u6&+i`|HCG9p~m zfhy}4{_H0|`r!|M^xyp8yFdBw{`znJ=CA(pU;o*k|Ji^0r++&+S=VbC2&h5vLfgj9 z*4qwI9T|;S#^4A*LD+m4GdnrGi5vdDp?-YjETCpar!oCeLxrHcFgc@y^`cwQDs(d{ z(}I>gAsZ-@&TfTI$Sm#v?IKWl60+Fx=0IWf_~glp+qx&`*H?RM6j0UIogTZUAKIqX zk$OY%=Bff129Fx#Lq-!u8pXhv)s^40ttjM6CXd{r9SpfGGWp0v zuY7KN4iAvDv#S|fP|HB1=k`wV?A;)Fin!6x@VM?#!{giA zr!OxrZm%wHFjXACx}Xg0L>vNGZftGsR(QdeHp**zg44acL7ZcMzq&z4BfEOIRjuq0 z$lcr|v$L_WiE7H>h@^NSoWkEwUfWqK<_lFAm8*$p9*0*d!ILRhUI*rvOK>5H)mpN~ z@PaIOJ-BS910X>K7Sk)yBAeUcL=twcKtlr}i5JJA6Y%8NReH0kt!>6_@-hjrk;Rq; zhJ|c~(PF~lZZPsg^cHtmhb0+?kjDyb5;V7lrf@2Z%=kiS)lh>-hx_MraKO>4i80yy zw2V`DWI_VO(rhD9Wd?W;Y+Fb5hIz%HpeA8Lz`8pt$fmpTXz~)~ADrq}Z$GsO?+Ifx zw!eSK^zu4?y-s_nVwY=@9F<7#yU;J;ix| zEGhlZY;_ScV7(4;{a~Fy>ll{~30Uu?U1KBc2s_*>)6EFJohW!{(0rVrA!`vuwy}p zwQ{u%fGPPD)5H z>vJms;^X~cG=rblXgSnOE-xdb%+4sL2)rS2C`mSw2^&XmfwrVj)-_6d*m^bMRUsqM zD*+1yssyYs+y54N)R-pOAyYa(&_VgdH);uCG)W`w=6az{g0~*N2?p|dkqj?#$;e3b zab%IS^z^mfTT56MXXcIm%-Y`LCb24`^}lXvBUuc$jGu_AxSsAd0#ZF)s~G~EEZF!a zQQHvf<@)+t286LOYL>)K4$AID!aR5vhFjhXFedSAa?_BLV#XFTpq+=il=_ZL61kcu87*zR_nY6| zX=oP)Czc@}GT>>o%Pe3uMuS?-zqRz7=u}#rnkX9D7kC`Lg=e|JX&@Q)8KI+`FI4bF)HVu*+UCiAiNpX$-~IK~?X|Ts>p0uk zlkikmll9@9N8j^&>HRl9Lf`oDzxu(CfBLiUe)&hg`0ht7KNWud7bC;>nire=YL>%K zu*tUw6b^`<^EO7$uHI%UCD;h#nx|u+vzxvRJc%?AB5{z#8J*;12}}<|*(~RoC3Z=R zL$mU+c{v9e+$;;km^6AmM_Nv#R)^WPtO_n0sqwAcIoP{`t5E-|U)_Cp|4!ur0Icszzq#}Ol(0_G7yPXs&uY^~VC(5j z3PHKdElUj^)h_e=DbXl5H~Vc9CLQY<;KpD@O`@rty2qxLwtDV0LGt)1X^kiMP&OVu zymRmShj$N;?j3^yhE26ySuY=MR0`z^6sl}Ioy~G~z=aDEI=*Vqk1_ILqk=t|j|Zab zg$zNC3K)k>G#*K3vf*IN_wVUTxHJsT-&^F`x%(b$C%0d8BFJvCNb8GRg^c+LUU& zPEdjsg*mIDXjw@ukR0iFY1!adG>FaON<`%aHTT@t<%L6M&J z{?Wccv8{{TGmS?eE)hD=n)_)3L$V+VjftX7Xh9|s!QA*N&{jHI`gxvrNL;qQd*~sE zz&%9rM7^4kyPNtXqH_SW`YAkO`OBhW2#oPKk}wa>fqtNsi?d6!gl865h74$8#r6AZ z<+Zg^1%FL#_lQgJ!O_lrF|bkIte);wcWSl&tXixdZ||ZR*LDU`F&h6--}u_N-`L$S zBeJ4C@W(G^I7DfqiVo4-I4?#r>QOd+UnGc$2r98nLxQN$(%34bn|@yuIrwTeIa1z6 z$!~!TG4rv;4;MoqANg`0wdCYA8Y$}dk6#eQjejYAQU+^^xU3;b;;1K~#xf`aQ8p{B-N+H4gCGoh$xX-#vR?T79{5aNI_RjD1V*RHNg>Glo-nNDw-n>z2c zg}0B^Vt|E%E5R5m$E4DhudceW+Q)L)Y^_>l5gfBF&o9Wdi<26&i&~B}cv*aTp)fch zj-ECzv5f$WXCq$q6|?xYEZE{9H`xqOR35BLg3SUE)aDnV@NNQ$K{p3umt|C92<11n z*Gg+Kmrgx3Yta+*V5njz&4PuJ_;jVZ#x|qOvT<)`gT3>1Ef*KF0R?v3-a;(m#`+6xireNbX zIWP)L2oZgVg&S4jv-AC3A6~7eeW`eM_xx0NFCn=k+9*&)h6#a4SuzYZ8Ty$`fDQ0I z!n8lhjzI<^QQS|+XXj}dou5I^pu~1`Qif@oJsw=!X=+L#7R`v?Pqqw@V19{o?IQa` zw!);d2d0)N593TQJu5EeIAV+sjgJZ7Rrm;~`xukP!H_P@Y_)GrlVsDw-Jbl`sSDC> zOm1<)b0-cXy3ob-YS0VIm23r=K_*9fl=u|k4R=9cg_i6OLzGH-Iio?2z|u~CGPO!# zB}OzF4H4j22_&M)cqrl(c#FjoKALW$xoiM5u`ia6r;D0XE6<-js~w(PU2GBqxVXI9KYx95^ZM$HzVNdP zcvQD9FE2mbUcdeP`u)3?O<&F&r?1T=q9`80;$fSTNt0*IWY&+5_s&kY%V`e5kep?j zm!?;gHv?Mj>)>QaDKd+-d9ikbwbn557^rkc7y|$7slen=vN8`uY#Mtm64$I!u_U@w zj5^j)HkRO4JD^7msbD{gp>WvivpCXOp+a>iooI>rk$U7A^BDHkl)mqkUlCQgWwr-dsKuvTEe2 zCEeVFO#w8`yZ}L}t9^VKnq$+)+m`0u!Ou;tlK1bv+zQ7p_KxXZCy7@suI`n|Iimr@ z-0=vSsNH}kjiiH4g~3Os(Q22#zsz!3PjdZFd;>OxX8^ z*N>7f@88^fe)IX=%geXI&D-mnv(pQB+xurnhX;Ge7_iY#dW7rr&Gqr|`8ieaJNwnm z!?T^8>d_7Gs@lOe6&$r{WwpG!wOQUMl&a;8()RjxWn*n)r&22BvZZ7uR|45t+S;nF zZfls5=pi2ds%;AZ}f88&g3?Bph?|05;J3YzvqiChxa6iBUHFRyKkA zk(4FWrq*64UlRO5%~)*VDt)EM?h|jwmKHj^x<0gYetL2CY%8W5yeS?pxR2YXrV$

JJI44Ktv+Q06IBpG%_prVte={R~+t`d8%I7=|NHLNj+Q$WWJeb&7?)J1- z!)zgl*|+v}i;d+XdJ0qoyA0_#sa5=&#DT^|Vy9SUz%z~QMQ@9kc;YhPkvoaC4AvhA zV&WP7#7gN29Y^M1D50v66@}OzPMB!4SF|}{Lmng(G9Zxcm%_m6l{Sr+_d);gCZKk4 zgu~n{p*?)>Q?x`+O)M?po1Y<#&ud|N4nhKxrA#M-S_{=#rWJGWD;U$r*VtVC_}0y< z^AB8vNNyiKe`soYLm=j3<7*xT&8_b~ULP`RZ(qK6dHe3=t#Ebl?ETf{OR^qU*F08E zo)z2|2M0Tq=g;>K&QDKw*Y;n(zoCS!wnk~rMro~@s;q9(5>w8{^8xb;t72awx_gjG zZ0>DG3X#I;sy$J~G)zx8OUpt&TP`AvnRQBY)DcbT^&YJyO4i;9k3CaZTiawFC~jqH zwd3{b^Q$6!PZW@dH${9Y?{`FY#Cc#VA0iGKX0%`)sI9v5sY0q$ENt-vtR@*spcoot z(>k-;j@N?cE}|QHG(;irDK4J9K4eyQ4rYguawHbd=7^srN&d3BEPjgsEdXE&iaEz! z497mF*-e4;s6_8elYz&?;58d&=KwPUW5)XAH9KuYOmfUHq1gf!_;>K}rph8&38-TvYtf}R(t?ceAI>+< zG0X!qgVXdEfsjLYoM+dBdjm4}xPY3+MQDt(0K3AI0@kn>H)HO)j z`li%oXlEEzSkKyQC{*4R4Jlwk74Rb1A7M)~QO0et+l+P|Nn)BT5a!Y3#E<}gY=u`d z0Sn?hNUuJ(KV)IN3jvn21IY#-3U1Qvje=JtqTvhkro2N7)rFom z%6E1u@F_#c<>N;EOiCi^9I4Ts(`aQ%=X^M^k(Fy`32(OY$jjiR&CFoL#QhJ?U z(Dg#0T3g#%-==SRtz0aZ_qX%BV2XHg_KI7zt=;3}DrMmmK5TC7Z;7a?y(99ASE%d2 zDxaOyz1-EuN@E_XG5%io`A`4g55D`wFaPL||MbuQ^56aK-~HWR|GU5c+rRjWzx)rN zHAY5vl;?E~O>N?-OWJ{Fj7J$jb*>jeK2j1#Twd@@u=%3UVPJueMhy%&Qj|2dT=TOq zuV?j2g-L~7(7~ohrCVMyEUUTVEl!HrRa(l_GnCR1@rGUoeRJwi8 z^SQD{7=RVniaVD2C14KfdznEWJv!N`dn{=?efae8@$s{r|Ejc`FI7mT6|>P$s1PM9 z0NccApgIa}(~@>st%AHT3$w0eLEvg93x)L7kv+xz>+`{X)T z*9hKLOFQR#ySt^$3TIFrrD=>$Z7yzF|~E_;PI<$f!7M4)G?kx!C-&fnBi>?F5=4Q!S5ld+<3B zTB4yN>~w+VvEcU9L8B*>fixwKb4tO=54K`p)+@g)@H{|CmsMVoO=<$N!lFcPCIiDs zP>gSAoO%!OIgOWFL8CJ)2Y`k-Tm~$qvbklY#*W$3Oby(kd}`!yW|%$d00Bz6liBbx z4KNNg!klQ4d|@Q`f_Ip`7Vv}akFA|w-(KAw<_u%6v(*X9ZVRv)lmO2ByrMa0;2iGb zS-CjLLlLVa;NLE!UEci@Vr$CKIF16Ee}(}6k-kLIWnoO1omzwLwwetYqNhXJJ|IGQ zm;_iBNbyGw^^ap$7pDQCXM6&-rWA36PA|+~(tc9&Y@LbUW9gcq+HhoO`gh|1cFq2N z5n;kJmLCAXZCC^f^^xk3cH+kD9{yjyn_@o%W zAK+O_hMouU-;l%yRfP?XCL>}8nnfP8%gggP_zW2Js7Uic(=*%s)ti?WA3sYzf02B7 z_vyXR^a^nKm!@}DS05xTZ$7+!c0u6l`t{qFAK$+fs`>KnIx(?)rBY3aotlApBJW9m zp%^D6l#d0HwT;qxHWLY8D@z1}@fEbQcnUwU)khp-#cS1AOzDi%7EQz~K8wHPms>;h z5m26~rPIT1^?LOx^%6yp)+N1dW>z!1WY$?sYUR?Bg+o$E2yo_t)fo5qvN@aj|9-qc z@r#BGu+ObtGQ?9}6No|j3#jwZT1R9Q!zi#LSuiD2r|b8b%*(UALvJAaStHfSDx3r{L zUeqX63vG8M)HZx?D;|@2VR2|!xu{%PP$?*onOT~n37rrN@&>;Z-VScg4*XtiYPpPF z8Z4Dc1pp$okq^d}TaArW@kINAvDtM&MCTE`!A(t;+27dIx$jNsNtj^$sH>4&z?{Ai=_W zWEd_HonDxxhdKwiM-cb=*$|+EfWMalcoS&H<*~{J05Q7 zKm5)2_a4@FjV)*l>Sf{@Dy>?xEZ3Oyka4K@HmOzOVix@a&m`KGZdt@s5$`bAT?W0` zsIlT_Co`cT41@teG$NqmIvci;W&XFvNXW5LgV^3z}Z z;=5n`;s2tM%iB6)#={4X#SoKv|N72v z%B!_(xDez-jLn1&N_)iJ_N0DkXEIEF;mTL1f}dsnXMC zyeyOHl#7chnPO>jetxNr0H?_eNm8lBL9S59m%k}fuzQzzvZ|HhGZ4|3dk(c~MhSmK zZjviiGjkRKaw;WVd2@hDc|TDaPFFlq?wods5l}f}RI7|ImnSW1;O5%JS^4bvFoy~a z2Mjs>8?3e6>qAmj|J^)<07SJn!uxy*^0N+wqp|*VJw+Shm*~Y1+FwiB-rcakPU=Qq zCUX7COdV9|KJ-$?3Fe7@mRV>~-Mte70`M?Nqu4?v@S%s;rb7Jd?Cc|S23oCi2(kpv zM#2@y!bB-BUDk)?Xd=kUjRZ?bF*UcgH`5Q+)z;nKPnx5XdZZR61d&fBg;@%N8uKRY z8!au+19@UoxQREti`{LTAZcsl&S`J|CU(#<*2UqiPmFAIv~+j%!jA-U%1}-k+`xDJ{Nye!JJ!FMN2rw|Ts`eOx&`y?t?c zb@lG;>B0UE%LX8>VJFo$_`>q*S*uPPUyph+Zfj(-6pbBk`2tp7#u#RImEVAk?TceY zv;;t6nzSYtDLj`IE1TBJku&0(lDSh!de?>WMlBm%+u5p~AKYFRwWl^yb~PSQ8LSGm z%bhB&XML7fEa#2KsnxTaGaI#(C+JUxR^kOZb5~qS0+};Lt0$b!CcT8(ao}T|=RZ-= z>xK)@Y=lFOJrj2vxlnh|8^m5`w^%tr;aqZB!Si69bBnQ7+$OVCO*y7^X>rLwU!)}zL|jcfeC0G;!$>T*y}w(lRcqTDJDYn+9GmG(A{;P<+<2B2 z7bg`&4$ZDmG=yYM^en?hBh3CWm+}L@b@^j#&;@5S0kg$pQ7svY$ss95M^*wvB*sJo za{ut`G+2i@iYbN%XXT)OrpHG*x%+TDF!``a9Yr@}-;2EgL9(ZZt%G>KF!^+Ki17<> zm*lYsGY>Lk^!Cu$L4Li3yWg+*5@6aBPybo|b>)P%M4@CHEMd%9lAigu+?cT6EX0->LkqAi%GvrLMsoUdA(Pf;D`cbwM zJk)7e_98+6e2B#2ema*xRNy*_VA>2jqSSH_3v{Qxb#5fX$#66l>up(A8!V#vH|WL4 z?r=L`UttguNIRH)F2HCW=!^7wP$T0fhZ711$p3i!9MY(X4f4x$<6*N0!w4@HkQ7dc ztey~IRT@}KR6RzCm4-}9y)w#xOIyiOI!`z;nkr?=G-H>GA{H-Q$gY=>&`N9D+b<5* zDjT`W-Q8VbwNlt992^~0clY=9>B9zHuzj>aCg9}e=K1x_^XF$b&(B_7fBMLmU%dQq zdv^8e^~;wx*PlPW=Ko$?zkU0DPczzC_E^JKM~I+QB9Y93=G?t{^Wx>Z^W9QD8r`~i zCzO|)PN4pEfAa)kIPdPq#m)gsfcuLFXKG{s%J3AkDD-p+#h2;C;~22Oy9+=GJ$WD& zRTh&`rUHep5@klXETXx^jzQT=S0#ZLyFVAgXW~h$L|0@B^AaKKa;`?-4y(+C+qduE zef;pLS&)!`9`0hRj4Se+dNM1J7MfpD=tma~q_wn4Qz5Rl**7ZTjiiE|L)Par(Fe0Q zwq%V27tF(>T2kJ_WCPlV#~1qEzrX@;BWcIT{z3AdPz!%*XLOis?rc=@3>6;ZrP1XG zatWDuXa%Auk6M+1K05pcB54EE#*_dkbZ}x2>5p5kmpJ422th>A!9vuKkKBxxQ1VrH z|MkP$w;x}9dhzl6)5n)DuWsL5J=;6JINV*|+&y(BB3i)s*wKCD1Gimgxj{^%fR99AaE@&HUd02qMaRIAhrFOt*=pGr1#AC^1 zBpMHRBd!AJi?9p#2TV7N??`o?C}E`};-EL<5hxRKbNe|7zKSEbk8l%h8eaWMP{e!& zy1meX*)G9$j4K#g5OgK5X@?AbL3`0WPW;J1J^IB{!vs~r*FgZXWAtxp52qK;m z9}d>drmx~rtnnReXqYIC9WBDm(Yj-KP+0dJOgN95hXGInY!EG&bS<;z6%CH_m@4Tg zSm0A7)*6n?awtMMQZYU>Kshh#KUkilFtmmS#oXRt*M4QNeT1zqlQP+isRcgNRR7qR zn1-7K5J&`WiBm5#$`DUw&f}tx2n|p!lc|9taCBn1YIl)WqgJS#@`OUs>IJWG2+eIR zREjo#5dMqC&mZ61ewH-7efj$G^!V`n zY$LnvoU-n|y?J(Z_5S_o-v0hpVW*HQ#oe3hYy0II{$l7PscJk_^w=VsYsu8{PAu+? zkAmreI)0-f!m zMN-UTB8(6of*sM@O~E~B3tEu7daze^*54dfgqW2beX_i9e(@0)3tAriqJ8Qy;F!$D z3=hBs*rtsRiNG`{X;UN8ZUESmyt^?bgRvYNo?|Ehs7$~PA`$im)8cn7K+Rl1D4GUz#j{V&gAB8%SE-~vj>fcM1DVUCOu0fx6{R5FN%jP>RZ84 z8*;4#i0z9d907uz&?ON&oL;|QCzfpR$v5#Zqe&xR4e_c6apppO^7-59%A5ySQ;Db| z-s}#(8-{m_-RU=z<%n?U5dU`}=|j27`mb zQkNg2rp<0K08I^f;{iYC%%(}QB&!<{GKAoV0`L|y!E6pyBbOARiFqIt=7o^9p| ztFgmMwUW*!%gN2{tpb%f8ynl}l^W)w)y?hg?UUn!qtk=K-P6N;@|#zOhr7pT&kuR+ zoSvK<9^6p+bai}k@a)<1%t*^UuSP!l$HFiF=#PF0U;CGT_{abDFaQ1D{ZIen|M2(! z@DG3eZ~y#nR@Q32bq_t+;+)O_jwJ=%nc#rChw(JPVn^5?>FcIMV3bTe8ZFqg`I#Ap zh3QG2xrC08e{q;o?5UhyP$FZo$g``o79DgLozh9y4Ga%%QJWB5;l4Em;2wrDVEX2uu%j%m3(6f!4P zxWcB~I?a41YvY~~xmn-8(AGK2DYUg&sH^Mj9hMwyKYa3J=ke2rj~|^rI;m2fDSRb0KmKsVNZT940&P{&DLe#}l8H_5f07 zXlUZV{Zyd3vF`EXC%2EEy(CR{eSUj-yL)?cdU}AWLFe<{#(J(ysc5lW-P*Q#hK1_E z-uB+k?!i8@01uVb;_hZ`ljV$;h^N&5<-%^0DA!D=QfI zR9Lj?mWBaFTwtqYjm=JDg!$EpcUdgS!Wf3b%OnC`xU!w500|E9mIO&}ap(<76%&O` z!$WULXVcrw4u{#Hb0`chDtK|N8}w)%_8_4(;=CZd%?cgm&2UN7iUqmSq7>8y<@BQY z`Dh<@U~yy6K}~2&n?%BKUm|>gMlBIONj`(G>=e4%THc>;d9-6yN2Oo4(Ll=(J;_63 z6NDv(hC!uKh%q`dG&n}!eTK^IQEcIZlf1th#sSiR2G^!>f-U`|wn^(bkSnMEJry@IesXyn1teadvWXLDW-tEz~N7aIsR|UoR%(3DA&f z;eY>iWj#)f9c;!VCzRE4X>+@fN~aRuIN(yd2F^PThn$79%W`Mbp>Zrs8{#3WH5;?o zwHBWo)~|&_lhcS!Vq}3o)`f*FL{Xtwy9_ zO=^_b{U})*nZ*INtTP%t1O+fy+Z_fC&~J+YJ2bv9wMITKOfM^O2F#2~yGL!trbgb} z$Pg^~dB;RNLBS-VsBOV`W%D@^x7IdEduw-_ zO43S9ggqK06asv-nzM4?{s2A2E|0YuJXTE16fpsH8y=yphHnyS+QX>YBF~i&{UpZB zF0NTTM6CE&GIDpI)zNQ0DD7YlAMC+{F*^Dma2oaX6K+D$VCLp~4oX{#!sEwvsciWF zx^t&}Xl4%mNevoIWIQNT%Sr{VdN8dTm3mQO1P!J`^0H_gN|jMfKRBOYaeHet>I`NN zeHN4`qHplvVy(d2$4G92wzg z2P5*Wo@0#4=3oRDNqc-iI96mZ^mtP&4j;M(>}sn4s*hEt)-z>-@Y5S~Rvj4)gkSZ3&jMaajNEf%BEEt<{j zQ#hUSZ)EeiV9b{aa&smiLaefv%oXC9a&om)TCHtz?8N-ASy|iLIy$V84cs}{DA%^P zx3)GmP6SvaN1QbG_xBxj4}N8k&-eZG$3OYWPk#DS{`Chx{qDP8{^2iv_TA5a`Q6Wc z{%b{d^qxG0F((4^ea+s^+W1-CWPu-t=uHG)#ikw|8LTcR;_H*s^9y`v*W)0|a_ zyS-Npwz!daQhmqJ++5p8-P3`(y2i(k?tTATkoqLCOwvTr=dHEmI4vPDG)mpi-y(SbBc%b9KSUfEPU~+k# zUJ@^th{2cE%H>?Dn2kgJ&C~2x+uX>8shSTbqV5=lvEt^_jejcyIvS8ZrShqGJRHMS z==Vn=0R3T}1ntmRft~p5{;;2*2AtIuyS($hb$n#Xe%3z9y&=E`*f`+$_mw zsjpRP7N-@8@kQl=O0Gcyo>xsS>S52yQI8jlDw*0!u@MhGVOh1H;A9I3hKM)x#pz{; zFjIr$+O0uy5i|}Fg=uAvEoo?IZV~G1UbEh=uX|Dd3Wih5)7GZO7bjJxZn$DiwJ+u# zP#g3ue*qf-ORL!6MYtBP1Zr+Syx$&bnA$q}35m8)@Qpyw*#i`>YiPKQBpH?5WH#Ca zf)+gLm_kS*bvB-kJ?(GlY$x>5j(XPC-qhC8ArM|-6ovOI{uq7^oDS4?b+azOv)I|) zCrWzsl=BG0G6sLL1G-;FV{=0TK$32;w+>7MMM{hpJ$(YE7-<(gD|C=Hm{$aW`DX|@ zxwqpeQ}>_+{27|d5SNXzxTVAjYGP@=TR~ENDZU>;8sz^Xb>C2|53+Sg@)jw_e%UYtCC`|k3^^No|EjXaK^ zc*36#MRr%$D84e-%B5Pal5wU|*$fWN9jv)tYs#03xl`^CK`Ea<J>+d+qG5}cnED)%d`LwNar*(a@Z_k&zzyIiG{ zv^$(Y4hbTBk#o)&=x#I`-ROu8=-lX>GdedyBPS9}!{H2P#;-3&=TgmzLlPi3=>B}) zpZD`TuLnP;GZVIPK;sWFY++%LNJxgHVlna-VY&{SKCvnqx!Mh9ne{}_Z8e)oVo_9P z#d&8H8>J~Iv;a&F;uykHWHbvVT**YVu+@2NSn8dCB{aKwaGw+X8rn`%xv1B+A)zc_ zeo;jTAd~`A@3h2;f5&lHrc1{#YfAhj8dtX!WQsb*QywH%r`G^QfcKz6g|XA%@&!Y= zax9n665W79;ZLO@gnP-^3$W|~c$0gy`YqkFs|yR9;LCGxrgTfB$N|ahSQ{|ptz2XV3&YXO-hugJ->;u zU;*0^&R{XaK?Gw;V4XJ7^Y!!lt8$8f!d~&>=GD8=z49pT2q>A@i07vGkoiT)G}GET zmdP1Tllj%f6%q4-QFwX`wiP}L>O5sI_f`pOtV&in`5@SffaRqX2rc{uZ2I(qZp

S?bBC0Dilm=cRfW1 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
f-LBzi3{05;WH9u^5U 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 vK()`(u1>p&hA)S-a-a*?28 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 z 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

R=C6~us=^PEjzo+ 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