Added constexpr modifiers, where possible
This commit is contained in:
parent
081f055e03
commit
633e524e8d
163
Example.txt
Normal file
163
Example.txt
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
Привет, меня зовут QR-код
|
||||||
|
Меня придумали для разных вещей, вроде порабощения человечества, или чего похуже.
|
||||||
|
Но на самом деле я хороший - во мне можно хранить разный текст и даже файлы.
|
||||||
|
Однако, для последних потребуется специальный декодер, так как не каждая программа для чтения QR-кодов с этим справится.
|
||||||
|
Чего нельзя сказать про библиотеку, с помощью которой меня создали.
|
||||||
|
Она позволяет создавать QR-коды размером до 40-й версии (максимальная, дозволенная стандартом) в цифровом, символьном и байтовом режимах кодировки.
|
||||||
|
Она так же позволяет устанавливать предыдущие параметры вручную.
|
||||||
|
Так же как с уровнем коррекции (меня можно чутка повредить, но сканер всё равно сможет меня считать) и маской.
|
||||||
|
Последняя пока не выбирается динамически, но ждите версию v0.2.0, где эта возможность обязательно появится.
|
||||||
|
На этом, раскланяюсь. Навеки ваш QR-код :)
|
||||||
|
██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
|
||||||
|
██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
|
||||||
|
██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
|
||||||
|
██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
|
||||||
|
████████ ████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ████ ████████ ██████████████ ██ ████████████████ ██ ██████████ ██ ██ ████ ██ ██ ██ ██ ██ ██ ████ ██████ ██ ██ ██████ ██████ ████ ██ ██ ████████
|
||||||
|
████████ ██████████ ██ ██████ ██ ████ ██████████████ ██ ██████ ████████ ██████ ██ ██ ████ ██ ██ ████ ████ ████ ██████ ██████ ██ ████████ ████ ████ ██ ██ ████ ██ ████████████ ████████████████████ ████ ██ ████ ██████████ ████████
|
||||||
|
████████ ██ ██ ████ ██████ ██ ██ ██ ██ ██████ ██ ██ ████ ██ ████ ██████████ ██ ██ ████ ██ ██ ██ ██ ████ ██ ██ ████ ████ ██████ ████ ██ ████ ████ ██ ██ ██ ██ ██ ████████
|
||||||
|
████████ ██ ██ ████████ ████ ████ ████ ████ ████ ████████ ██ ████ ██ ██ ██ ████ ██████████ ██████ ██ ██████ ██ ████████ ██████ ██ ██████ ██████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ████████
|
||||||
|
████████ ██ ██ ██ ████ ██ ██████ ████████████ ██████ ██ ██ ██████ ████████ ████ ██████ ████████ ██ ████ ████ ██ ██████ ██████ ████ ██████ ██ ██ ██████ ██████ ██ ██████████ ██ ██ ████████
|
||||||
|
████████ ██████████ ████ ████ ████████████ ████████ ██ ██ ██ ██████ ██████ ██ ████████ ██████ ████ ██████ ██ ██████████████ ████████ ██████████ ██████ ██ ██ ██ ████ ██████ ██ ████ ████ ████ ████████ ██ ██████████ ████████
|
||||||
|
████████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████████
|
||||||
|
████████████████████████████ ██████ ██ ████ ██████ ████ ██ ██████ ██ ██ ████ ██ ██ ██ ██████ ██ ██████ ██████ ████████ ████ ██████ ██ ████ ██████ ██ ████ ████ ████ ██ ██ ██████ ████ ██ ████████████ ██████ ████████████████████████
|
||||||
|
████████ ██ ██ ██ ████ ██ ██████ ██████████████ ██ ██ ██ ██ ██████ ██ ██ ████ ████████ ████████ ██████ ██ ██ ██ ██ ██ ██ ██ ████████ ██ ██ ██████████████ ██ ██████ ████ ██████████
|
||||||
|
██████████ ██ ██████ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ████ ██████ ██ ██ ████ ██ ████ ████ ██ ████████ ██████ ████ ██████ ██ ████ ████ ████ ██ ██████ ██ ██ ██ ██ ████ ████████
|
||||||
|
████████ ██ ██ ██ ████████ ████████ ████████ ██████ ██ ██ ██ ██ ████ ████████ ██ ██ ██ ██ ██ ████ ██████ ████ ████ ████ ██████ ████ ██████ ████ ████ ████ ██ ████ ████ ██ ██ ██ ██████████
|
||||||
|
████████████████ ████ ██ ██ ██ ██████ ████ ██ ██ ██ ██ ██ ██████ ██ ████ ████ ████████ ██ ██ ████ ██ ████ ████ ██ ██ ████ ██ ██ ██ ████████ ████████████ ██████████████████ ██ ██████ ████████████
|
||||||
|
████████ ██████ ██ ██ ██ ████████ ██ ██ ████ ████████ ██ ████████████████ ██ ██████ ████ ██████████ ████████ ██████████ ██ ██ ████ ██ ████ ████ ██ ████ ██ ██ ██████████████ ████ ██████ ████ ██ ██████ ██ ████████
|
||||||
|
████████████ ████ ██ ██████████ ████ ████ ████ ██ ████████ ██ ██ ██ ████████ ██████████████ ████ ██ ██ ████ ██ ██████ ██████ ██ ████ ██████ ██ ██ ██ ████ ████ ████ ████████ ████ ████████████████
|
||||||
|
████████ ██████████ ██ ██ ██ ████ ████████ ████ ██ ██ ████ ████ ██████████████ ██ ██ ██ ██ ██████ ██ ████ ██ ██ ████ ████ ████████ ████ ██ ██████ ██ ████ ██ ██ ██████████ ██████ ██ ██████████
|
||||||
|
████████ ██ ██████████ ██████████ ██ ██ ██ ██ ██████ ████ ██ ████ ██ ██████ ██ ████████ ██████ ██████ ████ ██ ████ ██ ██ ████ ██ ██ ██████████████████████████ ██████ ████ ██ ██ ██████████
|
||||||
|
████████ ████ ██ ██ ██ ██ ████ ████ ██ ██████ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ████████████ ██ ████ ██████ ██ ████ ██ ██ ██ ██ ██ ████ ██████ ██████ ██████ ████ ██ ██████ ████ ██████ ████████
|
||||||
|
████████ ████ ██ ████ ████████ ████████ ██████ ████ ████████ ██ ██████ ██████ ██ ██████ ██ ██ ██ ██ ██████ ██ ██████ ████████ ████ ██████ ████ ██ ████ ██ ████ ██ ██████ ████ ████ ████ ████████████
|
||||||
|
████████ ██████ ██ ██ ██ ██ ██████████ ████████ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ████ ██ ██ ████ ██ ██ ██ ██ ████ ████ ████ ██████████ ████ ████ ██ ██ ████ ██ ██████ ██ ██████████
|
||||||
|
████████ ██ ████ ████████ ████████ ██ ██ ██ ██ ████ ██ ██ ██ ██████████ ██ ██ ██ ██████████ ████████████ ██████ ████████████ ██ ██ ████████████████ ██ ██ ████ ██ ██████████ ████████████ ██ ████████ ██████ ██ ██████████
|
||||||
|
██████████ ████ ██ ██████ ████ ████ ██ ██████ ██████ ██ ████ ██████ ██ ██ ████████████ ████████ ████ ██ ██ ████ ██ ██ ████ ██████ ████ ██ ██████ ████ ████████ ██ ██ ██████ ████ ████ ██ ██████████████████
|
||||||
|
████████ ██ ██ ████ ██ ████ ██ ██ ████ ████████ ████████ ████ ████ ██████ ████ ██ ██ ██ ████████ ██ ████ ██ ██ ████ ██████ ████ ██ ██ ████ ████ ████ ██████ ██ ██ ██ ██ ████ ██ ██████ ████ ████████
|
||||||
|
████████ ██ ██ ██ ████ ██ ████ ██████ ████ ██ ██ ██ ██ ████████ ██████ ██████ ██ ██ ██ ██ ██ ██ ████ ██████ ██ ████ ██ ████ ██ ██ ██ ████ ████ ████ ██████ ██ ██ ████████████
|
||||||
|
████████ ████████ ██ ██ ██ ██ ████ ██ ██ ██ ██████ ██ ████ ████████ ██ ████ ██████ ████ ████ ██████ ████████████ ██ ██ ██ ██ ██ ██ ████ ██████ ██ ██ ████████████ ████ ██████ ██████ ██ ██ ██████████
|
||||||
|
████████ ██ ██ ██ ██ ██ ████ ██ ██ ████████ ████ ████ ██ ████ ████████ ████ ████ ██ ██████████████████ ██ ████ ██████ ██ ██ ████ ██████ ██ ██████ ████ ██ ██ ████ ██ ████ ██ ██ ████ ██████ ████ ████ ████████
|
||||||
|
██████████ ██████████ ██████ ██ ██████ ████ ████████ ██████ ██ ██ ██ ██ ██ ██ ██ ██████ ████ ██ ██ ██████ ██ ████ ██ ██ ████ ████████ ████ ████████ ██ ██ ████ ██ ██ ██████ ██ ████████ ████████████████
|
||||||
|
████████ ██ ████ ██████ ██████ ████ ██ ████ ██ ████ ██ ██ ██ ██ ██ ████████ ██ ██ ██ ██ ████████ ██ ██ ██████████ ██ ██ ██████ ██████ ████ ████████████████ ██ ██ ██ ████ ████████ ████ ██████████
|
||||||
|
██████████████ ██ ████ ████ ██ ██ ██ ██ ██ ████████ ██ ██████ ██ ██ ██ ██ ██ ████ ████ ██ ██ ████ ████ ██ ██████ ██ ██ ████ ██████ ████ ██████ ██████ ████ ████████████ ████ ████ ██████ ██ ████ ████████
|
||||||
|
██████████ ████ ████████████████████ ██ ██ ████ ██ ██ ██████████ ██ ██ ██████ ████████ ██████ ████████████████████ ████ ██ ████ ██ ██ ██ ██ ██ ████ ████ ██████ ██████ ██ ██ ██ ██ ██ ████ ██ ████████
|
||||||
|
████████ ████ ██ ██ ██████ ██ ████ ██ ██████████ ██ ████ ██ ██████████ ██ ████ ████ ██████ ████ ████ ████ ██ ██ ████ ██ ████████████ ████ ██ ████████ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ████████
|
||||||
|
████████ ████ ██ ████ ██ ██████ ████████ ████ ████████ ████ ██ ████ ██ ██ ████████ ████ ██ ██ ████████ ██ ████████ ████ ██ ██ ████ ████ ████ ████ ████ ██████ ██████ ██████ ██ ████████████
|
||||||
|
██████████████ ████████ ██████ ████ ██ ██████ ██ ████████ ██ ████ ██ ██ ████████ ████████████ ████████ ████ ████ ██████ ████ ██ ████ ██ ████ ██ ██ ████ ██ ████ ██ ████ ██████ ██████████ ██ ██ ██████████
|
||||||
|
██████████████ ██ ██████ ██ ████ ██ ██ ██ ████████████ ██████ ██ ██ ██ ██ ████████████ ██████████ ████ ████ ██ ████ ████ ████ ██ ██ ████ ████ ██ ██ ██ ████ ██ ████████
|
||||||
|
████████████ ██████ ████ ██ ████ ████████ ████████ ██████ ████ ██ ██ ██ ██ ████ ██████ ████ ██████ ██ ████ ██████ ██ ██ ████████ ████ ██ ████ ██████ ██ ██ ████ ██ ██ ██ ██ ██████ ████ ████████
|
||||||
|
████████ ██ ██ ██ ██ ████ ██████ ████ ██████████████ ██ ██ ██ ██ ████ ████ ██████ ██ ██ ██ ██ ████ ████ ██ ██ ██ ██ ██ ██████ ██ ██████ ██████ ██ ████ ██ ██ ██ ████ ████ ████ ██ ██ ██ ████████████
|
||||||
|
████████ ██████ ██████ ██ ██████ ██ ████████████ ████ ██████ ██ ██ ████ ██ ██ ██████ ████ ██████ ██████████████ ██████ ██████ ████ ██████ ████ ██████ ██ ████ ████ ██████ ██ ██████████ ██████ ████ ████████ ██████ ██████████
|
||||||
|
████████ ████ ████ ██ ██ ██ ██ ██ ██████ ██ ██████████ ██ ████ ██ ██ ████ ██ ████████████████ ██████ ████ ████ ██████ ██████ ██ ██ ██████ ████████████████████ ████ ████ ████████
|
||||||
|
██████████ ████████ ██ ██ ██ ████████ ██████ ████ ██████ ██████████ ██ ██████ ██████ ██████ ████ ████ ████ ██ ████ ████████ ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ████ ████ ██ ██ ██ ██ ████████
|
||||||
|
████████ ██ ██ ████ ██ ██ ██ ██████ ████ ██████ ████████ ████████ ████ ██ ████ ██ ████ ██ ██ ██ ██ ██ ████ ██ ██████ ██████ ████ ██████ ████ ██████ ██ ██ ██ ██████ ██████ ████████ ████████████
|
||||||
|
██████████ ██████ ██ ██ ██ ████████ ██ ████████████ ██ ████████ ██████████ ████████ ██████ ██████ ██ ████ ██████ ██████ ██████ ██ ██ ████ ██ ████ ████ ██████ ████ ██████████████████ ████ ████████ ████ ██ ████ ██████████
|
||||||
|
██████████ ████ ██ ██ ████ ████ ██ ██ ██████████ ██ ██ ████ ██ ██ ██ ██████ ████ ██ ████ ██ ████ ██ ██ ██████ ████ ██ ██ ██ ██ ██ ████ ████ ██ ██ ██████ ██ ██ ██████ ██ ██ ████ ████ ██████ ██ ██ ████████
|
||||||
|
████████ ██ ████ ██ ████████ ██ ████ ██████ ██████████ ████████ ████ ████████ ████████ ██████ ██ ██ ████ ██ ██ ████████ ██████████ ██ ████ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██████ ██ ████████████
|
||||||
|
████████████ ██ ██ ██ ██ ██ ██ ████ ████████ ████ ██ ██████████ ██ ██ ██ ████ ██ ████ ████████ ██ ██ ██ ██████ ██████ ██ ████ ████████████ ████ ██████ ████ ██ ████ ████ ████ ██ ██████████
|
||||||
|
██████████████████████ ██████████ ██ ██ ██ ████ ██ ████████ ████ ██ ████ ████ ████████████ ██ ██ ██████ ████████ ██████ ████ ██████ ██ ██ ██ ██ ██ ████ ██████ ██ ██ ██████████████ ██ ██ ████ ████ ██ ██ ████ ██████████
|
||||||
|
██████████ ████ ████████████ ██████ ████ ██ ██ ████ ██████ ██████ ████████ ██ ██ ██ ████ ████████ ██ ██████████ ██ ██ ██ ██ ████████████████ ████ ████ ██ ██████████ ██████████ ██████ ████ ████ ██ ██ ████████████
|
||||||
|
████████ ████ ██████████ ██████ ██ ██ ████ ██████ ██ ██ ██████████ ██████████ ██ ██ ████ ██ ████ ██████ ██████ ██ ██ ██████ ████ ██ ████ ██ ████ ██ ██ ██████ ████ ████████
|
||||||
|
████████ ████ ██ ██ ██████████ ████ ████ ████ ████ ██ ████ ████ ██████ ████████ ██████ ██ ████ ██ ████ ████ ██ ██ ██ ████████████████ ████ ████ ██ ██ ██ ██████ ████ ██████ ██ ████ ██ ██ ██ ████████
|
||||||
|
████████ ████████ ██ ████ ██ ████ ██ ████ ████ ████ ██ ██████ ██ ████ ████████ ██ ██████ ████ ████ ██████ ██████ ██ ██ ██ ████ ████████ ████ ██ ██ ████████ ████████████████████████ ██ ██ ████ ██ ██████████
|
||||||
|
████████████ ██ ████ ██ ██ ██ ████ ████████ ████ ████ ████ ████████ ████████ ██ ██ ████ ██ ██████ ██████████████████████████ ██ ██ ██ ██████ ██ ████ ██ ████████ ██ ██████ ██ ██ ██████ ██ ██████ ██████████ ████████████
|
||||||
|
████████ ████ ██ ██ ████████ ████████ ████ ██ ████████ ██ ████████████ ██ ████ ██ ██ ████████ ██████ ██████ ██████ ████ ██████ ██ ████ ██ ████ ████████ ██████ ██ ██ ██████ ██ ██ ██ ██ ██ ████ ████ ██ ██████ ██ ████████
|
||||||
|
██████████ ██ ██████ ██ ██ ██ ██ ██ ██ ██████████ ██████ ████████ ██ ████ ██ ██████ ██ ██ ██ ██ ████ ██ ██████ ██████ ██████ ████ ████ ██ ████ ██ ████ ██ ██████ ████ ██ ████████████
|
||||||
|
████████████ ██ ████ ██ ██ ████ ██████ ████ ██ ██████ ██████████████ ██████ ██████ ████ ██ ████ ██ ██ ████ ██████ ██████ ██ ████████ ████ ████ ██ ████ ██ ██ ██ ██████ ██ ██████████ ██████████ ██ ████ ██████████
|
||||||
|
██████████ ██ ████ ██ ██████ ██ ██ ██ ████ ██ ██ ████ ████ ██ ██ ████████████ ██ ██ ██████████████████ ██ ██ ████ ██████████ ██ ████ ██ ██████ ████ ██████ ██ ██ ██████ ██ ██ ██ ████████
|
||||||
|
████████ ████ ██████ ████ ████ ██ ██ ██ ██ ██ ████ ██ ██████ ██████ ██ ████████ ██████ ██ ████████ ████ ██ ██ ██ ██ ██ ████ ██████ ██ ██████ ██ ██ ████ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██████ ████████
|
||||||
|
████████ ██ ██████ ██ ██████ ██ ██ ██ ████████ ██ ██ ████████ ██ ████████ ██ ████ ██████ ████ ████ ██ ████ ██ ██ ██████ ██████ ████ ████ ██ ██ ██████ ██ ██ ████ ██████ ████ ████ ████ ████████████
|
||||||
|
████████ ████████████ ██ ██ ██ ██ ████ ████ ██████ ██ ██ ████ ████ ██████ ██ ██ ██ ██████ ██████ ████ ██████████ ████████ ██ ██ ████ ████ ██████ ████ ████ ██ ██████ ████ ██ ██████ ████████████ ████ ██ ██ ████ ██████████
|
||||||
|
██████████████████ ██ ██████ ██ ████████████████ ██ ████ ████ ████████ ████ ████ ██ ██████████████████████████ ████████ ████████ ██ ██ ████ ██ ██ ██ ██ ██ ██████████ ██ ██████ ██████████████ ██ ██ ██ ████████
|
||||||
|
██████████ ██ ██ ██ ████ ██ ██████ ████ ██ ████ ████████ ██████ ██ ████████████ ████ ████ ████████ ████ ██████ ████ ██ ██ ████ ██ ██ ██ ████ ██ ████ ██████ ████ ██ ██ ██ ██ ██████████████
|
||||||
|
████████ ██ ████████ ██ ██ ████ ██ ██████ ██ ██████ ██████████████ ████ ██ ██ ██ ██ ██ ████ ██ ████ ██████ ████ ██ ████████ ██ ████ ██ ██ ██████████
|
||||||
|
████████ ██ ██████ ██ ████████ ██ ██████ ████ ████████ ██████ ████ ████ ██ ██████ ████ ██ ██████ ██ ██ ██████ ██████ ██████ ██ ██ ██████ ██ ██ ████ ████ ████ ██ ██████ ████ ██ ████████████████████████ ██████ ████████████
|
||||||
|
██████████ ██ ██ ████ ████████████████████ ██ ██ ██ ██████ ██ ████ ██ ████ ██ ██ ██ ██ ██████████ ██ ██ ████ ██ ██ ██ ██ ██████ ████ ████ ██ ██ ██ ██ ██ ██ ██████ ████ ████████ ████ ██████ ██ ██ ██ ████████
|
||||||
|
████████████ ██████ ██ ██ ████ ██ ████ ██ ████ ██████ ████ ██ ██ ██ ████ ██ ██ ██ ██████ ████ ████ ████ ██████ ██ ██ ██████ ████████ ██████ ████ ██ ██ ████████ ██████ ██ ██ ██ ██████ ██ ████ ██ ██████ ████████████
|
||||||
|
████████ ████ ██ ██ ████████ ██████ ████ ████████ ██ ████ ████ ██ ████ ██ ████ ██ ██ ██ ████████ ████ ██ ████ ██ ██████ ██████ ██ ██ ██ ████ ████ ██████████
|
||||||
|
████████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ████████ ██ ████ ██ ██ ████ ████ ████ ██ ██ ██ ██ ████ ████████ ████ ████ ████ ██ ██ ████ ██ ████ ██████████ ██ ██████ ████ ████████ ██ ██ ██ ██████████
|
||||||
|
████████████ ██ ████ ██ ██ ████ ██ ██ ████ ████ ██████ ██████ ██ ██ ████ ██████████ ██ ██ ██ ██ ██████████ ██████ ██ ████ ██ ████ ████ ██████ ████ ████ ████ ██ ████ ██████ ██ ████ ████████████████
|
||||||
|
████████ ██ ████████████ ████ ████ ████████ ██ ██ ████ ████ ████████ ██ ██ ██████ ██ ████████ ██ ██ ██ ████ ██ ██ ████████ ██ ██ ████████ ██ ██ ████████ ████ ██████████ ████ ██ ████████
|
||||||
|
████████████████████ ██ ██ ████ ██████ ██ ████ ████ ██ ████ ██ ██ ██ ████ ██ ██ ████████████ ████ ██ ██ ██ ████ ██ ██ ██████████████ ██████ ██████████ ██ ████████ ██████ ██ ██ ██ ██████████████
|
||||||
|
████████ ████ ██ ██ ██ ████ ██ ████ ████ ██████ ████ ██████ ████ ██ ██ ██ ██ ████ ████████ ████ ██████ ██ ██ ██ ████ ██████ ██ ██ ██████████████████ ████ ████████ ████ ██ ██████████
|
||||||
|
████████ ████ ████████ ██ ██ ██ ██ ████ ██ ██ ██████ ████ ██████ ██ ████ ██████████ ████████████ ██████ ██ ██ ████ ██ ██ ██ ████ ██ ██ ████ ████ ██ ██ ████ ████ ██ ██ ██████ ████████████ ██ ████████
|
||||||
|
████████ ██ ████████ ██ ██ ████ ██ ██ ██ ██ ██████ ██████ ██ ████████ ██ ██ ██████ ████ ████████ ██████ ██████ ████ ██ ██ ████ ██████ ██ ██████ ██████ ██ ████ ██ ██ ████████████ ██ ██ ██████████
|
||||||
|
████████ ██ ██ ██ ██████ ████ ██ ██████████████ ██ ██ ████ ██ ██ ██ ████████ ██ ██ ██ ██ ██ ████ ██ ████ ████ ██ ████ ██ ████ ████ ████ ██ ████ ██ ████ ████████████ ████ ████ ████ ██ ██ ████████████
|
||||||
|
████████████ ██ ██ ████████████ ████ ██ ██ ██ ██ ████ ████ ██ ████ ██ ████ ██ ██ ██████ ████ ████ ██████ ██████ ██ ██████ ████ ████ ██ ██████ ██ ██████████████ ████ ████████████ ██ ████████████
|
||||||
|
████████ ██ ██ ████ ██████ ██ ██ ██ ██ ████ ██████ ████ ██ ██ ██ ████ ██ ██ ██ ██ ██ ██████████████ ████████████████████████████ ██ ██ ██ ██ ██ ████ ██ ██████ ██ ██ ██████████ ██████ ██████ ██████████ ██ ██ ██ ████████
|
||||||
|
████████ ██ ██████ ██ ██████ ██ ██████ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ████████████ ████ ██ ██████ ██ ████ ████ ██████ ██████ ████ ██ ████ ████ ██ ██ ██ ██ ████ ██ ██ ██ ████████
|
||||||
|
██████████ ████████ ██ ██ ████ ██████ ██ ██ ██ ████ ██ ██ ██ ██████████████████ ████ ██ ████ ████ ██ ████████ ██ ████ ████ ████ ████████████████████████ ██████ ██████ ██ ██ ██ ██████████████
|
||||||
|
████████ ██ ██████████ ██ ██ ██ ████████ ██ ██ ██████████ ██ ████████ ████ ████ ██ ████ ████ ██████ ████ ██ ██ ████████ ██ ████ ██ ██ ██ ████ ██████ ██ ██ ██ ████ ████ ██ ██████████████████ ██ ██████████
|
||||||
|
████████ ████ ██ ████████ ████████ ████████ ████████ ████ ██ ██████ ██ ██ ████ ██ ██ ████ ██ ██████████████ ████ ████ ██ ██████████ ██ ██ ██ ██ ██████ ██ ██ ████████ ██████████ ██████ ██████ ██ ██████████ ██████ ██ ████████
|
||||||
|
██████████ ██ ████████ ██ ████ ██ ██ ██ ████ ██ ██ ██ ████ ██████████ ████ ██ ████ ██████ ████ ██████ ████ ██ ████ ████ ██ ██ ██████ ██████ ██ ██ ██████ ██ ██ ██ ██ ██ ████ ██ ██████████████
|
||||||
|
████████ ██ ██ ██ ██████████ ██ ████ ██████ ████ ██ ████ ████████ ████ ██████████ ████ ██ ██ ██ ██ ██ ██ ██████ ████ ██ ████ ████ ██████ ████ ██ ██████ ████ ████ ████ ████ ██ ██ ██ ██████████
|
||||||
|
████████████ ██ ████ ██ ████ ██████████ ██████ ████████████ ████ ████████ ██ ████ ████ ██ ██ ██ ██████ ████ ████ ██████ ████ ██ ██ ██ ████ ██████ ██████ ██ ██ ██████████████████████ ██ ████ ████████ ██████ ████ ████████ ██ ████████████
|
||||||
|
██████████ ██ ████████████ ██ ██████ ██ ██ ████████ ████ ██ ████ ██████ ██ ██████ ████ ██████████████████████ ██████ ████ ████ ██ ████ ██ ████ ██ ████ ██████ ██ ██ ████████ ████ ████████████ ████████ ██ ██ ████████
|
||||||
|
████████ ████ ██████ ██ ████ ██ ██ ████ ████ ██████ ██ ██ ████ ████ ████████ ██████ ██ ████ ████████ ████ ██████ ██████ ██████ ██ ████ ██ ████ ██ ██ ████ ██████ ██ ██████ ████████ ██████ ████ ████ ██ ████ ██████████
|
||||||
|
████████ ██ ██ ██████ ████ ██ ██████ ██ ██ ████ ████ ████████████ ██ ████ ██ ██ ██████ ██ ████ ██ ████ ██ ██████████████████ ████ ████ ████ ████ ██ ██████ ██ ██ ██ ████ ██████ ██ ██ ████████████████
|
||||||
|
██████████ ████ ████ ████████ ██ ██ ██████ ████ ████████ ████ ████ ██ ██ ██ ██ ████ ██ ██ ████ ██ ██ ██ ██████ ████ ██ ██████████ ████ ████ ████ ████ ██ ████ ████ ██ ██ ██ ██ ██████ ████ ████ ████ ████ ██████ ██ ████████████
|
||||||
|
████████████████ ██ ██████ ██ ██ ██ ████ ██ ██████ ██████ ██ ██ ██ ██████ ██████ ██ ████████████████████ ████ ████████ ██ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██████ ████ ██ ████ ██ ████████
|
||||||
|
████████████████ ██████ ██ ██ ██ ██████ ██ ██ ████ ██████ ██████ ████ ██████ ████ ██████ ██████ ██████ ██ ████ ████ ██ ████ ████ ██ ██████ ██ ██ ██ ████████ ██ ██████ ████ ████████
|
||||||
|
████████ ██ ██ ██ ██████ ████ ██ ██ ████████ ██ ██ ██ ██ ██ ██ ██████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ████████ ████ ████ ██ ██ ████ ██████ ██ ████ ██ ██ ████████████
|
||||||
|
████████ ██ ██████ ██████ ██ ██ ████████████████ ██ ██ ██████ ████ ████ ██ ████ ██ ██████ ██████ ████ ██████ ██████ ██████ ██████ ██ ██ ██ ██ ████ ██ ██████ ████████████████████ ████ ██ ██████ ██████ ██████████
|
||||||
|
████████ ████████ ██ ████ ██ ████ ██ ██ ████ ██████████ ██ ██ ██ ██ ████████ ██ ██ ████████ ████ ██ ██████ ██ ██ ████ ████ ██ ████ ██ ██ ██████ ██████ ██ ██████████ ██ ██ ██ ████████
|
||||||
|
████████████████ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██████ ████ ████ ██ ████ ██ ████ ██ ██ ██ ██ ████ ████ ██████ ██ ██████ ██ ██ ████ ██ ██ ████ ████ ██ ██ ██ ██ ██ ██ ████ ██ ██ ████ ████ ██████████████
|
||||||
|
██████████ ██████ ████ ██ ██ ██ ████ ██ ██ ████ ██████ ████ ██ ██ ██ ██████████ ████ ██ ██ ████ ██ ██ ██ ██ ██ ████ ██ ████ ██████ ██████████ ████ ██████ ████████ ██ ██ ██ ████ ██████████
|
||||||
|
████████ ██████ ██ ██ ████ ██ ████████ ██ ██ ████ ████ ██ ██████████ ██ ████ ████████████ ██ ████ ██ ████ ██ ██ ████ ██████ ██ ██████ ██ ████ ████ ██ ████ ██████ ██ ██ ██████████ ████ ██ ██ ████████████
|
||||||
|
██████████████ ██ ██████ ██ ████ ██ ██████ ██ ██ ██████ ██ ██████ ██████████ ██ ██████████ ██ ██████████ ████████████ ██ ██ ██████ ████ ████ ██ ████ ██ ██ ██ ████ ██████ ██████████████ ████ ██ ██ ████████ ██ ████████
|
||||||
|
████████ ████ ████████ ██ ██ ██ ██ ████ ████ ██ ██ ████████████ ██ ████ ████ ████ ████ ██ ██ ████ ██████ ██ ██████ ████ ████ ██ ████ ██████ ██████ ██ ██ ██████ ██ ██ ████ ██ ██ ██ ████████
|
||||||
|
████████ ██ ██ ██████ ████ ████ ██████████ ████████████████ ████████ ██████████ ████ ██ ██ ████ ██ ██ ██ ██ ██ ██████ ██ ██████ ██████ ██ ██ ██████ ████ ██████ ████████ ██████ ██ ██ ██ ████████████
|
||||||
|
██████████████████ ██ ████ ██████ ██ ██ ██ ████ ██ ████ ████ ██ ████████████ ████████ ██ ████ ██ ████████ ████████ ████████ ██ ██ ██ ██ ██ ██ ██ ████ ████ ████████ ██████ ████ ████ ████ ██████ ██████ ██ ██ ██████████
|
||||||
|
████████ ██ ██ ██████ ██ ████ ████████ ██ ████ ██ ██████ ██████ ████ ██ ██ ████████ ██████████████████ ██████ ████ ████ ██ ██████ ██ ██ ██ ██ ██ ████ ██████ ██ ████ ██ ████ ██████ ██ ████████
|
||||||
|
██████████████ ████ ████ ██████ ██████ ██████ ██ ██ ██████ ██ ██ ██ ██████████ ██ ██ ██ ██████ ██ ████ ████ ██ ██ ██ ██████ ██████ ██ ████ ██ ████ ██ ████████ ██ ████ ██ ██ ██████ ██████ ████████
|
||||||
|
████████████████ ██ ██ ██ ██ ██████ ████ ██ ████ ██ ████ ████ ██ ██ ██ ██ ██████████████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██████ ██████ ████ ██████████ ██ ████ ████ ████ ██ ██████ ████████
|
||||||
|
██████████ ██ ████ ██ ██ ██████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ████████ ████████ ██ ██ ████ ██████ ██████ ██ ██ ██ ██████ ██████ ████ ██████ ██ ████ ██████████████████ ██ ██████ ██ ██ ██ ████████
|
||||||
|
████████ ██ ██ ██ ██ ████ ██ ████████████ ████ ████████████ ████ ██ ██ ██████████ ██████ ████████ ████ ██ ████ ████ ██ ██ ██ ████ ██ ████████ ██████ ████ ██████████████████████ ████ ██ ████████
|
||||||
|
████████ ██ ████ ██████ ██ ████ ██ ██ ████ ██ ██ ██ ██ ████████ ██ ██████ ██████ ██ ████ ████ ██ ██ ████ ██ ██ ████████ ████████ ██ ██ ████ ████████ ██ ██████ ██ ██ ██████ ██ ██ ████ ████████
|
||||||
|
████████ ██████ ██ ██ ██ ████████ ██ ██ ██ ██ ████ ████ ████ ████████████ ██ ████████ ██ ██ ██ ██ ████ ██ ██ ██ ██ ████ ████ ██ ██ ██████████ ████████████████ ████ ████ ████ ██ ██ ██ ████████████
|
||||||
|
██████████████████ ██████ ████ ████ ████ ██████ ██ ████ ██ ██████ ████ ██ ██████████████ ██ ████ ██ ██████ ██████ ██████ ████ ████████ ██████ ████ ████ ████ ██ ██████ ██ ██ ████████████ ██████████████ ██████ ██ ██ ██████████
|
||||||
|
████████ ████ ████ ██ ████ ████████ ██████ ██ ████ ██ ██ ██████ ██████ ████ ██ ████████ ██████████ ██████████ ██ ██ ██ ██ ██ ██ ████ ████ ██████ ██ ████████████ ████ ██████ ██████████████ ██ ████████████ ████████
|
||||||
|
████████ ██ ██ ██ ████ ████ ██ ██ ████ ████████ ██████████ ████ ██████ ██ ██████ ████ ████████ ██ ██ ████████ ████ ██ ████ ██ ████ ██ ██ ██ ██ ██ ██████ ██ ██████ ██ ██ ██ ██████████
|
||||||
|
████████████ ██ ████ ████ ██ ██████ ██ ████ ██ ██ ██████ ████ ██████████ ██ ██ ████ ██ ██ ██ ██ ████ ████ ████████ ██ ██ ████████████ ██ ████ ████████████████ ██ ██████ ██ ████████ ████ ██ ████████████
|
||||||
|
████████ ██ ██ ██████ ██████ ██████ ██ ████ ██ ██ ██ ██████ ████ ██ ██ ██ ██ ██████ ████ ██████ ████████ ██ ████ ██ ██ ████ ██████ ████ ████ ██ ██ ██ ██ ██████ ████ ████ ██ ██ ████ ██ ██ ████████████
|
||||||
|
████████ ████ ██ ████ ████ ████████ ████ ████ ████ ██ ████ ██ ██ ████████ ██ ██████████ ██ ████████████████ ████ ████████ ██████ ████ ██ ██ ██ ████ ██████ ██ ██ ██ ██████ ████████ ██ ██████████ ██ ██████ ██ ████████
|
||||||
|
████████ ██ ██████ ██ ██ ██████ ██ ████ ████ ████ ██ ████ ████ ██ ██████ ████ ████ ████ ██████ ██ ████ ██ ████ ██ ██ ██████ ██████ ████ ██████ ████ ████ ██ ████ ██ ██ ██ ████ ██ ██ ████████ ██ ████████
|
||||||
|
████████ ██ ██ ████ ██████ ████ ██ ████ ████ ██ ████ ██ ██ ██ ██ ████ ████ ████ ██ ██ ████████████ ████ ████████ ██ ████ ██████████████ ████ ██ ████████████████
|
||||||
|
████████████ ██ ██████ ██ ██████████ ██ ████████████████ ██ ██████ ████ ████ ██ ██████████████ ██ ██████ ██████ ██████ ████ ████████████ ██ ██████ ████ ████ ██ ████ ████ ██████ ████ ████ ████ ████████████████████ ██████ ██ ██████████
|
||||||
|
██████████ ████ ██ ██ ██████ ████ ████ ████ ██ ██████ ██ ██ ██ ██ ██ ██ ██████████ ██ ██ ██ ██ ██ ████ ████████████ ████ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██████ ██████ ██ ██████ ████ ██ ██ ██ ████████
|
||||||
|
████████ ██ ██████ ████ ██████ ██████████ ██ ██ ██████ ████ ██████████ ██████ ██████ ████ ████ ██████ ██████ ██████ ██████ ██ ████████████ ██ ██████ ██ ██ ██ ██ ██ ██████ ████████████
|
||||||
|
████████ ██ ██ ██ ██ ██████ ████ ██████ ██ ██ ██████ ████████████ ██ ██ ██ ████ ██ ████ ██ ██ ████ ████ ██ ██ ██ ██████ ████ ██ ████ ██ ██ ██████████
|
||||||
|
██████████ ████ ██ ████ ████ ██████████ ██ ██ ██ ████████████ ██████ ████ ██████ ██ ████████████████ ████ ████ ██ ████ ██ ██████ ██ ██ ██ ██ ██ ████ ████████████ ██ ████████ ██ ██ ██ ██████████
|
||||||
|
████████ ██ ████████ ██████████ ████ ██████ ████ ██ ████ ██ ██ ████ ████ ██ ████ ████ ██ ██████ ██ ██████ ████ ██████ ████ ████ ████ ██ ██ ██ ████████████ ██████ ██ ██ ██████ ██████ ██████ ██ ████ ████████
|
||||||
|
██████████ ██ ████ ████████████ ██ ████ ████ ██ ██ ██ ████ ██ ████ ████ ████ ██ ██ ██ ████ ██████ ██ ██ ██ ██ ████ ██████ ██████ ██████ ██ ████ ██ ██ ████ ██████ ████ ████████
|
||||||
|
████████ ██ ██ ██ ██ ██ ████ ██ ██ ████ ██ ████ ██ ████ ██ ████████ ██ ██████████ ██ ████ ██████ ████ ██ ██ ████████████ ████ ██████ ████ ██████████ ██████ ████ ██████ ██ ████ ██ ████████████
|
||||||
|
██████████████ ██ ████ ██ ████████████ ██████ ██████ ████ ████ ████ ████ ██ ████ ██ ██ ██ ██ ██ ████ ████ ██████ ██ ████ ████ ██████ ████ ████ ██ ████ ████ ██ ████ ████ ██ ████ ██████████ ██ ██ ████ ██████████
|
||||||
|
████████ ██ ████████ ██ ████████████████ ██ ██ ████ ████ ██ ██ ████ ████ ██ ██ ██ ██ ████████████ ██ ██████████ ██ ████ ██████ ██ ██ ██████████████ ████ ████ ████████ ██████████ ██ ██ ████████
|
||||||
|
██████████ ██ ██ ██ ██████████ ████ ██ ██ ████ ██ ████ ██ ██ ████████ ██ ████ ██████ ████ ████ ██ ████ ████ ████████ ████ ██ ██████████████ ████████████ ██ ████████████ ████ ████ ████ ██ ██ ██ ██ ██████████
|
||||||
|
████████████ ████ ████ ██ ██ ██████ ██ ████████████ ██ ██ ██ ██ ██ ████ ██ ████ ████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██████ ████████ ██████ ████ ████ ████ ██ ██ ██ ████████████
|
||||||
|
██████████████ ██ ██ ██ ██ ██████ ██ ██ ██ ██ ████████ ██████ ████████ ██████████ ██████████ ████ ██████ ██ ██ ██ ██ ██ ██ ██ ████ ████ ████ ████ ██ ████ ████ ██████ ████ ██ ██ ██ ████████████
|
||||||
|
████████ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ██ ██ ████ ████████ ██ ██ ████ ████████████ ██ ████████████████ ██████ ██████ ██ ████ ██ ██ ██████████ ████ ██████ ████ ████████████████████ ██ ████ ████████
|
||||||
|
████████ ████ ████ ██████ ██████ ████ ██████ ████████████████████ ████ ██ ████ ████ ██ ██ ████ ████ ██████ ██ ████ ████ ████ ██ ██ ██ ████ ██ ██ ██ ██ ████ ████ ██ ██ ██ ████ ████ ██████ ██ ██ ██ ████████████
|
||||||
|
██████████ ████ ████████ ████ ████ ██████████ ██████ ██████ ██ ██ ██ ██████ ████ ██ ████ ██ ████ ████ ██ ██ ████ ████████ ██████ ██████ ██████ ████ ████ ████████████ ████ ██████ ████ ████ ██ ████ ██████████
|
||||||
|
██████████ ████ ████████ ████ ██████████████ ██████ ██ ██████ ██ ██████████ ██ ████████████ ████ ██ ██████ ██████ ████ ██████ ████ ████ ██ ██ ██████ ████ ██ ████ ████████ ████████████ ██████████████ ████████████ ██ ████ ██ ████████
|
||||||
|
████████ ██ ██ ██████ ██ ██ ██ ████████████ ██ ██████ ████ ██████ ████ ██ ██ ██████████████ ████████████████ ██████████ ██████████ ████ ██ ██ ██ ████ ████ ██ ██ ██ ██ ████ ██████ ████████ ██ ██████████
|
||||||
|
████████ ████████ ██ ██ ██ ██████ ██████ ██ ██ ██ ████ ██ ██ ██ ██ ██████ ██ ████ ██ ██████████████ ████ ██ ██████ ████ ██ ██ ██████ ████ ██ ██████████ ████ ██████ ██ ██████████
|
||||||
|
██████████ ████████ ██ ██████ ██ ██ ████ ██████ ██████ ████ ██ ████ ████ ██████ ██████████ ██ ██ ██ ██ ████ ████ ██████ ████████████ ██████████████ ██ ██████ ████ ████ ████ ████ ██ ████ ████████████
|
||||||
|
████████ ██████ ████████████ ████ ████ ██ ██████ ████ ██████████ ██ ██ ██████ ██ ██ ██ ████ ██ ████████████ ██████ ██████ ██████ ██████ ████ ██████ ██████ ██ ████ ██ ██ ████ ████ ████ ██████████ ████████████
|
||||||
|
████████ ██ ████ ██ ██ ██ ████████ ██ ████ ██ ██ ██ ██████ ██ ██ ████ ██ ██ ████ ████ ████████ ██████████████████████ ████ ██ ██ ██ ██ ██ ██████ ████ ██ ████ ██████ ████ ████ ██ ██ ████████
|
||||||
|
██████████ ██████ ██ ██████ ████ ████ ██ ████ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██████ ██ ████ ████ ██ ██ ██████ ██████ ██████ ██ ████ ██ ██████ ██ ██ ████ ██ ██ ██ ██ ██████████
|
||||||
|
████████ ██ ██████ ██ ██ ██ ██████ ████ ██████ ██████ ██████ ██████ ██ ██████ ████ ██ ████ ██ ████ ██ ██ ██ ████ ████ ████ ██ ██████ ████████████ ████ ████ ██████ ██ ██ ████████████
|
||||||
|
██████████ ██████████████ ██ ██ ██ ████████████ ██ ██ ████ ██████ ████ ██ ██ ██ ██ ████ ██████ ████ ██████ ██████ ████████████ ██ ██ ████ ██ ██ ██ ████ ██████████ ████████████ ██ ██████ ████ ██ ████████████
|
||||||
|
████████ ██ ██ ██████ ██████ ██████ ██████████ ████ ████████ ████ ██ ██ ██████ ██ ██ ██████████ ████ ████████████ ██ ██ ██ ████ ██ ████ ██ ██ ████ ██████ ██████ ████ ████████ ██ ████████
|
||||||
|
████████████████████████ ████ ██ ██ ████ ████ ██ ██ ██ ██████ ████ ████ ████████ ██ ██ ██████ ████ ██████ ██ ██ ██████ ██████ ██████ ██████ ████ ██ ████ ██████ ████ ██ ██ ██ ██ ██████ ████████████████
|
||||||
|
████████ ████ ██████ ██ ████ ██ ██ ██ ██ ██ ██████ ████ ████ ████ ████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ████ ██████ ████ ██ ██ ████ ██ ██████ ██ ██ ██ ██ ██████████
|
||||||
|
████████ ██████████ ██████ ██████ ██ ██ ██████ ██ ██████ ██████████ ██ ████ ██ ██ ██ ██ ██████ ██████████████ ████ ██ ████ ██ ██████ ██ ██ ██ ████ ██████ ████████████ ████ ████ ██ ████ ██████ ██ ████████
|
||||||
|
████████ ██ ██ ██ ████████████████ ██ ██ ██ ████ ████ ██████ ██ ██ ██ ██ ██ ██ ████████ ██████ ████ ██ ██ ██ ██ ██ ████ ██ ██ ████ ████ ██ ██████ ████ ████ ██████████ ████████████
|
||||||
|
████████ ██ ██ ██████ ██ ████ ██ ████ ████ ████████ ██ ██ ██████ ████ ██ ██ ████ ████ ██ ██ ██ ████ ██ ██ ██████████ ██████ ██████ ██ ██ ██ ████ ████ ██ ██████ ████████ ██████████
|
||||||
|
████████ ██ ██ ██ ██████ ████ ████ ██ ██ ████████ ████████ ██ ██ ██ ████ ████ ██ ██████████ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ ████ ██ ████ ████ ██ ████ ██ ██ ████ ████ ██ ████████
|
||||||
|
████████ ██████████ ████ ████ ██ ██ ██████ ██ ████ ██ ██ ████ ██ ████████████ ████████████ ██ ██ ██ ████ ██████ ████ ██ ████ ████ ██ ████████ ████ ██ ██ ██ ██ ██ ██ ██████ ██ ████ ██ ████████ ██ ████ ██████████
|
||||||
|
████████ ██ ████ ██ ████ ██████ ██ ████ ████ ██████ ██ ██████ ██████████ ██████████ ██ ██ ████████████████████ ██ ████ ████ ████ ██ ████████ ██ ████ ██ ██████████ ██ ██████ ████████ ██ ████████
|
||||||
|
██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
|
||||||
|
██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
|
||||||
|
██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
|
||||||
|
██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████
|
@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
constexpr unsigned ceil_div(unsigned a, unsigned b) {
|
constexpr unsigned ceil_div(unsigned a, unsigned b) {
|
||||||
|
if (b == 0) throw runtime_error("Dividion by zero not possible");
|
||||||
return a / b + (a % b > 0);
|
return a / b + (a % b > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,33 +40,6 @@ char Encoder::determite_version(unsigned size, CorrectionLevel corr_lvl)
|
|||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned Encoder::calculate_encoded_input_size(unsigned input_size, QRCodeMethod method)
|
|
||||||
{
|
|
||||||
if (method == QRCodeMethod::Dynamic) throw std::runtime_error("Specify correct method");
|
|
||||||
|
|
||||||
unsigned bit_num = 0;
|
|
||||||
|
|
||||||
switch (method) {
|
|
||||||
case QRCodeMethod::Numeric:
|
|
||||||
bit_num = 10 * (input_size / 3);
|
|
||||||
if (input_size % 3 == 2)
|
|
||||||
bit_num += 7;
|
|
||||||
else if (input_size % 3 == 1)
|
|
||||||
bit_num += 4;
|
|
||||||
break;
|
|
||||||
case QRCodeMethod::Alphabetic:
|
|
||||||
bit_num = 11 * (input_size / 2);
|
|
||||||
if (input_size % 2 == 1)
|
|
||||||
bit_num += 6;
|
|
||||||
break;
|
|
||||||
case QRCodeMethod::Byte:
|
|
||||||
bit_num = input_size * 8;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bit_num;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned Encoder::calculate_metadata_size(QRCodeMethod method, char version)
|
unsigned Encoder::calculate_metadata_size(QRCodeMethod method, char version)
|
||||||
{
|
{
|
||||||
if (method == QRCodeMethod::Dynamic) throw std::runtime_error("Specify correct method");
|
if (method == QRCodeMethod::Dynamic) throw std::runtime_error("Specify correct method");
|
||||||
@ -123,13 +96,16 @@ void Encoder::encode_byte(const string& input, BitArray& out, unsigned offset)
|
|||||||
out.set(offset + i * 8, input[i], 8);
|
out.set(offset + i * 8, input[i], 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char Encoder::encode_char(char ch)
|
constexpr unsigned char Encoder::encode_char(char ch)
|
||||||
{
|
{
|
||||||
for (unsigned i = 0; i < Tables::alphabetic.size(); i++)
|
for (unsigned char i = 0; i < Tables::alphabetic.size(); i++)
|
||||||
if (ch == Tables::alphabetic.at(i))
|
if (ch == Tables::alphabetic.at(i))
|
||||||
return i;
|
return i;
|
||||||
|
|
||||||
|
if (!Tables::is_alphabetic(ch))
|
||||||
throw std::runtime_error("No such character in alphabet. Use bytes QR code method.");
|
throw std::runtime_error("No such character in alphabet. Use bytes QR code method.");
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Encoder::pad_data(BitArray& arr, unsigned bits_written)
|
void Encoder::pad_data(BitArray& arr, unsigned bits_written)
|
||||||
@ -141,13 +117,6 @@ void Encoder::pad_data(BitArray& arr, unsigned bits_written)
|
|||||||
arr.v[i] = ((i - encoded_bytes) % 2 == 0) ? 0b11101100 : 0b00010001;
|
arr.v[i] = ((i - encoded_bytes) % 2 == 0) ? 0b11101100 : 0b00010001;
|
||||||
}
|
}
|
||||||
|
|
||||||
char Encoder::get_version() const
|
|
||||||
{
|
|
||||||
if (version < 0) throw std::runtime_error("Determite version before getting it");
|
|
||||||
|
|
||||||
return version;
|
|
||||||
}
|
|
||||||
|
|
||||||
BitArray Encoder::get_data() const
|
BitArray Encoder::get_data() const
|
||||||
{
|
{
|
||||||
if (e.size == 0) throw std::runtime_error("Data is not calculated yet");
|
if (e.size == 0) throw std::runtime_error("Data is not calculated yet");
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <array>
|
#include <array>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
#include "Method.hpp"
|
#include "Method.hpp"
|
||||||
#include "BitArray.hpp"
|
#include "BitArray.hpp"
|
||||||
@ -17,7 +18,7 @@ public:
|
|||||||
|
|
||||||
static char determite_version(unsigned size, CorrectionLevel corr_lvl);
|
static char determite_version(unsigned size, CorrectionLevel corr_lvl);
|
||||||
|
|
||||||
static unsigned calculate_encoded_input_size(unsigned input_size, QRCodeMethod method);
|
static constexpr unsigned calculate_encoded_input_size(unsigned input_size, QRCodeMethod method);
|
||||||
static unsigned calculate_metadata_size(QRCodeMethod method, char version);
|
static unsigned calculate_metadata_size(QRCodeMethod method, char version);
|
||||||
|
|
||||||
static void write_metadata(unsigned input_size, unsigned input_bits_amount_size, QRCodeMethod method, BitArray& out);
|
static void write_metadata(unsigned input_size, unsigned input_bits_amount_size, QRCodeMethod method, BitArray& out);
|
||||||
@ -40,14 +41,14 @@ public:
|
|||||||
static void encode_alphabetic(const string& input, BitArray& out, unsigned offset);
|
static void encode_alphabetic(const string& input, BitArray& out, unsigned offset);
|
||||||
static void encode_byte(const string& input, BitArray& out, unsigned offset);
|
static void encode_byte(const string& input, BitArray& out, unsigned offset);
|
||||||
|
|
||||||
static unsigned char encode_char(char ch);
|
|
||||||
|
|
||||||
static void pad_data(BitArray& arr, unsigned bits_written);
|
static void pad_data(BitArray& arr, unsigned bits_written);
|
||||||
|
|
||||||
char get_version() const;
|
constexpr char get_version() const { return version; };
|
||||||
BitArray get_data() const;
|
BitArray get_data() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
static constexpr unsigned char encode_char(char ch);
|
||||||
|
|
||||||
const string input;
|
const string input;
|
||||||
CorrectionLevel corr_lvl;
|
CorrectionLevel corr_lvl;
|
||||||
const QRCodeMethod method;
|
const QRCodeMethod method;
|
||||||
@ -56,6 +57,33 @@ private:
|
|||||||
BitArray e;
|
BitArray e;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
constexpr unsigned Encoder::calculate_encoded_input_size(unsigned input_size, QRCodeMethod method)
|
||||||
|
{
|
||||||
|
if (method == QRCodeMethod::Dynamic) throw std::runtime_error("Specify correct method");
|
||||||
|
|
||||||
|
unsigned bit_num = 0;
|
||||||
|
|
||||||
|
switch (method) {
|
||||||
|
case QRCodeMethod::Numeric:
|
||||||
|
bit_num = 10 * (input_size / 3);
|
||||||
|
if (input_size % 3 == 2)
|
||||||
|
bit_num += 7;
|
||||||
|
else if (input_size % 3 == 1)
|
||||||
|
bit_num += 4;
|
||||||
|
break;
|
||||||
|
case QRCodeMethod::Alphabetic:
|
||||||
|
bit_num = 11 * (input_size / 2);
|
||||||
|
if (input_size % 2 == 1)
|
||||||
|
bit_num += 6;
|
||||||
|
break;
|
||||||
|
case QRCodeMethod::Byte:
|
||||||
|
bit_num = input_size * 8;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return bit_num;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T, size_t N>
|
template <typename T, size_t N>
|
||||||
constexpr unsigned upper_index(const array<T, N> arr, T val) {
|
constexpr unsigned upper_index(const array<T, N> arr, T val) {
|
||||||
unsigned count = arr.size(), s = 0, e = 0, step = 0;
|
unsigned count = arr.size(), s = 0, e = 0, step = 0;
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
#include "Method.hpp"
|
#include "Method.hpp"
|
||||||
#include "Tables.hpp"
|
#include "Tables.hpp"
|
||||||
|
|
||||||
@ -14,7 +12,7 @@ QRCodeMethod Method::determite_method(string& input)
|
|||||||
if (!is_num(ch))
|
if (!is_num(ch))
|
||||||
type = QRCodeMethod::Alphabetic;
|
type = QRCodeMethod::Alphabetic;
|
||||||
if (type == QRCodeMethod::Alphabetic)
|
if (type == QRCodeMethod::Alphabetic)
|
||||||
if (!is_alphabetic(ch))
|
if (!Tables::is_alphabetic(ch))
|
||||||
type = QRCodeMethod::Byte;
|
type = QRCodeMethod::Byte;
|
||||||
if (type == QRCodeMethod::Byte)
|
if (type == QRCodeMethod::Byte)
|
||||||
break;
|
break;
|
||||||
@ -22,8 +20,3 @@ QRCodeMethod Method::determite_method(string& input)
|
|||||||
|
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Method::is_alphabetic(char ch)
|
|
||||||
{
|
|
||||||
return find(Tables::alphabetic.cbegin(), Tables::alphabetic.cend(), ch) != Tables::alphabetic.cend();
|
|
||||||
}
|
|
||||||
|
@ -23,5 +23,4 @@ public:
|
|||||||
static QRCodeMethod determite_method(string& input);
|
static QRCodeMethod determite_method(string& input);
|
||||||
|
|
||||||
static constexpr bool is_num(char ch) { return ch >= '0' && ch <= '9'; };
|
static constexpr bool is_num(char ch) { return ch >= '0' && ch <= '9'; };
|
||||||
static bool is_alphabetic(char ch);
|
|
||||||
};
|
};
|
@ -12,8 +12,8 @@ class QRCode
|
|||||||
public:
|
public:
|
||||||
QRCode(string& input_, CorrectionLevel corr_lvl_ = CorrectionLevel::M, QRCodeMethod method_ = QRCodeMethod::Dynamic, char version_ = -1, unsigned char mask_n = 0);
|
QRCode(string& input_, CorrectionLevel corr_lvl_ = CorrectionLevel::M, QRCodeMethod method_ = QRCodeMethod::Dynamic, char version_ = -1, unsigned char mask_n = 0);
|
||||||
|
|
||||||
string to_string() { return matrix.to_string(); };
|
string to_string() const { return matrix.to_string(); };
|
||||||
string to_ascii(char black = '#', char white = ' ', char empty = 'E') { return matrix.to_ascii(black, white, empty); }
|
string to_ascii(char black = '#', char white = ' ', char empty = 'E') const { return matrix.to_ascii(black, white, empty); }
|
||||||
vector<vector<Trit>> to_vector() const { return matrix.to_vector(); };
|
vector<vector<Trit>> to_vector() const { return matrix.to_vector(); };
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "Method.hpp"
|
#include "Method.hpp"
|
||||||
|
|
||||||
namespace Tables {
|
namespace Tables {
|
||||||
static const std::array<char, 45> alphabetic{
|
static constexpr std::array<char, 45> alphabetic{
|
||||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
|
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
|
||||||
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
|
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
|
||||||
@ -16,6 +16,15 @@ namespace Tables {
|
|||||||
'+', '-', '.', '/', ':'
|
'+', '-', '.', '/', ':'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
constexpr bool is_alphabetic(char ch)
|
||||||
|
{
|
||||||
|
for (unsigned i = 0; i < Tables::alphabetic.size(); i++)
|
||||||
|
if (Tables::alphabetic[i] == ch)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
static const std::map<CorrectionLevel, const std::array<unsigned, 40>>max_capability{
|
static const std::map<CorrectionLevel, const std::array<unsigned, 40>>max_capability{
|
||||||
{ CorrectionLevel::L, {{ 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 }} },
|
{ CorrectionLevel::L, {{ 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 }} },
|
||||||
{ CorrectionLevel::M, {{ 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 }} },
|
{ CorrectionLevel::M, {{ 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 }} },
|
||||||
@ -64,7 +73,7 @@ namespace Tables {
|
|||||||
{ 30, {{ 41, 173, 145, 152, 216, 31, 179, 182, 50, 48, 110, 86, 239, 96, 222, 125, 42, 173, 226, 193, 224, 130, 156, 37, 251, 216, 238, 40, 192, 180 }}}
|
{ 30, {{ 41, 173, 145, 152, 216, 31, 179, 182, 50, 48, 110, 86, 239, 96, 222, 125, 42, 173, 226, 193, 224, 130, 156, 37, 251, 216, 238, 40, 192, 180 }}}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const std::array<unsigned char, 256>galois_field{
|
static constexpr std::array<unsigned char, 256>galois_field{
|
||||||
1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38,
|
1, 2, 4, 8, 16, 32, 64, 128, 29, 58, 116, 232, 205, 135, 19, 38,
|
||||||
76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192,
|
76, 152, 45, 90, 180, 117, 234, 201, 143, 3, 6, 12, 24, 48, 96, 192,
|
||||||
157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35,
|
157, 39, 78, 156, 37, 74, 148, 53, 106, 212, 181, 119, 238, 193, 159, 35,
|
||||||
@ -83,7 +92,7 @@ namespace Tables {
|
|||||||
44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71, 142, 1,
|
44, 88, 176, 125, 250, 233, 207, 131, 27, 54, 108, 216, 173, 71, 142, 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const std::array<unsigned char, 256>reverse_galois_field{
|
static constexpr std::array<unsigned char, 256>reverse_galois_field{
|
||||||
0, 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75,
|
0, 0, 1, 25, 2, 50, 26, 198, 3, 223, 51, 238, 27, 104, 199, 75,
|
||||||
4, 100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113,
|
4, 100, 224, 14, 52, 141, 239, 129, 28, 193, 105, 248, 200, 8, 76, 113,
|
||||||
5, 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69,
|
5, 138, 101, 47, 225, 36, 15, 33, 53, 147, 142, 218, 240, 18, 130, 69,
|
||||||
@ -114,7 +123,7 @@ namespace Tables {
|
|||||||
{6, 28, 54, 80, 106, 132, 158}, {6, 32, 58, 84, 110, 136, 162}, {6, 26, 54, 82, 110, 138, 166}, {6, 30, 58, 86, 114, 142, 170}
|
{6, 28, 54, 80, 106, 132, 158}, {6, 32, 58, 84, 110, 136, 162}, {6, 26, 54, 82, 110, 138, 166}, {6, 30, 58, 86, 114, 142, 170}
|
||||||
};
|
};
|
||||||
|
|
||||||
static const array<const array<unsigned char, 3>, 34>version_codes{ {
|
static constexpr array<const array<unsigned char, 3>, 34>version_codes{ {
|
||||||
{ 0b000010, 0b011110, 0b100110 },
|
{ 0b000010, 0b011110, 0b100110 },
|
||||||
{ 0b010001, 0b011100, 0b111000 },
|
{ 0b010001, 0b011100, 0b111000 },
|
||||||
{ 0b110111, 0b011000, 0b000100 },
|
{ 0b110111, 0b011000, 0b000100 },
|
||||||
|
@ -22,8 +22,8 @@ public:
|
|||||||
unsigned char mask_n = 0 // index of mask to use (see below for different masks options)
|
unsigned char mask_n = 0 // index of mask to use (see below for different masks options)
|
||||||
);
|
);
|
||||||
|
|
||||||
string to_string() { return matrix.to_string(); }; // presents qr-code as multiline string of zeros and ones
|
string to_string() const { return matrix.to_string(); }; // presents qr-code as multiline string of zeros and ones
|
||||||
string to_ascii(char black = '#', char white = ' ', char empty = 'E') { return matrix.to_ascii(black, white, empty); } // presents qr-code as multiline string of specified characters
|
string to_ascii(char black = '#', char white = ' ', char empty = 'E') const { return matrix.to_ascii(black, white, empty); } // presents qr-code as multiline string of specified characters
|
||||||
vector<vector<Trit>> to_vector() const { return matrix.to_vector(); }; // presents qr-code as 2D vector of Trits
|
vector<vector<Trit>> to_vector() const { return matrix.to_vector(); }; // presents qr-code as 2D vector of Trits
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
Loading…
x
Reference in New Issue
Block a user