diff --git a/data/qrv10_0.dat b/data/qrv10_0.dat new file mode 100644 index 0000000..8c073a8 Binary files /dev/null and b/data/qrv10_0.dat differ diff --git a/data/qrv10_1.dat b/data/qrv10_1.dat new file mode 100644 index 0000000..9a3cf4d Binary files /dev/null and b/data/qrv10_1.dat differ diff --git a/data/qrv10_2.dat b/data/qrv10_2.dat new file mode 100644 index 0000000..4a57e8a Binary files /dev/null and b/data/qrv10_2.dat differ diff --git a/data/qrv10_3.dat b/data/qrv10_3.dat new file mode 100644 index 0000000..e2de0ec Binary files /dev/null and b/data/qrv10_3.dat differ diff --git a/data/qrv11_0.dat b/data/qrv11_0.dat new file mode 100644 index 0000000..18853fe Binary files /dev/null and b/data/qrv11_0.dat differ diff --git a/data/qrv11_1.dat b/data/qrv11_1.dat new file mode 100644 index 0000000..365deb3 Binary files /dev/null and b/data/qrv11_1.dat differ diff --git a/data/qrv11_2.dat b/data/qrv11_2.dat new file mode 100644 index 0000000..0357a64 Binary files /dev/null and b/data/qrv11_2.dat differ diff --git a/data/qrv11_3.dat b/data/qrv11_3.dat new file mode 100644 index 0000000..bb8621b Binary files /dev/null and b/data/qrv11_3.dat differ diff --git a/data/qrv12_0.dat b/data/qrv12_0.dat new file mode 100644 index 0000000..636f201 Binary files /dev/null and b/data/qrv12_0.dat differ diff --git a/data/qrv12_1.dat b/data/qrv12_1.dat new file mode 100644 index 0000000..c679648 Binary files /dev/null and b/data/qrv12_1.dat differ diff --git a/data/qrv12_2.dat b/data/qrv12_2.dat new file mode 100644 index 0000000..4544e9d Binary files /dev/null and b/data/qrv12_2.dat differ diff --git a/data/qrv12_3.dat b/data/qrv12_3.dat new file mode 100644 index 0000000..9adba36 Binary files /dev/null and b/data/qrv12_3.dat differ diff --git a/data/qrv13_0.dat b/data/qrv13_0.dat new file mode 100644 index 0000000..73d6117 Binary files /dev/null and b/data/qrv13_0.dat differ diff --git a/data/qrv13_1.dat b/data/qrv13_1.dat new file mode 100644 index 0000000..9ae40dd Binary files /dev/null and b/data/qrv13_1.dat differ diff --git a/data/qrv13_2.dat b/data/qrv13_2.dat new file mode 100644 index 0000000..c4d9997 Binary files /dev/null and b/data/qrv13_2.dat differ diff --git a/data/qrv13_3.dat b/data/qrv13_3.dat new file mode 100644 index 0000000..2f33392 Binary files /dev/null and b/data/qrv13_3.dat differ diff --git a/data/qrv14_0.dat b/data/qrv14_0.dat new file mode 100644 index 0000000..956dae4 Binary files /dev/null and b/data/qrv14_0.dat differ diff --git a/data/qrv14_1.dat b/data/qrv14_1.dat new file mode 100644 index 0000000..5dd0e3e Binary files /dev/null and b/data/qrv14_1.dat differ diff --git a/data/qrv14_2.dat b/data/qrv14_2.dat new file mode 100644 index 0000000..466b94d Binary files /dev/null and b/data/qrv14_2.dat differ diff --git a/data/qrv14_3.dat b/data/qrv14_3.dat new file mode 100644 index 0000000..cdd2b21 Binary files /dev/null and b/data/qrv14_3.dat differ diff --git a/data/qrv15_0.dat b/data/qrv15_0.dat new file mode 100644 index 0000000..fcbb644 Binary files /dev/null and b/data/qrv15_0.dat differ diff --git a/data/qrv15_1.dat b/data/qrv15_1.dat new file mode 100644 index 0000000..59f7ed1 Binary files /dev/null and b/data/qrv15_1.dat differ diff --git a/data/qrv15_2.dat b/data/qrv15_2.dat new file mode 100644 index 0000000..3b86117 Binary files /dev/null and b/data/qrv15_2.dat differ diff --git a/data/qrv15_3.dat b/data/qrv15_3.dat new file mode 100644 index 0000000..4e9aa0e Binary files /dev/null and b/data/qrv15_3.dat differ diff --git a/data/qrv16_0.dat b/data/qrv16_0.dat new file mode 100644 index 0000000..d835c66 Binary files /dev/null and b/data/qrv16_0.dat differ diff --git a/data/qrv16_1.dat b/data/qrv16_1.dat new file mode 100644 index 0000000..ab1be3b Binary files /dev/null and b/data/qrv16_1.dat differ diff --git a/data/qrv16_2.dat b/data/qrv16_2.dat new file mode 100644 index 0000000..e34b2e3 Binary files /dev/null and b/data/qrv16_2.dat differ diff --git a/data/qrv16_3.dat b/data/qrv16_3.dat new file mode 100644 index 0000000..a91c7f7 Binary files /dev/null and b/data/qrv16_3.dat differ diff --git a/data/qrv17_0.dat b/data/qrv17_0.dat new file mode 100644 index 0000000..48fd276 Binary files /dev/null and b/data/qrv17_0.dat differ diff --git a/data/qrv17_1.dat b/data/qrv17_1.dat new file mode 100644 index 0000000..33f5411 Binary files /dev/null and b/data/qrv17_1.dat differ diff --git a/data/qrv17_2.dat b/data/qrv17_2.dat new file mode 100644 index 0000000..0c3b80f Binary files /dev/null and b/data/qrv17_2.dat differ diff --git a/data/qrv17_3.dat b/data/qrv17_3.dat new file mode 100644 index 0000000..c386c17 Binary files /dev/null and b/data/qrv17_3.dat differ diff --git a/data/qrv18_0.dat b/data/qrv18_0.dat new file mode 100644 index 0000000..f499e0e Binary files /dev/null and b/data/qrv18_0.dat differ diff --git a/data/qrv18_1.dat b/data/qrv18_1.dat new file mode 100644 index 0000000..8272c41 Binary files /dev/null and b/data/qrv18_1.dat differ diff --git a/data/qrv18_2.dat b/data/qrv18_2.dat new file mode 100644 index 0000000..0074b18 Binary files /dev/null and b/data/qrv18_2.dat differ diff --git a/data/qrv18_3.dat b/data/qrv18_3.dat new file mode 100644 index 0000000..b8eaec6 Binary files /dev/null and b/data/qrv18_3.dat differ diff --git a/data/qrv19_0.dat b/data/qrv19_0.dat new file mode 100644 index 0000000..28f6107 Binary files /dev/null and b/data/qrv19_0.dat differ diff --git a/data/qrv19_1.dat b/data/qrv19_1.dat new file mode 100644 index 0000000..98af58b Binary files /dev/null and b/data/qrv19_1.dat differ diff --git a/data/qrv19_2.dat b/data/qrv19_2.dat new file mode 100644 index 0000000..60f41f2 Binary files /dev/null and b/data/qrv19_2.dat differ diff --git a/data/qrv19_3.dat b/data/qrv19_3.dat new file mode 100644 index 0000000..7b98e51 Binary files /dev/null and b/data/qrv19_3.dat differ diff --git a/data/qrv1_0.dat b/data/qrv1_0.dat new file mode 100644 index 0000000..b941d48 Binary files /dev/null and b/data/qrv1_0.dat differ diff --git a/data/qrv1_1.dat b/data/qrv1_1.dat new file mode 100644 index 0000000..11df757 Binary files /dev/null and b/data/qrv1_1.dat differ diff --git a/data/qrv1_2.dat b/data/qrv1_2.dat new file mode 100644 index 0000000..851c3fa Binary files /dev/null and b/data/qrv1_2.dat differ diff --git a/data/qrv1_3.dat b/data/qrv1_3.dat new file mode 100644 index 0000000..1f300f5 Binary files /dev/null and b/data/qrv1_3.dat differ diff --git a/data/qrv20_0.dat b/data/qrv20_0.dat new file mode 100644 index 0000000..12963c2 Binary files /dev/null and b/data/qrv20_0.dat differ diff --git a/data/qrv20_1.dat b/data/qrv20_1.dat new file mode 100644 index 0000000..99d8afa Binary files /dev/null and b/data/qrv20_1.dat differ diff --git a/data/qrv20_2.dat b/data/qrv20_2.dat new file mode 100644 index 0000000..e6074ea Binary files /dev/null and b/data/qrv20_2.dat differ diff --git a/data/qrv20_3.dat b/data/qrv20_3.dat new file mode 100644 index 0000000..60acb51 Binary files /dev/null and b/data/qrv20_3.dat differ diff --git a/data/qrv21_0.dat b/data/qrv21_0.dat new file mode 100644 index 0000000..487b8f2 Binary files /dev/null and b/data/qrv21_0.dat differ diff --git a/data/qrv21_1.dat b/data/qrv21_1.dat new file mode 100644 index 0000000..54003fc Binary files /dev/null and b/data/qrv21_1.dat differ diff --git a/data/qrv21_2.dat b/data/qrv21_2.dat new file mode 100644 index 0000000..3300331 Binary files /dev/null and b/data/qrv21_2.dat differ diff --git a/data/qrv21_3.dat b/data/qrv21_3.dat new file mode 100644 index 0000000..fa34452 Binary files /dev/null and b/data/qrv21_3.dat differ diff --git a/data/qrv22_0.dat b/data/qrv22_0.dat new file mode 100644 index 0000000..444981c Binary files /dev/null and b/data/qrv22_0.dat differ diff --git a/data/qrv22_1.dat b/data/qrv22_1.dat new file mode 100644 index 0000000..690ff63 --- /dev/null +++ b/data/qrv22_1.dat @@ -0,0 +1,209 @@ +hghghghghghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_`_`_`_`_`_`_`_`]]]]]]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGGGGGHGHGHGHFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878765656565656565656565654343434343434343434343432121212121212121/0/0/////0/0/0/0.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!         hghghghghghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_`_`_`_`_`_`_`_`^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIGGHGHGHGGHGHGHGHFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:987878787878787878787876565656565656565656565654343434343434343432121212121212121212121//0/0/0//0/0/0/0.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!           hghghghghghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_`_______`_`_`_`^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIJIJIJIHGHGHGHGGHGGGGGGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121212121210/0/0/0//0//////.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcdcdcdcdcbabababababababa`_`_`_`__`_`_`_`^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIJIHGHGHGHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121210/0/0/0/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababababababa`_`_`_`_______`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIHGGGGGGHHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:9878787878787878787878787656565656565656565656565434343434343434321212121212121210//////00/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghghghghghgfefefefefefefefedcdcdcdcdcdcdcdcbabababababababa`_`_`_`_`_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHHGHGHGHGHGHGHGHGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121/0/0/0/00/0/0/0/0/0/0/0/.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_____`_``_`_`_`_`_`_`_`_^]^]^]^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHGGGGGHGHHGHGHGGGFEFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCBABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121/0/0/0/0/////0/00/0/0///.-.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_`_`_`_``_`_`___`_`_`_`_^]^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHGHGHGHGHGGHGHGHGFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656565656543434343434343432121212121212121/0/0/0/0/0/0/0/0//0/0/0/.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!            hghghghghghghghgfefefefefefefefefefefefedcdcdcdcdcdcdcdcbabababababababa_`_`_`_`___`_`_``_`_`_`_^]^]^]^]^]^]^]^]\[\[\[\[\[\[\[\[\[\[\[\[ZYZYZYZYZYZYZYZYZYZYZYZYXWXWXWXWXWXWXWXWXWXWXWXWVUVUVUVUVUVUVUVUVUVUVUVUTSTSTSTSTSTSTSTSTSTSTSTSRQRQRQRQRQRQRQRQRQRQRQRQPOPOPOPOPOPOPOPOPOPOPOPONMNMNMNMNMNMNMNMNMLKLKLKLKLKLKLKLKLKLKLKJIJIJIJIJIJIJIJIGHGHGHGHGHGHGHGHHGFEFEFEFEFEFEFEFEFEFEFEDCDCDCDCDCDCDCDCDCDCDCDCBABABABABABABABABABABABA@?@?@?@?@?@?@?@?@?@?@?@?>=>=>=>=>=>=>=>=>=>=>=>=<;<;<;<;<;<;<;<;<;<;<;<;:9:9:9:9:9:9:9:9:9:9:9:987878787878787878787878765656565656565656543434343434343434343432121212121212121/0/0/0/0/0/0/0/00/.-.-.-.-.-.-.-.-.-.-.-,+,+,+,+,+,+,+,+,+,+,+,+*)*)*)*)*)*)*)*)*)*)*)*)('('('('('('('('('('('('&%&%&%&%&%&%&%&%&%&%&%&%$#$#$#$#$#$#$#$#$#$#$#$#"!"!"!"!"!"!"!"!"!"!"!"!                        + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + +             + + + + + + + + + + +          + + + + + + + + + + + +            + + + + + + + + + + + +             + + + + + + + + + + + +             + + + + + + + + + + + + hhggffeeDDCCBBAA 99::;;<<]]^^__``FFEEDDCC""##$$%%PPQQRRSSVUUTTSSR-,,++**)(())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKee__^^]]776655// ))**++,,WWXXYYZZONNMMLKJ&%%$$##"(())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKee__^^]]776655// ))**++,,WWXXYYZZONNMMLKJ&%%$$##"(())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKee__^^]]776655// ))**++,,WWXXYYZZONNMMLKJ&%%$$##"ddccbbaa@@??>>====>>??@@aabbccddBBAA@@??&&''(())TTUUVVWWRQQPPOON)((''&&% + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOO\\[[ZZYY..--,,++--..//55[[\\]]^^IHGGFFEE"!!  + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOO\\[[ZZYY..--,,++--..//55[[\\]]^^IHGGFFEE"!!  + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOO\\[[ZZYY..--,,++--..//55[[\\]]^^IHGGFFEE"!! ``__^^]]<<;;::99 AABBCCDDeeffgghh>>==<<;; **++,,--XXYYZZ[[NMMLKJIH%$$##""! 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSSXXWWVVUU**))(('' + + 66778899__eeffggDDCCBBAA 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSSXXWWVVUU**))(('' + + 66778899__eeffggDDCCBBAA 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSSXXWWVVUU**))(('' + + 66778899__eeffggDDCCBBAA\\[[ZZYY88776655!!""##$$EEFFGGHHhhggffee::998877 + + ..//5566\\]]^^__GGFFEEDD! 44556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWTTSSRRQQ&&%%$$## ::;;<<==hhhhggff@@??>>==44556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWTTSSRRQQ&&%%$$## ::;;<<==hhhhggff@@??>>==44556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWTTSSRRQQ&&%%$$## ::;;<<==hhhhggff@@??>>== + + XXWWVVUU44332211 %%&&''((IIJJKKLL__^^]]\\6655//.. + + 778899::eeffgghhCCBBAA@@8899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[PPOONNMM""!! >>??@@AAeedcba`_<<;;::998899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[PPOONNMM""!! >>??@@AAeedcba`_<<;;::998899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[PPOONNMM""!! >>??@@AAeedcba`_<<;;::99 TTSSRRQQ00//..-- + + ))**++,,MMNNOOPP[[ZZYYXX--,,++** ;;<<==>>hhggffee??>>==<<<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__GGFFEEDDBBCCDDEE_^^]]\\[88776655 <<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__GGFFEEDDBBCCDDEE_^^]]\\[88776655 <<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__GGFFEEDDBBCCDDEE_^^]]\\[88776655 PPOONNMM,,++**)) + + --..//00QQRRSSTTWWVVUUTT))((''&&??@@AABBdcba`__^;;::9988@@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccCCBBAA@@ FFGGMMNN[ZZYYXXW43210//. + + @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccCCBBAA@@ FFGGMMNN[ZZYYXXW43210//. + + @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccCCBBAA@@ FFGGMMNN[ZZYYXXW43210//. + + LLKKJJII((''&&%% 11223344UUVVWWXXSSRRQQPP%%$$##""CCDDEEFF^]]\\[[Z77665543 !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffgg??>>==<<!!""##$$OOPPQQRRWVVUUTTS.--,,++* !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffgg??>>==<<!!""##$$OOPPQQRRWVVUUTTS.--,,++* !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffgg??>>==<<!!""##$$OOPPQQRRWVVUUTTS.--,,++*HHGGFFEE$$##""!!55667788YYZZ[[\\OONNMMGG!!  !!GGMMNNOOZYYXXWWV210//..- + + $$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggff;;::9988 + +%%&&''((SSTTUUVVSRRQQPPO*))((''&$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggff;;::9988 + +%%&&''((SSTTUUVVSRRQQPPO*))((''&$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggff;;::9988 + +%%&&''((SSTTUUVVSRRQQPPO*))((''& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__DDCCBBAA$$%%&&''RRSSTTUUEEDDCCBB!! 8899::;;$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbcc@@??>>==(())**++VVWWXXYYAA@@??>><<==>>??(())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffgg<<;;::99 ,,--..//ZZ[[\\]]==<<;;::@@AABBCC,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[UUTTSSRR1100//.. + +<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhh``__^^88776655 + + + +55667788]]\\[[ZZ99887766 !!""##DDEEFFGG00112233TTUUVVWWYYXXWWVV554433228899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKK]]\\[[ZZ//..--,, 99::;;<>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOYYXXWWVV++**))((==>>??@@UUTTSSRR1100//.. + +(())**++LLMMNNOO8899::;;\\]]^^__QQPPOONN--,,++** @@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSSUUTTSSRR''&&%%$$AABBCCDDQQPPOONN--,,++** + + ,,--..//PPQQRRSS<<==>>??``aabbccMMLLKKJJ))((''&& !!""##DDEEFFGGhhhhggffEEDDCCBB!! (())**++LLMMNNOOaa``__^^==<<;;:: 00112233TTUUVVWWQQPPOONN##""!! EEFFGGMMMMLLKKJJ))((''&& 00112233TTUUVVWW@@AABBCCddeeffggIIHHGGFF%%$$##""$$%%&&''HHIIJJKKeeddccbbAA@@??>> + + ,,--..//PPQQRRSS]]\\[[ZZ9988776644556677XXYYZZ[[MMGGFFEE !!""##NNOOPPQQIIHHGGFF%%$$##""44556677XXYYZZ[[\\]]ZHAbZHAbZHAb|ZdQb|ZdQb|ZdQbv`fHXv`˂rXQZp˂tbdQdrtnvffH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|dtAfH~fH~fH~XQr˂XQr˂rbtbtlbtlHXv`~HX`pvbHAZ`ےbrtAJtbdQpfHfH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|dtAfH~fH~fH~XQr˂XQr˂rbtbtlbtlHXv`~HX`pvbHAZ`ےbrtAJtbdQpfHfH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|dtAfH~fH~fH~XQr˂XQr˂rbtbtlbtlHXv`~HX`pvbHAZ`ےbrtAJtbdQے`JXQے`JXQے`JXQtlJtlJtlJ~Hfpf~HJ`ےrXQJ`Z|dAJltf`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlJltf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdf~Hv`fnrXQJp˂HAZp˂bdQZ|Z|df`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlJltf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdf~Hv`fnrXQJp˂HAZp˂bdQZ|Z|df`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlJltf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdf~Hv`fnrXQJp˂HAZp˂bdQZ|Z|dr˂pr˂pr˂ptArdtArdtArdvnXfpvbHAZpےbHArtAJbbdQZ|nvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`fHےbHAےbHAےbHAtbdQZtbdQZbnvnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQfpv~Hfp`p˂bHAZpbHAdrtArtAJbnvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`fHےbHAےbHAےbHAtbdQZtbdQZbnvnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQfpv~Hfp`p˂bHAZpbHAdrtArtAJbnvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`fHےbHAےbHAےbHAtbdQZtbdQZbnvnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQfpv~Hfp`p˂bHAZpbHAdrtArtAJbpfHZHAbZHAbZHAb|ZdQb|ZdQbf~Hv`fnXv`˂bZp˂dQZ|drtfH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvfpvZp˂Zp˂Zdr|dr|drpfHfH~fH~XQr˂XQr˂XQr˂btlbtlbtlnXv`vnXrXQJ`˂rXQZdrJltdQZ|fH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvfpvZp˂Zp˂Zdr|dr|drpfHfH~fH~XQr˂XQr˂XQr˂btlbtlbtlnXv`vnXrXQJ`˂rXQZdrJltdQZ|fH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvfpvZp˂Zp˂Zdr|dr|drpfHfH~fH~XQr˂XQr˂XQr˂btlbtlbtlnXv`vnXrXQJ`˂rXQZdrJltdQZ|f`vXے`JXQے`JXQے`JXQtlJtlJXv`f~HXvp˂rHAZp˂bHAZdrtAJAJbdQf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdf~Hv`fےbHAJ`ےtAJbdbdQZ|drtAJf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdf~Hv`fےbHAJ`ےtAJbdbdQZ|drtAJf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdf~Hv`fےbHAJ`ےtAJbdbdQZ|drtAJnvpr˂pr˂pr˂ptArdtArd~Hf`f~XQJ`ےrXQJdrtAltbZ|dnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~`f~`f~`ےHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQXv`f~HXvZp˂bHAZpQZ|ddrtAltbnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~`f~`f~`ےHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQXv`f~HXvZp˂bHAZpQZ|ddrtAltbnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~`f~`f~`ےHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQXv`f~HXvZp˂bHAZpQZ|ddrtAltbfH~ZHAbZHAb|ZdQb|ZdQb|ZdQbpvnHfpvbHAZ`ےbJbdQdQZ|rtAJlfH~fH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|drfH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtl~Hf`f~bHAZ˂brtAJlJbdQdQZ|fH~fH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|drfH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtl~Hf`f~bHAZ˂brtAJlJbdQdQZ|fH~fH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|drfH~fH~fH~XQr˂XQr˂XQr˂btlbtlbtl~Hf`f~bHAZ˂brtAJlJbdQdQZ|f`vXے`JXQے`JXQtlJtlJtlJXv`fnXvp˂HAZp˂Z|ddrtAJtbdQf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdpvnHfpvp˂rHAZp˂tbdZ|dAJltf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdpvnHfpvp˂rHAZp˂tbdZ|dAJltf`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdpvnHfpvp˂rHAZp˂tbdZ|dAJltnvpr˂pr˂ptArdtArdtArd~HX`f~bHAZpbHArtAJl璉bdQZ|Z|dnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`f~ےbHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~Xv`fnXvXQJ`ےrXQJQZ|drtAJlbnvnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`f~ےbHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~Xv`fnXvXQJ`ےrXQJQZ|drtAJlbnvnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`f~ےbHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~Xv`fnXvXQJ`ےrXQJQZ|drtAJlbnvfH~f`vXf`vXfZHAbpZHAbpZHAblJtAdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXZHAb˂pZHAb㉀ۑpZQXb㉀pfH~pfH~Z|dZ|dnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`f~ےbHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvpے`JXQbے`JAHr󙐒ۑpJAHf۝`vf۝`vrQtJlrQtJlfH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|dtAfH~fH~fH~r˂pJXQrˁ`ZQXr󙐂ˁ`Xnv˅Xnv˒tbAdtbAdf`vXf`vXpZHAbpZHAbpZHAbJtArdJtArdJtArdnXvnXvnXvrXQJ`rXQJ`rXQJ`tAJltAJlJltf`vXf`vXfr˂ZHAb˂p`ZAHr󙐂ˍpfH~pfH~pfH~Z|dZ|dnvpnvpے`Jے`Jے`J|ZdQ|ZdQ|ZdQ`f~`f~`fHےbHAےbHAےbHAtbdQZtbdQZbnvnvpnvppZHAb˂pZQXb㉀ہ`ZQXbㅐf۝`vf۝`vf۝`vrQtJlrQtJlfH~fH~XQr˂XQr˂XQr˂btlbtlbtlHfpvHfpvfpvZp˂Zp˂Zdr|dr|drpfHfH~fH~ے`JHAbےpJAHr󉀒ۑpJXnv˅Xnv˅Xnv˒tbAdtbAdf`vXf`vXpZHAbpZHAbpZHAJtArdJtArdJtArdnXvnXvnrXQJrXQJ`rXQJ`tAJltAJltAJlf`vXf`vXf`vXXQr˂`JXQrˁ`ZAHr󙐂ˍpfH~pfH~p|dZ|dZ|dnvpnvpے`Jے`Jے`JXQ|ZdQ|ZdQf~`f~`f~`ےHAےbHAےbHAtbdQZtbdQZtbdQZnvpnvpnvppZHAb˂pZQXAHr󙐁`ZQXAHf۝`vf۝`vrQtJlrQtJlrQtJlfH~fH~XQr˂XQr˂rbtbtlbtlHfpvHfpvHfpvZp˂Zp˂Zp˂|dr|dr|drfH~fH~fH~˂pHAbˁ`ZQXr󙐂ˁ`Xnv˅Xnv˒tbAdtbAdtbAdZ|abcdefghhgfedcb \ No newline at end of file diff --git a/data/qrv22_2.dat b/data/qrv22_2.dat new file mode 100644 index 0000000..3ea03b9 Binary files /dev/null and b/data/qrv22_2.dat differ diff --git a/qr/image/b.png b/qr/image/b.png new file mode 100644 index 0000000..cee8e4c Binary files /dev/null and b/qr/image/b.png differ diff --git a/qr/image/d.png b/qr/image/d.png new file mode 100644 index 0000000..a34a5a9 Binary files /dev/null and b/qr/image/d.png differ diff --git a/qr/image/qrv1.png b/qr/image/qrv1.png new file mode 100644 index 0000000..8996ae1 Binary files /dev/null and b/qr/image/qrv1.png differ diff --git a/qr/image/qrv10.png b/qr/image/qrv10.png new file mode 100644 index 0000000..d4218f6 Binary files /dev/null and b/qr/image/qrv10.png differ diff --git a/qr/image/qrv11.png b/qr/image/qrv11.png new file mode 100644 index 0000000..5b12c62 Binary files /dev/null and b/qr/image/qrv11.png differ diff --git a/qr/image/qrv12.png b/qr/image/qrv12.png new file mode 100644 index 0000000..a9b2f06 Binary files /dev/null and b/qr/image/qrv12.png differ diff --git a/qr/image/qrv13.png b/qr/image/qrv13.png new file mode 100644 index 0000000..b73b803 Binary files /dev/null and b/qr/image/qrv13.png differ diff --git a/qr/image/qrv14.png b/qr/image/qrv14.png new file mode 100644 index 0000000..ed4ee15 Binary files /dev/null and b/qr/image/qrv14.png differ diff --git a/qr/image/qrv15.png b/qr/image/qrv15.png new file mode 100644 index 0000000..607c488 Binary files /dev/null and b/qr/image/qrv15.png differ diff --git a/qr/image/qrv16.png b/qr/image/qrv16.png new file mode 100644 index 0000000..0d2fdc8 Binary files /dev/null and b/qr/image/qrv16.png differ diff --git a/qr/image/qrv17.png b/qr/image/qrv17.png new file mode 100644 index 0000000..d00b7ad Binary files /dev/null and b/qr/image/qrv17.png differ diff --git a/qr/image/qrv18.png b/qr/image/qrv18.png new file mode 100644 index 0000000..eb11a81 Binary files /dev/null and b/qr/image/qrv18.png differ diff --git a/qr/image/qrv19.png b/qr/image/qrv19.png new file mode 100644 index 0000000..0b66538 Binary files /dev/null and b/qr/image/qrv19.png differ diff --git a/qr/image/qrv2.png b/qr/image/qrv2.png new file mode 100644 index 0000000..9f2aeea Binary files /dev/null and b/qr/image/qrv2.png differ diff --git a/qr/image/qrv20.png b/qr/image/qrv20.png new file mode 100644 index 0000000..5344734 Binary files /dev/null and b/qr/image/qrv20.png differ diff --git a/qr/image/qrv21.png b/qr/image/qrv21.png new file mode 100644 index 0000000..7e4e0a8 Binary files /dev/null and b/qr/image/qrv21.png differ diff --git a/qr/image/qrv22.png b/qr/image/qrv22.png new file mode 100644 index 0000000..0411eac Binary files /dev/null and b/qr/image/qrv22.png differ diff --git a/qr/image/qrv23.png b/qr/image/qrv23.png new file mode 100644 index 0000000..66562ab Binary files /dev/null and b/qr/image/qrv23.png differ diff --git a/qr/image/qrv24.png b/qr/image/qrv24.png new file mode 100644 index 0000000..bd63d15 Binary files /dev/null and b/qr/image/qrv24.png differ diff --git a/qr/image/qrv25.png b/qr/image/qrv25.png new file mode 100644 index 0000000..bec76f8 Binary files /dev/null and b/qr/image/qrv25.png differ diff --git a/qr/image/qrv26.png b/qr/image/qrv26.png new file mode 100644 index 0000000..791bcf3 Binary files /dev/null and b/qr/image/qrv26.png differ diff --git a/qr/image/qrv27.png b/qr/image/qrv27.png new file mode 100644 index 0000000..9cb926f Binary files /dev/null and b/qr/image/qrv27.png differ diff --git a/qr/image/qrv28.png b/qr/image/qrv28.png new file mode 100644 index 0000000..fcb54cc Binary files /dev/null and b/qr/image/qrv28.png differ diff --git a/qr/image/qrv29.png b/qr/image/qrv29.png new file mode 100644 index 0000000..ab49700 Binary files /dev/null and b/qr/image/qrv29.png differ diff --git a/qr/image/qrv3.png b/qr/image/qrv3.png new file mode 100644 index 0000000..a3e7e25 Binary files /dev/null and b/qr/image/qrv3.png differ diff --git a/qr/image/qrv30.png b/qr/image/qrv30.png new file mode 100644 index 0000000..b3e809b Binary files /dev/null and b/qr/image/qrv30.png differ diff --git a/qr/image/qrv31.png b/qr/image/qrv31.png new file mode 100644 index 0000000..7d0f26c Binary files /dev/null and b/qr/image/qrv31.png differ diff --git a/qr/image/qrv32.png b/qr/image/qrv32.png new file mode 100644 index 0000000..c400d09 Binary files /dev/null and b/qr/image/qrv32.png differ diff --git a/qr/image/qrv33.png b/qr/image/qrv33.png new file mode 100644 index 0000000..559d973 Binary files /dev/null and b/qr/image/qrv33.png differ diff --git a/qr/image/qrv34.png b/qr/image/qrv34.png new file mode 100644 index 0000000..82f7880 Binary files /dev/null and b/qr/image/qrv34.png differ diff --git a/qr/image/qrv35.png b/qr/image/qrv35.png new file mode 100644 index 0000000..3e76bf7 Binary files /dev/null and b/qr/image/qrv35.png differ diff --git a/qr/image/qrv36.png b/qr/image/qrv36.png new file mode 100644 index 0000000..f58e8bc Binary files /dev/null and b/qr/image/qrv36.png differ diff --git a/qr/image/qrv37.png b/qr/image/qrv37.png new file mode 100644 index 0000000..771ab91 Binary files /dev/null and b/qr/image/qrv37.png differ diff --git a/qr/image/qrv38.png b/qr/image/qrv38.png new file mode 100644 index 0000000..906a830 Binary files /dev/null and b/qr/image/qrv38.png differ diff --git a/qr/image/qrv39.png b/qr/image/qrv39.png new file mode 100644 index 0000000..9f290cb Binary files /dev/null and b/qr/image/qrv39.png differ diff --git a/qr/image/qrv4.png b/qr/image/qrv4.png new file mode 100644 index 0000000..a476750 Binary files /dev/null and b/qr/image/qrv4.png differ diff --git a/qr/image/qrv40.png b/qr/image/qrv40.png new file mode 100644 index 0000000..ee28158 Binary files /dev/null and b/qr/image/qrv40.png differ diff --git a/qr/image/qrv5.png b/qr/image/qrv5.png new file mode 100644 index 0000000..f593fc0 Binary files /dev/null and b/qr/image/qrv5.png differ diff --git a/qr/image/qrv6.png b/qr/image/qrv6.png new file mode 100644 index 0000000..a1e5a71 Binary files /dev/null and b/qr/image/qrv6.png differ diff --git a/qr/image/qrv7.png b/qr/image/qrv7.png new file mode 100644 index 0000000..792934d Binary files /dev/null and b/qr/image/qrv7.png differ diff --git a/qr/image/qrv8.png b/qr/image/qrv8.png new file mode 100644 index 0000000..97b5a01 Binary files /dev/null and b/qr/image/qrv8.png differ diff --git a/qr/image/qrv9.png b/qr/image/qrv9.png new file mode 100644 index 0000000..4353baa Binary files /dev/null and b/qr/image/qrv9.png differ diff --git a/qr/license.txt b/qr/license.txt new file mode 100644 index 0000000..4f521f5 --- /dev/null +++ b/qr/license.txt @@ -0,0 +1,2 @@ +このqrフォルダにあるファイルは +Y.Swetake様よりお借りしています。 \ No newline at end of file diff --git a/qr/php/qr_img.php b/qr/php/qr_img.php new file mode 100644 index 0000000..831dc1f --- /dev/null +++ b/qr/php/qr_img.php @@ -0,0 +1,645 @@ +0) { +} else { + if ($qrcode_image_type=="jpeg"){ + $qrcode_module_size=8; + } else { + $qrcode_module_size=4; + } +} +$qrcode_data_string=rawurldecode($qrcode_data_string); +$data_length=strlen($qrcode_data_string); +if ($data_length<=0) { + trigger_error("QRcode : Data do not exist.",E_USER_ERROR); + exit; +} +$data_counter=0; +if ($qrcode_structureappend_n>1 + && $qrcode_structureappend_n<=16 + && $qrcode_structureappend_m>0 + && $qrcode_structureqppend_m<=16){ + + $data_value[0]=3; + $data_bits[0]=4; + + $data_value[1]=$qrcode_structureappend_m-1; + $data_bits[1]=4; + + $data_value[2]=$qrcode_structureappend_n-1; + $data_bits[2]=4; + + + $originaldata_length=strlen($qrcode_structureappend_originaldata); + if ($originaldata_length>1){ + $qrcode_structureappend_parity=0; + $i=0; + while ($i<$originaldata_length){ + $qrcode_structureappend_parity=($qrcode_structureappend_parity ^ ord(substr($qrcode_structureappend_originaldata,$i,1))); + $i++; + } + } + + $data_value[3]=$qrcode_structureappend_parity; + $data_bits[3]=8; + + $data_counter=4; +} + +$data_bits[$data_counter]=4; + +/* --- determine encode mode */ + +if (preg_match("/[^0-9]/",$qrcode_data_string)!=0){ + if (preg_match("/[^0-9A-Z \$\*\%\+\.\/\:\-]/",$qrcode_data_string)!=0) { + + + /* --- 8bit byte mode */ + + $codeword_num_plus=array(0,0,0,0,0,0,0,0,0,0, +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); + + $data_value[$data_counter]=4; + $data_counter++; + $data_value[$data_counter]=$data_length; + $data_bits[$data_counter]=8; /* #version 1-9 */ + $codeword_num_counter_value=$data_counter; + + $data_counter++; + $i=0; + while ($i<$data_length){ + $data_value[$data_counter]=ord(substr($qrcode_data_string,$i,1)); + $data_bits[$data_counter]=8; + $data_counter++; + $i++; + } + } else { + + /* ---- alphanumeric mode */ + + $codeword_num_plus=array(0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +4,4,4,4,4,4,4,4,4,4,4,4,4,4); + + $data_value[$data_counter]=2; + $data_counter++; + $data_value[$data_counter]=$data_length; + $data_bits[$data_counter]=9; /* #version 1-9 */ + $codeword_num_counter_value=$data_counter; + + + $alphanumeric_character_hash=array("0"=>0,"1"=>1,"2"=>2,"3"=>3,"4"=>4, +"5"=>5,"6"=>6,"7"=>7,"8"=>8,"9"=>9,"A"=>10,"B"=>11,"C"=>12,"D"=>13,"E"=>14, +"F"=>15,"G"=>16,"H"=>17,"I"=>18,"J"=>19,"K"=>20,"L"=>21,"M"=>22,"N"=>23, +"O"=>24,"P"=>25,"Q"=>26,"R"=>27,"S"=>28,"T"=>29,"U"=>30,"V"=>31, +"W"=>32,"X"=>33,"Y"=>34,"Z"=>35," "=>36,"$"=>37,"%"=>38,"*"=>39, +"+"=>40,"-"=>41,"."=>42,"/"=>43,":"=>44); + + $i=0; + $data_counter++; + while ($i<$data_length){ + if (($i %2)==0){ + $data_value[$data_counter]=$alphanumeric_character_hash[substr($qrcode_data_string,$i,1)]; + $data_bits[$data_counter]=6; + } else { + $data_value[$data_counter]=$data_value[$data_counter]*45+$alphanumeric_character_hash[substr($qrcode_data_string,$i,1)]; + $data_bits[$data_counter]=11; + $data_counter++; + } + $i++; + } + } +} else { + + /* ---- numeric mode */ + + $codeword_num_plus=array(0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +4,4,4,4,4,4,4,4,4,4,4,4,4,4); + + $data_value[$data_counter]=1; + $data_counter++; + $data_value[$data_counter]=$data_length; + $data_bits[$data_counter]=10; /* #version 1-9 */ + $codeword_num_counter_value=$data_counter; + + $i=0; + $data_counter++; + while ($i<$data_length){ + if (($i % 3)==0){ + $data_value[$data_counter]=substr($qrcode_data_string,$i,1); + $data_bits[$data_counter]=4; + } else { + $data_value[$data_counter]=$data_value[$data_counter]*10+substr($qrcode_data_string,$i,1); + if (($i % 3)==1){ + $data_bits[$data_counter]=7; + } else { + $data_bits[$data_counter]=10; + $data_counter++; + } + } + $i++; + } +} +if (@$data_bits[$data_counter]>0) { + $data_counter++; +} +$i=0; +$total_data_bits=0; +while($i<$data_counter){ + $total_data_bits+=$data_bits[$i]; + $i++; +} + + +$ecc_character_hash=array("L"=>"1", +"l"=>"1", +"M"=>"0", +"m"=>"0", +"Q"=>"3", +"q"=>"3", +"H"=>"2", +"h"=>"2"); + + $ec=@$ecc_character_hash[$qrcode_error_correct]; + + if (!$ec){$ec=0;} + +$max_data_bits_array=array( +0,128,224,352,512,688,864,992,1232,1456,1728, +2032,2320,2672,2920,3320,3624,4056,4504,5016,5352, +5712,6256,6880,7312,8000,8496,9024,9544,10136,10984, +11640,12328,13048,13800,14496,15312,15936,16816,17728,18672, + +152,272,440,640,864,1088,1248,1552,1856,2192, +2592,2960,3424,3688,4184,4712,5176,5768,6360,6888, +7456,8048,8752,9392,10208,10960,11744,12248,13048,13880, +14744,15640,16568,17528,18448,19472,20528,21616,22496,23648, + +72,128,208,288,368,480,528,688,800,976, +1120,1264,1440,1576,1784,2024,2264,2504,2728,3080, +3248,3536,3712,4112,4304,4768,5024,5288,5608,5960, +6344,6760,7208,7688,7888,8432,8768,9136,9776,10208, + +104,176,272,384,496,608,704,880,1056,1232, +1440,1648,1952,2088,2360,2600,2936,3176,3560,3880, +4096,4544,4912,5312,5744,6032,6464,6968,7288,7880, +8264,8920,9368,9848,10288,10832,11408,12016,12656,13328 +); +if (!is_numeric($qrcode_version)){ + $qrcode_version=0; +} +if (!$qrcode_version){ + /* #--- auto version select */ + $i=1+40*$ec; + $j=$i+39; + $qrcode_version=1; + while ($i<=$j){ + if (($max_data_bits_array[$i])>=$total_data_bits+$codeword_num_plus[$qrcode_version] ){ + $max_data_bits=$max_data_bits_array[$i]; + break; + } + $i++; + $qrcode_version++; + } +} else { + $max_data_bits=$max_data_bits_array[$qrcode_version+40*$ec]; +} +if ($qrcode_version>$version_ul){ + trigger_error("QRcode : too large version.",E_USER_ERROR); +} + +$total_data_bits+=$codeword_num_plus[$qrcode_version]; + $data_bits[$codeword_num_counter_value]+=$codeword_num_plus[$qrcode_version]; + +$max_codewords_array=array(0,26,44,70,100,134,172,196,242, +292,346,404,466,532,581,655,733,815,901,991,1085,1156, +1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465, +2611,2761,2876,3034,3196,3362,3532,3706); + +$max_codewords=$max_codewords_array[$qrcode_version]; +$max_modules_1side=17+($qrcode_version <<2); + +$matrix_remain_bit=array(0,0,7,7,7,7,7,0,0,0,0,0,0,0,3,3,3,3,3,3,3, +4,4,4,4,4,4,4,3,3,3,3,3,3,3,0,0,0,0,0,0); + +/* ---- read version ECC data file */ + +$byte_num=$matrix_remain_bit[$qrcode_version]+($max_codewords << 3); +$filename=$path."/qrv".$qrcode_version."_".$ec.".dat"; +$fp1 = fopen ($filename, "rb"); + $matx=fread($fp1,$byte_num); + $maty=fread($fp1,$byte_num); + $masks=fread($fp1,$byte_num); + $fi_x=fread($fp1,15); + $fi_y=fread($fp1,15); + $rs_ecc_codewords=ord(fread($fp1,1)); + $rso=fread($fp1,128); +fclose($fp1); + +$matrix_x_array=unpack("C*",$matx); +$matrix_y_array=unpack("C*",$maty); +$mask_array=unpack("C*",$masks); + +$rs_block_order=unpack("C*",$rso); + +$format_information_x2=unpack("C*",$fi_x); +$format_information_y2=unpack("C*",$fi_y); + +$format_information_x1=array(0,1,2,3,4,5,7,8,8,8,8,8,8,8,8); +$format_information_y1=array(8,8,8,8,8,8,8,8,7,5,4,3,2,1,0); + +$max_data_codewords=($max_data_bits >>3); + +$filename = $path."/rsc".$rs_ecc_codewords.".dat"; +$fp0 = fopen ($filename, "rb"); +$i=0; +while ($i<256) { + $rs_cal_table_array[$i]=fread ($fp0,$rs_ecc_codewords); + $i++; +} +fclose ($fp0); + +/* --- set terminator */ + +if ($total_data_bits<=$max_data_bits-4){ + $data_value[$data_counter]=0; + $data_bits[$data_counter]=4; +} else { + if ($total_data_bits<$max_data_bits){ + $data_value[$data_counter]=0; + $data_bits[$data_counter]=$max_data_bits-$total_data_bits; + } else { + if ($total_data_bits>$max_data_bits){ + trigger_error("QRcode : Overflow error",E_USER_ERROR); + exit; + } + } +} + +/* ----divide data by 8bit */ + +$i=0; +$codewords_counter=0; +$codewords[0]=0; +$remaining_bits=8; + +while ($i<=$data_counter) { + $buffer=@$data_value[$i]; + $buffer_bits=@$data_bits[$i]; + + $flag=1; + while ($flag) { + if ($remaining_bits>$buffer_bits){ + $codewords[$codewords_counter]=((@$codewords[$codewords_counter]<<$buffer_bits) | $buffer); + $remaining_bits-=$buffer_bits; + $flag=0; + } else { + $buffer_bits-=$remaining_bits; + $codewords[$codewords_counter]=(($codewords[$codewords_counter] << $remaining_bits) | ($buffer >> $buffer_bits)); + + if ($buffer_bits==0) { + $flag=0; + } else { + $buffer= ($buffer & ((1 << $buffer_bits)-1) ); + $flag=1; + } + + $codewords_counter++; + if ($codewords_counter<$max_data_codewords-1){ + $codewords[$codewords_counter]=0; + } + $remaining_bits=8; + } + } + $i++; +} +if ($remaining_bits!=8) { + $codewords[$codewords_counter]=$codewords[$codewords_counter] << $remaining_bits; +} else { + $codewords_counter--; +} + +/* ---- set padding character */ + +if ($codewords_counter<$max_data_codewords-1){ + $flag=1; + while ($codewords_counter<$max_data_codewords-1){ + $codewords_counter++; + if ($flag==1) { + $codewords[$codewords_counter]=236; + } else { + $codewords[$codewords_counter]=17; + } + $flag=$flag*(-1); + } +} + +/* ---- RS-ECC prepare */ + +$i=0; +$j=0; +$rs_block_number=0; +$rs_temp[0]=""; + +while($i<$max_data_codewords){ + + $rs_temp[$rs_block_number].=chr($codewords[$i]); + $j++; + + if ($j>=$rs_block_order[$rs_block_number+1]-$rs_ecc_codewords){ + $j=0; + $rs_block_number++; + $rs_temp[$rs_block_number]=""; + } + $i++; +} + + +/* +# +# RS-ECC main +# +*/ + +$rs_block_number=0; +$rs_block_order_num=count($rs_block_order); + +while ($rs_block_number<$rs_block_order_num){ + + $rs_codewords=$rs_block_order[$rs_block_number+1]; + $rs_data_codewords=$rs_codewords-$rs_ecc_codewords; + + $rstemp=$rs_temp[$rs_block_number].str_repeat(chr(0),$rs_ecc_codewords); + $padding_data=str_repeat(chr(0),$rs_data_codewords); + + $j=$rs_data_codewords; + while($j>0){ + $first=ord(substr($rstemp,0,1)); + + if ($first){ + $left_chr=substr($rstemp,1); + $cal=$rs_cal_table_array[$first].$padding_data; + $rstemp=$left_chr ^ $cal; + } else { + $rstemp=substr($rstemp,1); + } + + $j--; + } + + $codewords=array_merge($codewords,unpack("C*",$rstemp)); + + $rs_block_number++; +} + +/* ---- flash matrix */ + +$i=0; +while ($i<$max_modules_1side){ + $j=0; + while ($j<$max_modules_1side){ + $matrix_content[$j][$i]=0; + $j++; + } + $i++; +} + +/* --- attach data */ + +$i=0; +while ($i<$max_codewords){ + $codeword_i=$codewords[$i]; + $j=8; + while ($j>=1){ + $codeword_bits_number=($i << 3) + $j; + $matrix_content[ $matrix_x_array[$codeword_bits_number] ][ $matrix_y_array[$codeword_bits_number] ]=((255*($codeword_i & 1)) ^ $mask_array[$codeword_bits_number] ); + $codeword_i= $codeword_i >> 1; + $j--; + } + $i++; +} + +$matrix_remain=$matrix_remain_bit[$qrcode_version]; +while ($matrix_remain){ + $remain_bit_temp = $matrix_remain + ( $max_codewords <<3); + $matrix_content[ $matrix_x_array[$remain_bit_temp] ][ $matrix_y_array[$remain_bit_temp] ] = ( 0 ^ $mask_array[$remain_bit_temp] ); + $matrix_remain--; +} + +#--- mask select + +$min_demerit_score=0; + $hor_master=""; + $ver_master=""; + $k=0; + while($k<$max_modules_1side){ + $l=0; + while($l<$max_modules_1side){ + $hor_master=$hor_master.chr($matrix_content[$l][$k]); + $ver_master=$ver_master.chr($matrix_content[$k][$l]); + $l++; + } + $k++; + } +$i=0; +$all_matrix=$max_modules_1side * $max_modules_1side; +while ($i<8){ + $demerit_n1=0; + $ptn_temp=array(); + $bit= 1<< $i; + $bit_r=(~$bit)&255; + $bit_mask=str_repeat(chr($bit),$all_matrix); + $hor = $hor_master & $bit_mask; + $ver = $ver_master & $bit_mask; + + $ver_shift1=$ver.str_repeat(chr(170),$max_modules_1side); + $ver_shift2=str_repeat(chr(170),$max_modules_1side).$ver; + $ver_shift1_0=$ver.str_repeat(chr(0),$max_modules_1side); + $ver_shift2_0=str_repeat(chr(0),$max_modules_1side).$ver; + $ver_or=chunk_split(~($ver_shift1 | $ver_shift2),$max_modules_1side,chr(170)); + $ver_and=chunk_split(~($ver_shift1_0 & $ver_shift2_0),$max_modules_1side,chr(170)); + + $hor=chunk_split(~$hor,$max_modules_1side,chr(170)); + $ver=chunk_split(~$ver,$max_modules_1side,chr(170)); + $hor=$hor.chr(170).$ver; + + $n1_search="/".str_repeat(chr(255),5)."+|".str_repeat(chr($bit_r),5)."+/"; + $n3_search=chr($bit_r).chr(255).chr($bit_r).chr($bit_r).chr($bit_r).chr(255).chr($bit_r); + + $demerit_n3=substr_count($hor,$n3_search)*40; + $demerit_n4=floor(abs(( (100* (substr_count($ver,chr($bit_r))/($byte_num)) )-50)/5))*10; + + + $n2_search1="/".chr($bit_r).chr($bit_r)."+/"; + $n2_search2="/".chr(255).chr(255)."+/"; + $demerit_n2=0; + preg_match_all($n2_search1,$ver_and,$ptn_temp); + foreach($ptn_temp[0] as $str_temp){ + $demerit_n2+=(strlen($str_temp)-1); + } + $ptn_temp=array(); + preg_match_all($n2_search2,$ver_or,$ptn_temp); + foreach($ptn_temp[0] as $str_temp){ + $demerit_n2+=(strlen($str_temp)-1); + } + $demerit_n2*=3; + + $ptn_temp=array(); + + preg_match_all($n1_search,$hor,$ptn_temp); + foreach($ptn_temp[0] as $str_temp){ + $demerit_n1+=(strlen($str_temp)-2); + } + + $demerit_score=$demerit_n1+$demerit_n2+$demerit_n3+$demerit_n4; + + if ($demerit_score<=$min_demerit_score || $i==0){ + $mask_number=$i; + $min_demerit_score=$demerit_score; + } + +$i++; +} + +$mask_content=1 << $mask_number; + +# --- format information + +$format_information_value=(($ec << 3) | $mask_number); +$format_information_array=array("101010000010010","101000100100101", +"101111001111100","101101101001011","100010111111001","100000011001110", +"100111110010111","100101010100000","111011111000100","111001011110011", +"111110110101010","111100010011101","110011000101111","110001100011000", +"110110001000001","110100101110110","001011010001001","001001110111110", +"001110011100111","001100111010000","000011101100010","000001001010101", +"000110100001100","000100000111011","011010101011111","011000001101000", +"011111100110001","011101000000110","010010010110100","010000110000011", +"010111011011010","010101111101101"); +$i=0; +while ($i<15){ + $content=substr($format_information_array[$format_information_value],$i,1); + + $matrix_content[$format_information_x1[$i]][$format_information_y1[$i]]=$content * 255; + $matrix_content[$format_information_x2[$i+1]][$format_information_y2[$i+1]]=$content * 255; + $i++; +} + + +$mib=$max_modules_1side+8; +$qrcode_image_size=$mib*$qrcode_module_size; +if ($qrcode_image_size>1480){ + trigger_error("QRcode : Too large image size",E_USER_ERROR); +} +$output_image =ImageCreate($qrcode_image_size,$qrcode_image_size); + +$image_path=$image_path."/qrv".$qrcode_version.".png"; + +$base_image=ImageCreateFromPNG($image_path); + +$col[1]=ImageColorAllocate($base_image,0,0,0); +$col[0]=ImageColorAllocate($base_image,255,255,255); + +$i=4; +$mxe=4+$max_modules_1side; +$ii=0; +while ($i<$mxe){ + $j=4; + $jj=0; + while ($j<$mxe){ + if ($matrix_content[$ii][$jj] & $mask_content){ + ImageSetPixel($base_image,$i,$j,$col[1]); + } + $j++; + $jj++; + } + $i++; + $ii++; +} +/* +#--- output image +# +*/ +Header("Content-type: image/".$qrcode_image_type); +ImageCopyResized($output_image,$base_image,0,0,0,0,$qrcode_image_size,$qrcode_image_size,$mib,$mib); +if ($qrcode_image_type == "jpeg"){ + ImageJpeg($output_image); +} else { + ImagePng($output_image); +} +?>