From 6ffa80c3869da16e023763b2f3a34eec1694392c Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com.> Date: Mon, 27 May 2024 16:31:00 +0100 Subject: [PATCH] changes --- build.gradle | 8 +- cucumber/exampleFiles/example.docx | Bin 0 -> 6499 bytes cucumber/exampleFiles/example.odp | Bin 0 -> 10371 bytes cucumber/exampleFiles/example.odt | Bin 0 -> 8222 bytes cucumber/exampleFiles/example.pptx | Bin 0 -> 37394 bytes cucumber/exampleFiles/example.rtf | 158 +++++++++++++++ cucumber/features/examples.feature | 136 ++----------- cucumber/features/external.feature | 184 ++++++++++++++++++ cucumber/features/general.feature | 95 +++++++++ cucumber/features/steps/step_definitions.py | 49 ++++- gradle/wrapper/gradle-wrapper.properties | 2 +- .../SPDF/controller/api/MergeController.java | 4 +- .../controller/api/PdfOverlayController.java | 4 +- .../controller/api/SplitPDFController.java | 2 +- .../api/SplitPdfBySectionsController.java | 7 +- .../api/converters/ConvertWebsiteToPDF.java | 2 +- .../api/misc/AutoSplitPdfController.java | 2 +- .../controller/api/misc/StampController.java | 8 +- .../api/security/WatermarkController.java | 6 +- .../software/SPDF/utils/GeneralUtils.java | 4 +- .../resources/templates/misc/ocr-pdf.html | 2 +- 21 files changed, 526 insertions(+), 147 deletions(-) create mode 100644 cucumber/exampleFiles/example.docx create mode 100644 cucumber/exampleFiles/example.odp create mode 100644 cucumber/exampleFiles/example.odt create mode 100644 cucumber/exampleFiles/example.pptx create mode 100644 cucumber/exampleFiles/example.rtf create mode 100644 cucumber/features/external.feature create mode 100644 cucumber/features/general.feature diff --git a/build.gradle b/build.gradle index 4c4bfaaf7c..0b3c26da6a 100644 --- a/build.gradle +++ b/build.gradle @@ -94,7 +94,13 @@ dependencies { implementation("io.github.pixee:java-security-toolkit:1.1.3") implementation 'org.yaml:snakeyaml:2.2' - implementation 'org.springframework.boot:spring-boot-starter-web:3.2.4' + + // Exclude Tomcat and include Jetty + implementation('org.springframework.boot:spring-boot-starter-web:3.2.4') { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' + } + implementation 'org.springframework.boot:spring-boot-starter-jetty:3.2.4' + implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.2.4' if (System.getenv('DOCKER_ENABLE_SECURITY') != 'false') { diff --git a/cucumber/exampleFiles/example.docx b/cucumber/exampleFiles/example.docx new file mode 100644 index 0000000000000000000000000000000000000000..7d2981d6807d50603c1dea3226b8dcc3e31504d0 GIT binary patch literal 6499 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 literal 0 HcmV?d00001 diff --git a/cucumber/exampleFiles/example.odp b/cucumber/exampleFiles/example.odp new file mode 100644 index 0000000000000000000000000000000000000000..a154af7b2a309341c96b7749a27543f82e9cc14e GIT binary patch literal 10371 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 literal 0 HcmV?d00001 diff --git a/cucumber/exampleFiles/example.pptx b/cucumber/exampleFiles/example.pptx new file mode 100644 index 0000000000000000000000000000000000000000..fdecfb862416498cd7987ef009c0e793c704214d GIT binary patch literal 37394 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 literal 0 HcmV?d00001 diff --git a/cucumber/exampleFiles/example.rtf b/cucumber/exampleFiles/example.rtf new file mode 100644 index 0000000000..4aa19a5dfc --- /dev/null +++ b/cucumber/exampleFiles/example.rtf @@ -0,0 +1,158 @@ +{\rtf1\ansi\ansicpg1252\uc0\stshfdbch0\stshfloch0\stshfhich0\stshfbi0\deff0\adeff0{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f2\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}}{\colortbl;\red0\green0\blue0;\red67\green67\blue67; +\red102\green102\blue102;}{\stylesheet{\s0\snext0\sqformat\spriority0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1 Normal;}{\s1\sbasedon0\snext0\styrsid15694742 +\sqformat\spriority0\keep\keepn\fi0\sb400\sa120\aspalpha\aspnum\adjustright\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl240\slmult1\rtlch\ab0\ai0\af2\afs40\ltrch\b0\i0\fs40\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1 heading 1;}{\s2\sbasedon0\snext0\styrsid15694742 +\sqformat\spriority0\keep\keepn\fi0\sb360\sa120\aspalpha\aspnum\adjustright\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl240\slmult1\rtlch\ab0\ai0\af2\afs32\ltrch\b0\i0\fs32\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1 heading 2;}{\s3\sbasedon0\snext0\styrsid15694742 +\sqformat\spriority0\keep\keepn\fi0\sb320\sa80\aspalpha\aspnum\adjustright\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl240\slmult1\rtlch\ab0\ai0\af2\afs28\ltrch\b0\i0\fs28\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf2 heading 3;}{\s4\sbasedon0\snext0\styrsid15694742 +\sqformat\spriority0\keep\keepn\fi0\sb280\sa80\aspalpha\aspnum\adjustright\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl240\slmult1\rtlch\ab0\ai0\af2\afs24\ltrch\b0\i0\fs24\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf3 heading 4;}{\s5\sbasedon0\snext0\styrsid15694742 +\sqformat\spriority0\keep\keepn\fi0\sb240\sa80\aspalpha\aspnum\adjustright\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl240\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf3 heading 5;}{\s6\sbasedon0\snext0\styrsid15694742 +\sqformat\spriority0\keep\keepn\fi0\sb240\sa80\aspalpha\aspnum\adjustright\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl240\slmult1\rtlch\ab0\ai\af2\afs22\ltrch\b0\i\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf3 heading 6;}{\*\cs10\additive\ssemihidden\spriority0 Default Paragraph Font; +}{\*\ts11\tsrowd\snext11\ssemihidden\spriority0\aspalpha\aspnum\adjustright\ltrpar\li0\lin0\ri0\rin0\ql\faauto\tsvertalt\tsbrdrl\tsbrdrr\tsbrdrt\tsbrdrb\tsbrdrdgr\tsbrdrdgl\tsbrdrh\tsbrdrv\trpaddl108\trpaddfl3\trwWidthB0\trftsWidthB3\trpaddt0\trpaddft3\trpaddb0 +\trpaddfb3\trpaddr108\trpaddfr3 Normal Table;}{\s15\sbasedon0\snext15\styrsid15694742\sqformat\spriority0\keep\keepn\fi0\sb0\sa60\aspalpha\aspnum\adjustright\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl240\slmult1\rtlch\ab0\ai0\af2\afs52\ltrch\b0\i0\fs52\loch\af2 +\dbch\af2\hich\f2\strike0\ulnone\cf1 Title;}{\s16\sbasedon0\snext16\styrsid15694742\sqformat\spriority0\keep\keepn\fi0\sb0\sa320\aspalpha\aspnum\adjustright\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl240\slmult1\rtlch\ab0\ai0\af2\afs30\ltrch\b0\i0\fs30 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf3 Subtitle;}}{\*\rsidtbl\rsid10976062\rsid13249109}{\*\generator Aspose.Words for Java 23.4.0;}{\info\version1\edmins0\nofpages1\nofwords0\nofchars0\nofcharsws0}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0{ +\mmathPr\mbrkBin0\mbrkBinSub0\mdefJc1\mdispDef1\minterSp0\mintLim0\mintraSp0\mlMargin0\mmathFont0\mnaryLim1\mpostSp0\mpreSp0\mrMargin0\msmallFrac0\mwrapIndent1440\mwrapRight0}\deflang1033\deflangfe2052\adeflang1025\jexpand\showxmlerrors1\validatexml1{ +\*\wgrffmtfilter 013f}\viewkind1\viewscale100\fet0\ftnbj\aenddoc\ftnrstcont\aftnrstcont\ftnnar\aftnnrlc\widowctrl\nospaceforul\nolnhtadjtbl\alntblind\lyttblrtgr\dntblnsbdb\noxlattoyen\wrppunct\nobrkwrptbl\expshrtn\snaptogridincell\asianbrkrule\htmautsp\noultrlspc +\useltbaln\splytwnine\ftnlytwnine\lytcalctblwd\allowfieldendsel\lnbrkrule\nouicompat\nofeaturethrottle1\utinl\formshade\nojkernpunct\dghspace180\dgvspace180\dghorigin1800\dgvorigin1440\dghshow1\dgvshow1\dgmargin\pgbrdrhead\pgbrdrfoot\rsidroot10976062\sectd\sectlinegrid360\pgwsxn12240\pghsxn15840\marglsxn1440\margrsxn1440\margtsxn1440\margbsxn1440\guttersxn0\headery720\footery720\colsx720\ltrsect\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar +\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\alang1025\afs22\ltrch\b0\i0\fs22\lang1033\langnp1033\langfe1033\langfenp1033\loch\af2\dbch\af2 +\hich\f2\strike0\ulnone\cf1 A}{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar +\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par} +\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0 +\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0 +\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0 +\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par} +\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0 +\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0 +\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0 +\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par} +\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0 +\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0 +\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0 +\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par} +\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0 +\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0 +\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0 +\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par} +\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0 +\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0 +\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0 +\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\alang1025\afs22\ltrch\b0\i0\fs22\lang1033\langnp1033\langfe1033\langfenp1033\loch\af2 +\dbch\af2\hich\f2\strike0\ulnone\cf1 B}{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar +\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard +\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0 +\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0 +\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0 +\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par} +\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0 +\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0 +\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0 +\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par} +\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0 +\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0 +\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0 +\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par} +\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0 +\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0 +\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0 +\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par} +\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0 +\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0 +\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0 +\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0 +\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2 +\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw +\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par} +\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22 +\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}\pard\plain\itap0\s0\ilvl0\fi0\sb0\sa0\aspalpha\aspnum\adjustright\brdrt\brdrl\brdrb +\brdrr\brdrbtw\brdrbar\widctlpar\ltrpar\li0\lin0\ri0\rin0\ql\faauto\sl276\slmult1\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1{\rtlch\ab0\ai0\af2\alang1025\afs22\ltrch\b0\i0\fs22\lang1033\langnp1033\langfe1033\langfenp1033 +\loch\af2\dbch\af2\hich\f2\strike0\ulnone\cf1 C}{\rtlch\ab0\ai0\af2\afs22\ltrch\b0\i0\fs22\loch\af2\dbch\af2\hich\f2\insrsid10976062\strike0\ulnone\cf1\par}{ +\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef0{\lsdlockedexcept\lsdqformat1 Normal;\lsdqformat1 heading 1;\lsdsemihidden1\lsdunhideused1\lsdqformat1 heading 2;\lsdsemihidden1\lsdunhideused1\lsdqformat1 heading 3; +\lsdsemihidden1\lsdunhideused1\lsdqformat1 heading 4;\lsdsemihidden1\lsdunhideused1\lsdqformat1 heading 5;\lsdsemihidden1\lsdunhideused1\lsdqformat1 heading 6;\lsdsemihidden1\lsdunhideused1\lsdqformat1 heading 7;\lsdsemihidden1\lsdunhideused1\lsdqformat1 heading 8; +\lsdsemihidden1\lsdunhideused1\lsdqformat1 heading 9;\lsdsemihidden1\lsdunhideused1\lsdqformat1 caption;\lsdqformat1 Title;\lsdqformat1 Subtitle;\lsdqformat1 Strong;\lsdqformat1 Emphasis;\lsdsemihidden1\lsdpriority99 Placeholder Text;\lsdqformat1\lsdpriority1 No Spacing; +\lsdpriority60 Light Shading;\lsdpriority61 Light List;\lsdpriority62 Light Grid;\lsdpriority63 Medium Shading 1;\lsdpriority64 Medium Shading 2;\lsdpriority65 Medium List 1;\lsdpriority66 Medium List 2;\lsdpriority67 Medium Grid 1;\lsdpriority68 Medium Grid 2; +\lsdpriority69 Medium Grid 3;\lsdpriority70 Dark List;\lsdpriority71 Colorful Shading;\lsdpriority72 Colorful List;\lsdpriority73 Colorful Grid;\lsdpriority60 Light Shading Accent 1;\lsdpriority61 Light List Accent 1;\lsdpriority62 Light Grid Accent 1;\lsdpriority63 Medium Shading 1 Accent 1; +\lsdpriority64 Medium Shading 2 Accent 1;\lsdpriority65 Medium List 1 Accent 1;\lsdsemihidden1\lsdpriority99 Revision;\lsdqformat1\lsdpriority34 List Paragraph;\lsdqformat1\lsdpriority29 Quote;\lsdqformat1\lsdpriority30 Intense Quote;\lsdpriority66 Medium List 2 Accent 1; +\lsdpriority67 Medium Grid 1 Accent 1;\lsdpriority68 Medium Grid 2 Accent 1;\lsdpriority69 Medium Grid 3 Accent 1;\lsdpriority70 Dark List Accent 1;\lsdpriority71 Colorful Shading Accent 1;\lsdpriority72 Colorful List Accent 1;\lsdpriority73 Colorful Grid Accent 1; +\lsdpriority60 Light Shading Accent 2;\lsdpriority61 Light List Accent 2;\lsdpriority62 Light Grid Accent 2;\lsdpriority63 Medium Shading 1 Accent 2;\lsdpriority64 Medium Shading 2 Accent 2;\lsdpriority65 Medium List 1 Accent 2;\lsdpriority66 Medium List 2 Accent 2; +\lsdpriority67 Medium Grid 1 Accent 2;\lsdpriority68 Medium Grid 2 Accent 2;\lsdpriority69 Medium Grid 3 Accent 2;\lsdpriority70 Dark List Accent 2;\lsdpriority71 Colorful Shading Accent 2;\lsdpriority72 Colorful List Accent 2;\lsdpriority73 Colorful Grid Accent 2; +\lsdpriority60 Light Shading Accent 3;\lsdpriority61 Light List Accent 3;\lsdpriority62 Light Grid Accent 3;\lsdpriority63 Medium Shading 1 Accent 3;\lsdpriority64 Medium Shading 2 Accent 3;\lsdpriority65 Medium List 1 Accent 3;\lsdpriority66 Medium List 2 Accent 3; +\lsdpriority67 Medium Grid 1 Accent 3;\lsdpriority68 Medium Grid 2 Accent 3;\lsdpriority69 Medium Grid 3 Accent 3;\lsdpriority70 Dark List Accent 3;\lsdpriority71 Colorful Shading Accent 3;\lsdpriority72 Colorful List Accent 3;\lsdpriority73 Colorful Grid Accent 3; +\lsdpriority60 Light Shading Accent 4;\lsdpriority61 Light List Accent 4;\lsdpriority62 Light Grid Accent 4;\lsdpriority63 Medium Shading 1 Accent 4;\lsdpriority64 Medium Shading 2 Accent 4;\lsdpriority65 Medium List 1 Accent 4;\lsdpriority66 Medium List 2 Accent 4; +\lsdpriority67 Medium Grid 1 Accent 4;\lsdpriority68 Medium Grid 2 Accent 4;\lsdpriority69 Medium Grid 3 Accent 4;\lsdpriority70 Dark List Accent 4;\lsdpriority71 Colorful Shading Accent 4;\lsdpriority72 Colorful List Accent 4;\lsdpriority73 Colorful Grid Accent 4; +\lsdpriority60 Light Shading Accent 5;\lsdpriority61 Light List Accent 5;\lsdpriority62 Light Grid Accent 5;\lsdpriority63 Medium Shading 1 Accent 5;\lsdpriority64 Medium Shading 2 Accent 5;\lsdpriority65 Medium List 1 Accent 5;\lsdpriority66 Medium List 2 Accent 5; +\lsdpriority67 Medium Grid 1 Accent 5;\lsdpriority68 Medium Grid 2 Accent 5;\lsdpriority69 Medium Grid 3 Accent 5;\lsdpriority70 Dark List Accent 5;\lsdpriority71 Colorful Shading Accent 5;\lsdpriority72 Colorful List Accent 5;\lsdpriority73 Colorful Grid Accent 5; +\lsdpriority60 Light Shading Accent 6;\lsdpriority61 Light List Accent 6;\lsdpriority62 Light Grid Accent 6;\lsdpriority63 Medium Shading 1 Accent 6;\lsdpriority64 Medium Shading 2 Accent 6;\lsdpriority65 Medium List 1 Accent 6;\lsdpriority66 Medium List 2 Accent 6; +\lsdpriority67 Medium Grid 1 Accent 6;\lsdpriority68 Medium Grid 2 Accent 6;\lsdpriority69 Medium Grid 3 Accent 6;\lsdpriority70 Dark List Accent 6;\lsdpriority71 Colorful Shading Accent 6;\lsdpriority72 Colorful List Accent 6;\lsdpriority73 Colorful Grid Accent 6; +\lsdqformat1\lsdpriority19 Subtle Emphasis;\lsdqformat1\lsdpriority21 Intense Emphasis;\lsdqformat1\lsdpriority31 Subtle Reference;\lsdqformat1\lsdpriority32 Intense Reference;\lsdqformat1\lsdpriority33 Book Title;\lsdsemihidden1\lsdunhideused1\lsdpriority37 Bibliography; +\lsdsemihidden1\lsdunhideused1\lsdqformat1\lsdpriority39 TOC Heading;}}} \ No newline at end of file diff --git a/cucumber/features/examples.feature b/cucumber/features/examples.feature index c18e0516cd..04e4081fa6 100644 --- a/cucumber/features/examples.feature +++ b/cucumber/features/examples.feature @@ -1,5 +1,7 @@ +@example Feature: API Validation + @positive @password Scenario: Remove password Given I generate a PDF file as "fileInput" And the pdf contains 3 pages @@ -12,7 +14,8 @@ Feature: API Validation And the response file should have size greater than 0 And the response PDF is not passworded And the response status code should be 200 - + + @negative @password Scenario: Remove password wrong password Given I generate a PDF file as "fileInput" And the pdf contains 3 pages @@ -24,6 +27,7 @@ Feature: API Validation Then the response status code should be 500 And the response should contain error message "Internal Server Error" + @positive @info Scenario: Get info Given I generate a PDF file as "fileInput" When I send the API request to the endpoint "/api/v1/security/get-info-on-pdf" @@ -31,6 +35,7 @@ Feature: API Validation And the response file should have size greater than 100 And the response status code should be 200 + @positive @password Scenario: Add password Given I generate a PDF file as "fileInput" And the pdf contains 3 pages @@ -43,6 +48,7 @@ Feature: API Validation And the response PDF is passworded And the response status code should be 200 + @positive @password Scenario: Add password with other params Given I generate a PDF file as "fileInput" And the pdf contains 3 pages @@ -59,7 +65,7 @@ Feature: API Validation And the response PDF is passworded And the response status code should be 200 - + @positive @watermark Scenario: Add watermark Given I generate a PDF file as "fileInput" And the pdf contains 3 pages @@ -76,18 +82,8 @@ Feature: API Validation Then the response content type should be "application/pdf" And the response file should have size greater than 100 And the response status code should be 200 - - - - Scenario: Repair PDF - Given I generate a PDF file as "fileInput" - When I send the API request to the endpoint "/api/v1/misc/repair" - Then the response content type should be "application/pdf" - And the response file should have size greater than 0 - And the response status code should be 200 - - + @positive Scenario: Remove blank pages Given I generate a PDF file as "fileInput" And the pdf contains 3 blank pages @@ -100,80 +96,8 @@ Feature: API Validation And the response file should have size greater than 0 And the response PDF should contain 0 pages And the response status code should be 200 - - @ocr - Scenario: Process PDF with OCR - Given I generate a PDF file as "fileInput" - And the request data includes - | parameter | value | - | languages | eng | - | sidecar | false | - | deskew | true | - | clean | true | - | cleanFinal | true | - | ocrType | Normal | - | ocrRenderType | hocr | - | removeImagesAfter| false | - When I send the API request to the endpoint "/api/v1/misc/ocr-pdf" - Then the response content type should be "application/pdf" - And the response file should have size greater than 0 - And the response status code should be 200 - @ocr - Scenario: Process PDF with text and OCR with type normal - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text - And the request data includes - | parameter | value | - | languages | eng | - | sidecar | false | - | deskew | true | - | clean | true | - | cleanFinal | true | - | ocrType | Normal | - | ocrRenderType | hocr | - | removeImagesAfter| false | - When I send the API request to the endpoint "/api/v1/misc/ocr-pdf" - Then the response status code should be 500 - - @ocr - Scenario: Process PDF with OCR - Given I generate a PDF file as "fileInput" - And the request data includes - | parameter | value | - | languages | eng | - | sidecar | false | - | deskew | true | - | clean | true | - | cleanFinal | true | - | ocrType | Force | - | ocrRenderType | hocr | - | removeImagesAfter| false | - When I send the API request to the endpoint "/api/v1/misc/ocr-pdf" - Then the response content type should be "application/pdf" - And the response file should have size greater than 0 - And the response status code should be 200 - - @ocr - Scenario: Process PDF with OCR with sidecar - Given I generate a PDF file as "fileInput" - And the request data includes - | parameter | value | - | languages | eng | - | sidecar | true | - | deskew | true | - | clean | true | - | cleanFinal | true | - | ocrType | Force | - | ocrRenderType | hocr | - | removeImagesAfter| false | - When I send the API request to the endpoint "/api/v1/misc/ocr-pdf" - Then the response content type should be "application/octet-stream" - And the response file should have extension ".zip" - And the response file should have size greater than 0 - And the response status code should be 200 - - + @positive @flatten Scenario: Flatten PDF Given I generate a PDF file as "fileInput" And the request data includes @@ -184,6 +108,7 @@ Feature: API Validation And the response file should have size greater than 0 And the response status code should be 200 + @positive @metadata Scenario: Update metadata Given I generate a PDF file as "fileInput" And the request data includes @@ -202,41 +127,4 @@ Feature: API Validation And the response PDF metadata should include "Title" as "Sample Title" And the response status code should be 200 - @libre - Scenario: Convert PDF to DOCX - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text - And the request data includes - | parameter | value | - | outputFormat | docx | - When I send the API request to the endpoint "/api/v1/convert/pdf/word" - Then the response status code should be 200 - And the response file should have size greater than 100 - And the response file should have extension ".docx" -# And the response DOCX should contain 3 pages - - @libre - Scenario: Convert PDF to ODT - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text - And the request data includes - | parameter | value | - | outputFormat | odt | - When I send the API request to the endpoint "/api/v1/convert/pdf/word" - Then the response status code should be 200 - And the response file should have size greater than 100 - And the response file should have extension ".odt" -# And the response ODT should contain 3 pages - - @libre - Scenario: Convert PDF to DOC - Given I generate a PDF file as "fileInput" - And the pdf contains 3 pages with random text - And the request data includes - | parameter | value | - | outputFormat | doc | - When I send the API request to the endpoint "/api/v1/convert/pdf/word" - Then the response status code should be 200 - And the response file should have extension ".doc" - And the response file should have size greater than 100 -# And the response DOC should contain 3 pages \ No newline at end of file + \ No newline at end of file diff --git a/cucumber/features/external.feature b/cucumber/features/external.feature new file mode 100644 index 0000000000..bf6ca9dd91 --- /dev/null +++ b/cucumber/features/external.feature @@ -0,0 +1,184 @@ +Feature: API Validation + + + @libre @positive + Scenario: Repair PDF + Given I generate a PDF file as "fileInput" + When I send the API request to the endpoint "/api/v1/misc/repair" + Then the response content type should be "application/pdf" + And the response file should have size greater than 0 + And the response status code should be 200 + + + @ocr @positive + Scenario: Process PDF with OCR + Given I generate a PDF file as "fileInput" + And the request data includes + | parameter | value | + | languages | eng | + | sidecar | false | + | deskew | true | + | clean | true | + | cleanFinal | true | + | ocrType | Normal | + | ocrRenderType | hocr | + | removeImagesAfter| false | + When I send the API request to the endpoint "/api/v1/misc/ocr-pdf" + Then the response content type should be "application/pdf" + And the response file should have size greater than 0 + And the response status code should be 200 + + @ocr @positive + Scenario: Process PDF with text and OCR with type normal + Given I generate a PDF file as "fileInput" + And the pdf contains 3 pages with random text + And the request data includes + | parameter | value | + | languages | eng | + | sidecar | false | + | deskew | true | + | clean | true | + | cleanFinal | true | + | ocrType | Normal | + | ocrRenderType | hocr | + | removeImagesAfter| false | + When I send the API request to the endpoint "/api/v1/misc/ocr-pdf" + Then the response status code should be 500 + + @ocr @positive + Scenario: Process PDF with OCR + Given I generate a PDF file as "fileInput" + And the request data includes + | parameter | value | + | languages | eng | + | sidecar | false | + | deskew | true | + | clean | true | + | cleanFinal | true | + | ocrType | Force | + | ocrRenderType | hocr | + | removeImagesAfter| false | + When I send the API request to the endpoint "/api/v1/misc/ocr-pdf" + Then the response content type should be "application/pdf" + And the response file should have size greater than 0 + And the response status code should be 200 + + @ocr @positive + Scenario: Process PDF with OCR with sidecar + Given I generate a PDF file as "fileInput" + And the request data includes + | parameter | value | + | languages | eng | + | sidecar | true | + | deskew | true | + | clean | true | + | cleanFinal | true | + | ocrType | Force | + | ocrRenderType | hocr | + | removeImagesAfter| false | + When I send the API request to the endpoint "/api/v1/misc/ocr-pdf" + Then the response content type should be "application/octet-stream" + And the response file should have extension ".zip" + And the response file should have size greater than 0 + And the response status code should be 200 + + + @libre @positive + Scenario Outline: Convert PDF to various word formats + Given I generate a PDF file as "fileInput" + And the pdf contains 3 pages with random text + And the request data includes + | parameter | value | + | outputFormat | | + When I send the API request to the endpoint "/api/v1/convert/pdf/word" + Then the response status code should be 200 + And the response file should have size greater than 100 + And the response file should have extension "" + + Examples: + | format | extension | + | docx | .docx | + | odt | .odt | + | doc | .doc | + + + + @compress @ghostscript @positive + Scenario: Compress + Given I generate a PDF file as "fileInput" + And the pdf contains 3 pages with random text + And the request data includes + | parameter | value | + | optimizeLevel | 4 | + When I send the API request to the endpoint "/api/v1/misc/compress-pdf" + Then the response status code should be 200 + And the response file should have extension ".pdf" + And the response file should have size greater than 100 + + @compress @ghostscript @positive + Scenario: Compress + Given I generate a PDF file as "fileInput" + And the pdf contains 3 pages with random text + And the request data includes + | parameter | value | + | optimizeLevel | 1 | + | expectedOutputSize | 5KB | + When I send the API request to the endpoint "/api/v1/misc/compress-pdf" + Then the response status code should be 200 + And the response file should have extension ".pdf" + And the response file should have size greater than 100 + + + @compress @ghostscript @positive + Scenario: Compress + Given I generate a PDF file as "fileInput" + And the pdf contains 3 pages with random text + And the request data includes + | parameter | value | + | optimizeLevel | 1 | + | expectedOutputSize | 5KB | + When I send the API request to the endpoint "/api/v1/misc/compress-pdf" + Then the response status code should be 200 + And the response file should have extension ".pdf" + And the response file should have size greater than 100 + + @libre @positive + Scenario Outline: Convert PDF to various types + Given I generate a PDF file as "fileInput" + And the pdf contains 3 pages with random text + And the request data includes + | parameter | value | + | outputFormat | | + When I send the API request to the endpoint "/api/v1/convert/pdf/" + Then the response status code should be 200 + And the response file should have size greater than 100 + And the response file should have extension "" + + Examples: + | type | format | extension | + | text | rtf | .rtf | + | text | txt | .txt | + | presentation | ppt | .ppt | + | presentation | pptx | .pptx | + | presentation | odp | .odp | + | html | html | .zip | + + + @libre @positive @topdf + Scenario Outline: Convert PDF to various types + Given I use an example file at "exampleFiles/example" as parameter "fileInput" + When I send the API request to the endpoint "/api/v1/convert/file/pdf" + Then the response status code should be 200 + And the response file should have size greater than 100 + And the response file should have extension ".pdf" + + Examples: + | extension | + | .docx | + | .odp | + | .odt | + | .pptx | + | .rtf | + + + diff --git a/cucumber/features/general.feature b/cucumber/features/general.feature new file mode 100644 index 0000000000..81b801be6a --- /dev/null +++ b/cucumber/features/general.feature @@ -0,0 +1,95 @@ +@general +Feature: API Validation + + @split-pdf-by-sections + Scenario Outline: split-pdf-by-sections with different parameters + Given I generate a PDF file as "fileInput" + And the pdf contains 2 pages + And the request data includes + | parameter | value | + | horizontalDivisions | | + | verticalDivisions | | + | merge | true | + When I send the API request to the endpoint "/api/v1/general/split-pdf-by-sections" + Then the response content type should be "application/pdf" + And the response file should have size greater than 200 + And the response status code should be 200 + And the response PDF should contain pages + + Examples: + | horizontalDivisions | verticalDivisions | page_count | + | 0 | 1 | 4 | + | 1 | 1 | 8 | + | 1 | 2 | 12 | + | 2 | 2 | 18 | + + @split-pdf-by-sections + Scenario Outline: split-pdf-by-sections with different parameters + Given I generate a PDF file as "fileInput" + And the pdf contains 2 pages + And the request data includes + | parameter | value | + | horizontalDivisions | | + | verticalDivisions | | + | merge | true | + When I send the API request to the endpoint "/api/v1/general/split-pdf-by-sections" + Then the response content type should be "application/pdf" + And the response file should have size greater than 200 + And the response status code should be 200 + And the response PDF should contain pages + + Examples: + | horizontalDivisions | verticalDivisions | page_count | + | 0 | 1 | 4 | + | 1 | 1 | 8 | + | 1 | 2 | 12 | + | 2 | 2 | 18 | + + + + @split-pdf-by-pages + Scenario Outline: split-pdf-by-pages with different parameters + Given I generate a PDF file as "fileInput" + And the pdf contains 20 pages + And the request data includes + | parameter | value | + | fileInput | fileInput | + | pageNumbers | | + When I send the API request to the endpoint "/api/v1/general/split-pages" + Then the response content type should be "application/octet-stream" + And the response status code should be 200 + And the response file should have size greater than 200 + And the response ZIP should contain files + + Examples: + | pageNumbers | file_count | + | 1,3,5-9 | 8 | + | all | 20 | + | 2n+1 | 11 | + | 3n | 7 | + + + + @split-pdf-by-size-or-count + Scenario Outline: split-pdf-by-size-or-count with different parameters + Given I generate a PDF file as "fileInput" + And the pdf contains 20 pages + And the request data includes + | parameter | value | + | fileInput | fileInput | + | splitType | | + | splitValue | | + When I send the API request to the endpoint "/api/v1/general/split-by-size-or-count" + Then the response content type should be "application/octet-stream" + And the response status code should be 200 + And the response file should have size greater than 200 + And the response ZIP file should contain documents each having pages + + Examples: + | splitType | splitValue | doc_count | pages_per_doc | + | 1 | 5 | 4 | 5 | + | 2 | 2 | 2 | 10 | + | 2 | 4 | 4 | 5 | + | 1 | 10 | 2 | 10 | + + diff --git a/cucumber/features/steps/step_definitions.py b/cucumber/features/steps/step_definitions.py index 50022d4e82..40ddd22b41 100644 --- a/cucumber/features/steps/step_definitions.py +++ b/cucumber/features/steps/step_definitions.py @@ -9,6 +9,8 @@ from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas import mimetypes import requests +import zipfile +import shutil ######### # GIVEN # @@ -26,6 +28,23 @@ def step_generate_pdf(context, fileInput): context.files = {} context.files[context.param_name] = open(context.file_name, 'rb') + +@given('I use an example file at "{filePath}" as parameter "{fileInput}"') +def step_use_example_file(context, filePath, fileInput): + context.param_name = fileInput + context.file_name = filePath.split('/')[-1] + if not hasattr(context, 'files'): + context.files = {} + + # Ensure the file exists before opening + try: + example_file = open(filePath, 'rb') + context.files[context.param_name] = example_file + except FileNotFoundError: + raise FileNotFoundError(f"The example file '{filePath}' does not exist.") + + + @given('the pdf contains {page_count:d} pages') def step_pdf_contains_pages(context, page_count): writer = PdfWriter() @@ -129,7 +148,7 @@ def step_send_api_request(context, endpoint): for key, file in files.items(): mime_type, _ = mimetypes.guess_type(file.name) mime_type = mime_type or 'application/octet-stream' - print("form_data " + file.name + " with " + mime_type) + print(f"form_data {file.name} with {mime_type}") form_data.append((key, (file.name, file, mime_type))) response = requests.post(url, files=form_data) @@ -205,3 +224,31 @@ def step_save_response_file(context, filename): with open(filename, 'wb') as f: f.write(context.response.content) print(f"Saved response content to {filename}") + + +@then('the response PDF should contain {page_count:d} pages') +def step_check_response_pdf_page_count(context, page_count): + response_file = io.BytesIO(context.response.content) + reader = PdfReader(io.BytesIO(response_file.getvalue())) + actual_page_count = len(reader.pages) + assert actual_page_count == page_count, f"Expected {page_count} pages but got {actual_page_count} pages" + +@then('the response ZIP should contain {file_count:d} files') +def step_check_response_zip_file_count(context, file_count): + response_file = io.BytesIO(context.response.content) + with zipfile.ZipFile(io.BytesIO(response_file.getvalue())) as zip_file: + actual_file_count = len(zip_file.namelist()) + assert actual_file_count == file_count, f"Expected {file_count} files but got {actual_file_count} files" + +@then('the response ZIP file should contain {doc_count:d} documents each having {pages_per_doc:d} pages') +def step_check_response_zip_doc_page_count(context, doc_count, pages_per_doc): + response_file = io.BytesIO(context.response.content) + with zipfile.ZipFile(io.BytesIO(response_file.getvalue())) as zip_file: + actual_doc_count = len(zip_file.namelist()) + assert actual_doc_count == doc_count, f"Expected {doc_count} documents but got {actual_doc_count} documents" + + for file_name in zip_file.namelist(): + with zip_file.open(file_name) as pdf_file: + reader = PdfReader(pdf_file) + actual_pages_per_doc = len(reader.pages) + assert actual_pages_per_doc == pages_per_doc, f"Expected {pages_per_doc} pages per document but got {actual_pages_per_doc} pages in document {file_name}" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 070cb702f0..48c0a02ca4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/java/stirling/software/SPDF/controller/api/MergeController.java b/src/main/java/stirling/software/SPDF/controller/api/MergeController.java index 1719d325dd..5e9f97dffb 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/MergeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/MergeController.java @@ -135,7 +135,9 @@ public class MergeController { throw ex; } finally { for (File file : filesToDelete) { - file.delete(); + if (file != null) { + Files.deleteIfExists(file.toPath()); + } } } } diff --git a/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java b/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java index a6148d4a03..48c987cf0a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/PdfOverlayController.java @@ -87,12 +87,12 @@ public class PdfOverlayController { } finally { for (File overlayPdfFile : overlayPdfFiles) { if (overlayPdfFile != null) { - overlayPdfFile.delete(); + Files.deleteIfExists(overlayPdfFile.toPath()); } } for (File tempFile : tempFiles) { // Delete temporary files if (tempFile != null) { - tempFile.delete(); + Files.deleteIfExists(tempFile.toPath()); } } } diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java index 51efa64495..ab80cad34a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPDFController.java @@ -121,7 +121,7 @@ public class SplitPDFController { logger.info("Successfully created zip file with split documents: {}", zipFile.toString()); byte[] data = Files.readAllBytes(zipFile); - Files.delete(zipFile); + Files.deleteIfExists(zipFile); // return the Resource in the response return WebResponseUtils.bytesToWebResponse( diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java index 3682aaf7f0..d9077d9e67 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java @@ -63,10 +63,7 @@ public class SplitPdfBySectionsController { MergeController mergeController = new MergeController(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); mergeController.mergeDocuments(splitDocuments).save(baos); - return WebResponseUtils.bytesToWebResponse( - baos.toByteArray(), - filename + "_split.pdf", - MediaType.APPLICATION_OCTET_STREAM); + return WebResponseUtils.bytesToWebResponse(baos.toByteArray(), filename + "_split.pdf"); } for (PDDocument doc : splitDocuments) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -98,7 +95,7 @@ public class SplitPdfBySectionsController { e.printStackTrace(); } finally { data = Files.readAllBytes(zipFile); - Files.delete(zipFile); + Files.deleteIfExists(zipFile); } return WebResponseUtils.bytesToWebResponse( diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java index 815018e871..8bce1b226a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java @@ -59,7 +59,7 @@ public class ConvertWebsiteToPDF { pdfBytes = Files.readAllBytes(tempOutputFile); } finally { // Clean up the temporary files - Files.delete(tempOutputFile); + Files.deleteIfExists(tempOutputFile); } // Convert URL to a safe filename String outputFilename = convertURLToFileName(URL); diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java index 0b578d8fd3..23c08f2660 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java @@ -118,7 +118,7 @@ public class AutoSplitPdfController { e.printStackTrace(); } finally { data = Files.readAllBytes(zipFile); - Files.delete(zipFile); + Files.deleteIfExists(zipFile); } return WebResponseUtils.bytesToWebResponse( diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java index e5d326a98b..ecf4155712 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java @@ -185,10 +185,12 @@ public class StampController { try (InputStream is = classPathResource.getInputStream(); FileOutputStream os = new FileOutputStream(tempFile)) { IOUtils.copy(is, os); + font = PDType0Font.load(document, tempFile); + } finally { + if (tempFile != null) { + Files.deleteIfExists(tempFile.toPath()); + } } - - font = PDType0Font.load(document, tempFile); - tempFile.deleteOnExit(); } contentStream.setFont(font, fontSize); diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java index 9506822c02..2133ae2673 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java @@ -150,10 +150,10 @@ public class WatermarkController { try (InputStream is = classPathResource.getInputStream(); FileOutputStream os = new FileOutputStream(tempFile)) { IOUtils.copy(is, os); + font = PDType0Font.load(document, tempFile); + } finally { + if (tempFile != null) Files.deleteIfExists(tempFile.toPath()); } - - font = PDType0Font.load(document, tempFile); - tempFile.deleteOnExit(); } contentStream.setFont(font, fontSize); diff --git a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java b/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java index 61b72da640..03ae55cebd 100644 --- a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java +++ b/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java @@ -38,14 +38,14 @@ public class GeneralUtils { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - Files.delete(file); + Files.deleteIfExists(file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { - Files.delete(dir); + Files.deleteIfExists(dir); return FileVisitResult.CONTINUE; } }); diff --git a/src/main/resources/templates/misc/ocr-pdf.html b/src/main/resources/templates/misc/ocr-pdf.html index a74242ae35..65dd17da21 100644 --- a/src/main/resources/templates/misc/ocr-pdf.html +++ b/src/main/resources/templates/misc/ocr-pdf.html @@ -232,7 +232,7 @@ // Step 3: Apply the function to your labels document.addEventListener('DOMContentLoaded', () => { - const labels = document.querySelectorAll('#languages .form-check-label'); + const labels = document.querySelectorAll('#languages label'); labels.forEach(label => { const languageCode = label.getAttribute('for').split('-')[1]; label.textContent = getFullLanguageName(languageCode);